Skip to content

Named arguments cannot be variadic. #739

@kzrnm

Description

@kzrnm

Positional arguments can be made variadic as of #518, but this is not possible for named arguments.

class RootCommand(
    BaseSettings,
    cli_parse_args=True,
    cli_implicit_flags='toggle',
):
    param: 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('--param', type=str, nargs='*')
    print(parser.parse_args())
    print('------------argparse help-------------')
    parser.print_help()


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

options:
  -h, --help           show this help message and exit
  --param [PARAM ...]
----------------------------------
------pydantic-settings-------
param=['a', 'b']
------pydantic-settings help-------
usage: app.py [-h] [--param list[str]]

options:
  -h, --help         show this help message and exit
  --param list[str]  (default factory: list)
$ python app.py --param a b
------------argparse-------------
Namespace(param=['a', 'b'])
------------argparse help-------------
usage: app.py [-h] [--param [PARAM ...]]

options:
  -h, --help           show this help message and exit
  --param [PARAM ...]
----------------------------------
usage: app.py [-h] [--param list[str]]
app.py: error: unrecognized arguments: b

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions