Skip to content

Variadic arguments do not work correctly when enable_decoding=False #741

@kzrnm

Description

@kzrnm

As shown below, variadic arguments do not work correctly when enable_decoding=False.

class RootCommand(
    BaseSettings,
    cli_parse_args=True,
    cli_implicit_flags='toggle',
    enable_decoding=False,
):
    # param: list[str] = Field(default_factory=list)
    pos: CliPositionalArg[list[str]] = Field(default_factory=list)

    def cli_cmd(self):
        print('------pydantic-settings-------')
        print(self)
        print('------pydantic-settings help-------')
        CliSettingsSource[argparse.ArgumentParser](RootCommand).root_parser.print_help()


def main(args: list[str] | None = None):
    CliApp.run(RootCommand, cli_args=args)


def mainA():
    print('------------argparse-------------')
    parser = argparse.ArgumentParser()
    parser.add_argument('pos', type=str, nargs='*')
    parser.add_argument('--param', type=str, nargs='*')
    print(parser.parse_known_args()[0])
    print('------------argparse help-------------')
    parser.print_help()


if __name__ == '__main__':
    mainA()
    print('----------------------------------')
    main()
$ python app.py a b 
------------argparse-------------
Namespace(pos=['a', 'b'], param=None)
------------argparse help-------------
usage: app.py [-h] [--param [PARAM ...]] [pos ...]

positional arguments:
  pos

options:
  -h, --help           show this help message and exit
  --param [PARAM ...]
----------------------------------
Traceback (most recent call last):
  File "/home/kzrnm/workspace/forks/pydantic-settings/app.py", line 57, in <module>
    main()
  File "/home/kzrnm/workspace/forks/pydantic-settings/app.py", line 41, in main
    CliApp.run(RootCommand, cli_args=args)
  File "/home/kzrnm/workspace/forks/pydantic-settings/pydantic_settings/main.py", line 682, in run
    return CliApp._run_cli_cmd(model_cls(**model_init_data), cli_cmd_method_name, is_required=False)
  File "/home/kzrnm/workspace/forks/pydantic-settings/pydantic_settings/main.py", line 198, in __init__
    super().__init__(
  File "/home/kzrnm/workspace/forks/pydantic-settings/.venv/lib/python3.10/site-packages/pydantic/main.py", line 250, in __init__
    validated_self = self.__pydantic_validator__.validate_python(data, self_instance=self)
pydantic_core._pydantic_core.ValidationError: 1 validation error for RootCommand
pos
  Input should be a valid list [type=list_type, input_value='a,b', input_type=str]
    For further information visit https://errors.pydantic.dev/2.12/v/list_type

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions