|
4 | 4 | import inspect |
5 | 5 | import threading |
6 | 6 | from argparse import Namespace |
| 7 | +from collections.abc import Mapping |
7 | 8 | from types import SimpleNamespace |
8 | 9 | from typing import Any, ClassVar, TypeVar |
9 | 10 |
|
@@ -57,6 +58,7 @@ class SettingsConfigDict(ConfigDict, total=False): |
57 | 58 | cli_implicit_flags: bool | None |
58 | 59 | cli_ignore_unknown_args: bool | None |
59 | 60 | cli_kebab_case: bool | None |
| 61 | + cli_shortcuts: Mapping[str, str | list[str]] | None |
60 | 62 | secrets_dir: PathType | None |
61 | 63 | json_file: PathType | None |
62 | 64 | json_file_encoding: str | None |
@@ -149,6 +151,7 @@ class BaseSettings(BaseModel): |
149 | 151 | (e.g. --flag, --no-flag). Defaults to `False`. |
150 | 152 | _cli_ignore_unknown_args: Whether to ignore unknown CLI args and parse only known ones. Defaults to `False`. |
151 | 153 | _cli_kebab_case: CLI args use kebab case. Defaults to `False`. |
| 154 | + _cli_shortcuts: Mapping of target field name to alias names. Defaults to `None`. |
152 | 155 | _secrets_dir: The secret files directory or a sequence of directories. Defaults to `None`. |
153 | 156 | """ |
154 | 157 |
|
@@ -178,6 +181,7 @@ def __init__( |
178 | 181 | _cli_implicit_flags: bool | None = None, |
179 | 182 | _cli_ignore_unknown_args: bool | None = None, |
180 | 183 | _cli_kebab_case: bool | None = None, |
| 184 | + _cli_shortcuts: Mapping[str, str | list[str]] | None = None, |
181 | 185 | _secrets_dir: PathType | None = None, |
182 | 186 | **values: Any, |
183 | 187 | ) -> None: |
@@ -208,6 +212,7 @@ def __init__( |
208 | 212 | _cli_implicit_flags=_cli_implicit_flags, |
209 | 213 | _cli_ignore_unknown_args=_cli_ignore_unknown_args, |
210 | 214 | _cli_kebab_case=_cli_kebab_case, |
| 215 | + _cli_shortcuts=_cli_shortcuts, |
211 | 216 | _secrets_dir=_secrets_dir, |
212 | 217 | ) |
213 | 218 | ) |
@@ -263,6 +268,7 @@ def _settings_build_values( |
263 | 268 | _cli_implicit_flags: bool | None = None, |
264 | 269 | _cli_ignore_unknown_args: bool | None = None, |
265 | 270 | _cli_kebab_case: bool | None = None, |
| 271 | + _cli_shortcuts: Mapping[str, str | list[str]] | None = None, |
266 | 272 | _secrets_dir: PathType | None = None, |
267 | 273 | ) -> dict[str, Any]: |
268 | 274 | # Determine settings config values |
@@ -336,6 +342,7 @@ def _settings_build_values( |
336 | 342 | else self.model_config.get('cli_ignore_unknown_args') |
337 | 343 | ) |
338 | 344 | cli_kebab_case = _cli_kebab_case if _cli_kebab_case is not None else self.model_config.get('cli_kebab_case') |
| 345 | + cli_shortcuts = _cli_shortcuts if _cli_shortcuts is not None else self.model_config.get('cli_shortcuts') |
339 | 346 |
|
340 | 347 | secrets_dir = _secrets_dir if _secrets_dir is not None else self.model_config.get('secrets_dir') |
341 | 348 |
|
@@ -401,6 +408,7 @@ def _settings_build_values( |
401 | 408 | cli_implicit_flags=cli_implicit_flags, |
402 | 409 | cli_ignore_unknown_args=cli_ignore_unknown_args, |
403 | 410 | cli_kebab_case=cli_kebab_case, |
| 411 | + cli_shortcuts=cli_shortcuts, |
404 | 412 | case_sensitive=case_sensitive, |
405 | 413 | ) |
406 | 414 | sources = (cli_settings,) + sources |
@@ -450,6 +458,7 @@ def _settings_build_values( |
450 | 458 | cli_implicit_flags=False, |
451 | 459 | cli_ignore_unknown_args=False, |
452 | 460 | cli_kebab_case=False, |
| 461 | + cli_shortcuts=None, |
453 | 462 | json_file=None, |
454 | 463 | json_file_encoding=None, |
455 | 464 | yaml_file=None, |
|
0 commit comments