Skip to content

Commit 4933f06

Browse files
hramezaniclaude
andauthored
Fix CLI parsing error for set field types since 2.13.0 (#787) (#788)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
1 parent bd0ebe6 commit 4933f06

2 files changed

Lines changed: 13 additions & 1 deletion

File tree

pydantic_settings/sources/providers/cli.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -621,7 +621,7 @@ def _merged_list_to_str(self, merged_list: list[str], field_name: str) -> str:
621621
cli_arg_map = self._parser_map.get(field_name, {})
622622
try:
623623
list_adapter: Any = TypeAdapter(next(iter(cli_arg_map.values())).field_info.annotation)
624-
is_num_type_str = type(list_adapter.validate_python(['1'])[0]) is str
624+
is_num_type_str = type(next(iter(list_adapter.validate_python(['1'])))) is str
625625
except (StopIteration, ValidationError):
626626
is_num_type_str = None
627627
for index, item in enumerate(merged_list):

tests/test_source_cli.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -812,6 +812,18 @@ def check_answer(cfg, prefix, expected):
812812
check_answer(cfg, prefix, expected)
813813

814814

815+
def test_cli_set_arg():
816+
class Cfg(BaseSettings):
817+
str_set: set[str] | None = None
818+
num_set: set[int] | None = None
819+
820+
cfg = CliApp.run(Cfg, cli_args=['--str_set', 'a,b', '--str_set', 'c'])
821+
assert cfg.model_dump() == {'str_set': {'a', 'b', 'c'}, 'num_set': None}
822+
823+
cfg = CliApp.run(Cfg, cli_args=['--num_set', '1,2', '--num_set', '3'])
824+
assert cfg.model_dump() == {'str_set': None, 'num_set': {1, 2, 3}}
825+
826+
815827
@pytest.mark.parametrize('arg_spaces', [no_add_cli_arg_spaces, add_cli_arg_spaces])
816828
def test_cli_list_json_value_parsing(arg_spaces):
817829
class Cfg(BaseSettings):

0 commit comments

Comments
 (0)