Skip to content

Commit 6ffd6bd

Browse files
authored
Add support for short options. (#339)
1 parent 8b8803d commit 6ffd6bd

File tree

3 files changed

+15
-9
lines changed

3 files changed

+15
-9
lines changed

docs/index.md

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -526,7 +526,7 @@ print(Settings().model_dump())
526526
```
527527

528528
To enable CLI parsing, we simply set the `cli_parse_args` flag to a valid value, which retains similar conotations as
529-
defined in `argparse`. Alternatively, we can also directly provided the args to parse at time of instantiation:
529+
defined in `argparse`. Alternatively, we can also directly provide the args to parse at time of instantiation:
530530

531531
```py
532532
from pydantic_settings import BaseSettings
@@ -619,7 +619,7 @@ CLI argument parsing of dictionaries supports intermixing of any of the below tw
619619

620620
These can be used in conjunction with list forms as well, e.g:
621621

622-
* `--field k1=1,k2=2 --field k3=3 --field '{"k4: 4}'` etc.
622+
* `--field k1=1,k2=2 --field k3=3 --field '{"k4": 4}'` etc.
623623

624624
```py
625625
import sys
@@ -671,7 +671,7 @@ print(Settings().model_dump())
671671

672672
#### Aliases
673673

674-
Pydantic field aliases are added as CLI argument aliases.
674+
Pydantic field aliases are added as CLI argument aliases. Aliases of length one are converted into short options.
675675

676676
```py
677677
import sys
@@ -683,15 +683,21 @@ from pydantic_settings import BaseSettings
683683

684684
class User(BaseSettings, cli_parse_args=True):
685685
first_name: str = Field(
686-
validation_alias=AliasChoices('fname', AliasPath('name', 0))
686+
validation_alias=AliasChoices('f', 'fname', AliasPath('name', 0))
687+
)
688+
last_name: str = Field(
689+
validation_alias=AliasChoices('l', 'lname', AliasPath('name', 1))
687690
)
688-
last_name: str = Field(validation_alias=AliasChoices('lname', AliasPath('name', 1)))
689691

690692

691693
sys.argv = ['example.py', '--fname', 'John', '--lname', 'Doe']
692694
print(User().model_dump())
693695
#> {'first_name': 'John', 'last_name': 'Doe'}
694696

697+
sys.argv = ['example.py', '-f', 'John', '-l', 'Doe']
698+
print(User().model_dump())
699+
#> {'first_name': 'John', 'last_name': 'Doe'}
700+
695701
sys.argv = ['example.py', '--name', 'John,Doe']
696702
print(User().model_dump())
697703
#> {'first_name': 'John', 'last_name': 'Doe'}

pydantic_settings/sources.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1428,10 +1428,10 @@ def _add_parser_args(
14281428
if isinstance(group, dict):
14291429
group = self._add_argument_group(parser, **group)
14301430
added_args += list(arg_names)
1431-
self._add_argument(group, *(f'{arg_flag}{name}' for name in arg_names), **kwargs)
1431+
self._add_argument(group, *(f'{arg_flag[:len(name)]}{name}' for name in arg_names), **kwargs)
14321432
else:
14331433
added_args += list(arg_names)
1434-
self._add_argument(parser, *(f'{arg_flag}{name}' for name in arg_names), **kwargs)
1434+
self._add_argument(parser, *(f'{arg_flag[:len(name)]}{name}' for name in arg_names), **kwargs)
14351435

14361436
self._add_parser_alias_paths(parser, alias_path_args, added_args, arg_prefix, subcommand_prefix, group)
14371437
return parser

tests/test_settings.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2270,9 +2270,9 @@ class Cfg(BaseSettings, cli_avoid_json=avoid_json):
22702270

22712271
cfg = Cfg(
22722272
_cli_parse_args=[
2273-
'--a',
2273+
'-a',
22742274
'a',
2275-
'--b',
2275+
'-b',
22762276
'b',
22772277
'--str',
22782278
'str',

0 commit comments

Comments
 (0)