Skip to content

Commit e5bbcc3

Browse files
committed
Add test for exception.
1 parent 235c1b4 commit e5bbcc3

File tree

2 files changed

+9
-7
lines changed

2 files changed

+9
-7
lines changed

pydantic_settings/sources/providers/cli.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -669,7 +669,7 @@ def _parse_known_args(*args: Any, **kwargs: Any) -> Namespace:
669669
self._cli_dict_args: dict[str, type[Any] | None] = {}
670670
self._cli_subcommands: defaultdict[str, dict[str, str]] = defaultdict(dict)
671671
self._is_serialize_args = isinstance(root_parser, _CliInternalArgSerializer)
672-
self._serialized_positional_args: dict[str, Any] = {}
672+
self._serialize_positional_args: dict[str, Any] = {}
673673
self._add_parser_args(
674674
parser=self.root_parser,
675675
model=self.settings_cls,
@@ -871,7 +871,7 @@ def _convert_positional_arg(
871871
kwargs['nargs'] = '?'
872872

873873
if self._is_serialize_args:
874-
self._serialized_positional_args[kwargs['dest']] = kwargs['default']
874+
self._serialize_positional_args[kwargs['dest']] = kwargs['default']
875875
kwargs['nargs'] = '*'
876876

877877
kwargs['default'] = PydanticUndefined
@@ -1131,11 +1131,9 @@ def _update_alias_path_only_defaults(
11311131
if not alias_nested_paths:
11321132
alias_path_only_defaults.setdefault(dest, [])
11331133
alias_default = alias_path_only_defaults[dest]
1134-
assert isinstance(alias_default, list)
11351134
else:
11361135
alias_path_only_defaults.setdefault(dest, {})
11371136
current_path = alias_path_only_defaults[dest]
1138-
assert isinstance(current_path, dict)
11391137

11401138
for nested_path in alias_nested_paths[:-1]:
11411139
current_path.setdefault(nested_path, {})
@@ -1148,16 +1146,17 @@ def _update_alias_path_only_defaults(
11481146
alias_default[alias_path_index] = default
11491147

11501148
def _serialized_args(self) -> list[str]:
1151-
assert self._is_serialize_args
1149+
if not self._is_serialize_args:
1150+
raise SettingsError('Root parser is not _CliInternalArgSerializer')
11521151

11531152
cli_args = []
1154-
for arg, values in self._serialized_positional_args.items():
1153+
for arg, values in self._serialize_positional_args.items():
11551154
for value in values if isinstance(values, list) else [values]:
11561155
value = json.dumps(value) if isinstance(value, (dict, list, set)) else str(value)
11571156
cli_args.append(value)
11581157

11591158
for arg, value in self.env_vars.items():
1160-
if arg not in self._serialized_positional_args:
1159+
if arg not in self._serialize_positional_args:
11611160
value = json.dumps(value) if isinstance(value, (dict, list, set)) else str(value)
11621161
cli_args.append(f'{self.cli_flag_prefix_char * min(len(arg), 2)}{arg}')
11631162
cli_args.append(value)

tests/test_source_cli.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1974,6 +1974,9 @@ class Cfg(BaseSettings):
19741974
with pytest.raises(SettingsError, match='CLI settings source prefix is invalid: 123'):
19751975
CliSettingsSource(Cfg, cli_prefix='123')
19761976

1977+
with pytest.raises(SettingsError, match='Root parser is not _CliInternalArgSerializer'):
1978+
CliSettingsSource[Any](Cfg, cli_parse_args=[])._serialized_args()
1979+
19771980
class Food(BaseModel):
19781981
fruit: FruitsEnum = FruitsEnum.kiwi
19791982

0 commit comments

Comments
 (0)