Skip to content

Commit 8251e08

Browse files
committed
Fix case insensitive short args parsing.
1 parent 3dcd57b commit 8251e08

File tree

2 files changed

+15
-6
lines changed

2 files changed

+15
-6
lines changed

pydantic_settings/sources.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1512,7 +1512,7 @@ def parse_args_insensitive_method(
15121512
) -> Any:
15131513
insensitive_args = []
15141514
for arg in shlex.split(shlex.join(args)) if args else []:
1515-
flag_prefix = rf'\{self.cli_flag_prefix_char}' * 2
1515+
flag_prefix = rf'\{self.cli_flag_prefix_char}{{1,2}}'
15161516
matched = re.match(rf'^({flag_prefix}[^\s=]+)(.*)', arg)
15171517
if matched:
15181518
arg = matched.group(1).lower() + matched.group(2)

tests/test_settings.py

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2694,18 +2694,27 @@ class BadCliPositionalArg(BaseSettings):
26942694

26952695
def test_cli_case_insensitive_arg():
26962696
class Cfg(BaseSettings, cli_exit_on_error=False):
2697-
Foo: str
2698-
Bar: str
2697+
foo: str = Field(validation_alias=AliasChoices('F', 'Foo'))
2698+
bar: str = Field(validation_alias=AliasChoices('B', 'Bar'))
26992699

2700-
cfg = Cfg(_cli_parse_args=['--FOO=--VAL', '--BAR', '"--VAL"'])
2701-
assert cfg.model_dump() == {'Foo': '--VAL', 'Bar': '"--VAL"'}
2700+
cfg = Cfg(_cli_parse_args=['--FOO=--VAL', '--BAR', '"--VAL"', ])
2701+
assert cfg.model_dump() == {'foo': '--VAL', 'bar': '"--VAL"'}
2702+
2703+
cfg = Cfg(_cli_parse_args=['-f=-V', '-b', '"-V"', ])
2704+
assert cfg.model_dump() == {'foo': '-V', 'bar': '"-V"'}
27022705

27032706
cfg = Cfg(_cli_parse_args=['--Foo=--VAL', '--Bar', '"--VAL"'], _case_sensitive=True)
2704-
assert cfg.model_dump() == {'Foo': '--VAL', 'Bar': '"--VAL"'}
2707+
assert cfg.model_dump() == {'foo': '--VAL', 'bar': '"--VAL"'}
2708+
2709+
cfg = Cfg(_cli_parse_args=['-F=-V', '-B', '"-V"'], _case_sensitive=True)
2710+
assert cfg.model_dump() == {'foo': '-V', 'bar': '"-V"'}
27052711

27062712
with pytest.raises(SettingsError, match='error parsing CLI: unrecognized arguments: --FOO=--VAL --BAR "--VAL"'):
27072713
Cfg(_cli_parse_args=['--FOO=--VAL', '--BAR', '"--VAL"'], _case_sensitive=True)
27082714

2715+
with pytest.raises(SettingsError, match='error parsing CLI: unrecognized arguments: -f=-V -b "-V"'):
2716+
Cfg(_cli_parse_args=['-f=-V', '-b', '"-V"'], _case_sensitive=True)
2717+
27092718
with pytest.raises(SettingsError, match='Case-insensitive matching is only supported on the internal root parser'):
27102719
CliSettingsSource(Cfg, root_parser=CliDummyParser(), case_sensitive=False)
27112720

0 commit comments

Comments
 (0)