Skip to content

Commit eb7840e

Browse files
authored
Fix regression for bool fields since 2.13.0 (#784)
1 parent 198e71c commit eb7840e

2 files changed

Lines changed: 16 additions & 1 deletion

File tree

pydantic_settings/sources/providers/cli.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1086,7 +1086,9 @@ def _convert_append_action(self, kwargs: dict[str, Any], field_info: FieldInfo,
10861086
def _convert_bool_flag(self, kwargs: dict[str, Any], field_info: FieldInfo, model_default: Any) -> None:
10871087
if kwargs['metavar'] == 'bool':
10881088
meta_bool_flags = [
1089-
meta for meta in field_info.metadata if issubclass(meta, _CliImplicitFlag | _CliExplicitFlag)
1089+
meta
1090+
for meta in field_info.metadata
1091+
if isinstance(meta, type) and issubclass(meta, _CliImplicitFlag | _CliExplicitFlag)
10901092
]
10911093
if not meta_bool_flags and self.cli_implicit_flags:
10921094
meta_bool_flags = [_CliImplicitFlag]

tests/test_source_cli.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2532,6 +2532,19 @@ class WithUnion(BaseSettings):
25322532
assert CliApp.run(WithUnion, ['--poly.type=a']).model_dump() == {'poly': {'a': 1, 'type': 'a'}}
25332533

25342534

2535+
def test_cli_bool_with_non_type_metadata():
2536+
"""https://github.com/pydantic/pydantic-settings/issues/782.
2537+
2538+
Bool fields with non-type metadata (e.g. CliSuppress) should not crash issubclass.
2539+
"""
2540+
2541+
class Settings(BaseSettings):
2542+
field: CliSuppress[bool] = True
2543+
2544+
s = CliApp.run(Settings, cli_args=[])
2545+
assert s.field is True
2546+
2547+
25352548
def test_cli_kebab_case(capsys, monkeypatch):
25362549
class DeepSubModel(BaseModel):
25372550
deep_pos_arg: CliPositionalArg[str]

0 commit comments

Comments
 (0)