@@ -1028,6 +1028,7 @@ class CliSettingsSource(EnvSettingsSource, Generic[T]):
1028
1028
cli_prefix: Prefix for command line arguments added under the root parser. Defaults to "".
1029
1029
cli_implicit_flags: Whether `bool` fields should be implicitly converted into CLI boolean flags.
1030
1030
(e.g. --flag, --no-flag). Defaults to `False`.
1031
+ cli_ignore_unknown_args: Whether to ignore unknown CLI args and parse only known ones. Defaults to `False`.
1031
1032
case_sensitive: Whether CLI "--arg" names should be read with case-sensitivity. Defaults to `True`.
1032
1033
Note: Case-insensitive matching is only supported on the internal root parser and does not apply to CLI
1033
1034
subcommands.
@@ -1056,9 +1057,10 @@ def __init__(
1056
1057
cli_exit_on_error : bool | None = None ,
1057
1058
cli_prefix : str | None = None ,
1058
1059
cli_implicit_flags : bool | None = None ,
1060
+ cli_ignore_unknown_args : bool | None = None ,
1059
1061
case_sensitive : bool | None = True ,
1060
1062
root_parser : Any = None ,
1061
- parse_args_method : Callable [..., Any ] | None = ArgumentParser . parse_args ,
1063
+ parse_args_method : Callable [..., Any ] | None = None ,
1062
1064
add_argument_method : Callable [..., Any ] | None = ArgumentParser .add_argument ,
1063
1065
add_argument_group_method : Callable [..., Any ] | None = ArgumentParser .add_argument_group ,
1064
1066
add_parser_method : Callable [..., Any ] | None = _SubParsersAction .add_parser ,
@@ -1104,6 +1106,11 @@ def __init__(
1104
1106
if cli_implicit_flags is not None
1105
1107
else settings_cls .model_config .get ('cli_implicit_flags' , False )
1106
1108
)
1109
+ self .cli_ignore_unknown_args = (
1110
+ cli_ignore_unknown_args
1111
+ if cli_ignore_unknown_args is not None
1112
+ else settings_cls .model_config .get ('cli_ignore_unknown_args' , False )
1113
+ )
1107
1114
1108
1115
case_sensitive = case_sensitive if case_sensitive is not None else True
1109
1116
if not case_sensitive and root_parser is not None :
@@ -1519,14 +1526,19 @@ def none_parser_method(*args: Any, **kwargs: Any) -> Any:
1519
1526
def _connect_root_parser (
1520
1527
self ,
1521
1528
root_parser : T ,
1522
- parse_args_method : Callable [..., Any ] | None = ArgumentParser . parse_args ,
1529
+ parse_args_method : Callable [..., Any ] | None ,
1523
1530
add_argument_method : Callable [..., Any ] | None = ArgumentParser .add_argument ,
1524
1531
add_argument_group_method : Callable [..., Any ] | None = ArgumentParser .add_argument_group ,
1525
1532
add_parser_method : Callable [..., Any ] | None = _SubParsersAction .add_parser ,
1526
1533
add_subparsers_method : Callable [..., Any ] | None = ArgumentParser .add_subparsers ,
1527
1534
formatter_class : Any = RawDescriptionHelpFormatter ,
1528
1535
) -> None :
1536
+ def _parse_known_args (* args : Any , ** kwargs : Any ) -> Namespace :
1537
+ return ArgumentParser .parse_known_args (* args , ** kwargs )[0 ]
1538
+
1529
1539
self ._root_parser = root_parser
1540
+ if parse_args_method is None :
1541
+ parse_args_method = _parse_known_args if self .cli_ignore_unknown_args else ArgumentParser .parse_args
1530
1542
self ._parse_args = self ._connect_parser_method (parse_args_method , 'parsed_args_method' )
1531
1543
self ._add_argument = self ._connect_parser_method (add_argument_method , 'add_argument_method' )
1532
1544
self ._add_argument_group = self ._connect_parser_method (add_argument_group_method , 'add_argument_group_method' )
0 commit comments