- 
          
 - 
                Notifications
    
You must be signed in to change notification settings  - Fork 108
 
Closed
Labels
bugSomething isn't workingSomething isn't working
Description
class SubModel(BaseModel):
    v1: str = "default"
    v2: bytes = b"hello"
    v3: int
class Settings(BaseSettings):
    model_config = SettingsConfigDict(
        cli_prog_name="prog1",
        cli_parse_args=True,
        nested_model_default_partial_update=True,
        alias_generator=AliasGenerator(lambda s: s.replace('_', '-'))
    )
    v0: str = "ok"
    sub_model: SubModel = SubModel(v1="top default", v3=33)
def help():
    sys.argv = [
        'example.py',
        "-h"
    ]
    try:
        Settings()
    except SystemExit:
        print("sys.exit() was called and handled.")
    print("After exit")
def test_cli():
    sys.argv = [
        'setting',
        "--sub-model.v1=cli",
        # "--sub1.v1=cli"
    ]
    
    print("in test cli: Settings()=", Settings())
def main():
    help()
    test_cli()
if __name__ == "__main__":
    main()
output:
usage: prog1 [-h] [--v0 str] [--sub-model JSON] [--sub-model.v1 str] [--sub-model.v2 bytes] [--sub-model.v3 int]
options:
  -h, --help            show this help message and exit
  --v0 str              (default: ok)
sub-model options:
  --sub-model JSON      set sub-model from JSON string
  --sub-model.v1 str    (default: top default)
  --sub-model.v2 bytes  (default: b'hello')
  --sub-model.v3 int    (default: 33)
sys.exit() was called and handled.
After exit
Traceback (most recent call last):
  File ".//pydantic-setting-bug.py", line 47, in <module>
    main()
  File ".//pydantic-setting-bug.py", line 44, in main
    test_cli()
  File ".//pydantic-setting-bug.py", line 40, in test_cli
    print("in test cli: Settings()=", Settings())
  File "~/.local/lib/python3.10/site-packages/pydantic_settings/main.py", line 167, in __init__
    super().__init__(
  File "~/.local/lib/python3.10/site-packages/pydantic/main.py", line 212, in __init__
    validated_self = self.__pydantic_validator__.validate_python(data, self_instance=self)
pydantic_core._pydantic_core.ValidationError: 2 validation errors for Settings
sub-model.v3
  Field required [type=missing, input_value={'v1': 'cli'}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.9/v/missing
sub_model
  Extra inputs are not permitted [type=extra_forbidden, input_value={'v1': 'top default', 'v2': b'hello', 'v3': 33}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.9/v/extra_forbidden
pydantic-2.9.2 pydantic-core-2.23.4 pydantic_settings-2.6.1
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working