@@ -1030,6 +1030,7 @@ class CliSettingsSource(EnvSettingsSource, Generic[T]):
10301030 cli_prefix: Prefix for command line arguments added under the root parser. Defaults to "".
10311031 cli_implicit_flags: Whether `bool` fields should be implicitly converted into CLI boolean flags.
10321032 (e.g. --flag, --no-flag). Defaults to `False`.
1033+ cli_ignore_unknown_args: Whether to ignore unknown CLI args and parse only known ones. Defaults to `False`.
10331034 case_sensitive: Whether CLI "--arg" names should be read with case-sensitivity. Defaults to `True`.
10341035 Note: Case-insensitive matching is only supported on the internal root parser and does not apply to CLI
10351036 subcommands.
@@ -1058,9 +1059,10 @@ def __init__(
10581059 cli_exit_on_error : bool | None = None ,
10591060 cli_prefix : str | None = None ,
10601061 cli_implicit_flags : bool | None = None ,
1062+ cli_ignore_unknown_args : bool | None = None ,
10611063 case_sensitive : bool | None = True ,
10621064 root_parser : Any = None ,
1063- parse_args_method : Callable [..., Any ] | None = ArgumentParser . parse_args ,
1065+ parse_args_method : Callable [..., Any ] | None = None ,
10641066 add_argument_method : Callable [..., Any ] | None = ArgumentParser .add_argument ,
10651067 add_argument_group_method : Callable [..., Any ] | None = ArgumentParser .add_argument_group ,
10661068 add_parser_method : Callable [..., Any ] | None = _SubParsersAction .add_parser ,
@@ -1106,6 +1108,11 @@ def __init__(
11061108 if cli_implicit_flags is not None
11071109 else settings_cls .model_config .get ('cli_implicit_flags' , False )
11081110 )
1111+ self .cli_ignore_unknown_args = (
1112+ cli_ignore_unknown_args
1113+ if cli_ignore_unknown_args is not None
1114+ else settings_cls .model_config .get ('cli_ignore_unknown_args' , False )
1115+ )
11091116
11101117 case_sensitive = case_sensitive if case_sensitive is not None else True
11111118 if not case_sensitive and root_parser is not None :
@@ -1521,14 +1528,19 @@ def none_parser_method(*args: Any, **kwargs: Any) -> Any:
15211528 def _connect_root_parser (
15221529 self ,
15231530 root_parser : T ,
1524- parse_args_method : Callable [..., Any ] | None = ArgumentParser . parse_args ,
1531+ parse_args_method : Callable [..., Any ] | None ,
15251532 add_argument_method : Callable [..., Any ] | None = ArgumentParser .add_argument ,
15261533 add_argument_group_method : Callable [..., Any ] | None = ArgumentParser .add_argument_group ,
15271534 add_parser_method : Callable [..., Any ] | None = _SubParsersAction .add_parser ,
15281535 add_subparsers_method : Callable [..., Any ] | None = ArgumentParser .add_subparsers ,
15291536 formatter_class : Any = RawDescriptionHelpFormatter ,
15301537 ) -> None :
1538+ def _parse_known_args (* args : Any , ** kwargs : Any ) -> Namespace :
1539+ return ArgumentParser .parse_known_args (* args , ** kwargs )[0 ]
1540+
15311541 self ._root_parser = root_parser
1542+ if parse_args_method is None :
1543+ parse_args_method = _parse_known_args if self .cli_ignore_unknown_args else ArgumentParser .parse_args
15321544 self ._parse_args = self ._connect_parser_method (parse_args_method , 'parsed_args_method' )
15331545 self ._add_argument = self ._connect_parser_method (add_argument_method , 'add_argument_method' )
15341546 self ._add_argument_group = self ._connect_parser_method (add_argument_group_method , 'add_argument_group_method' )
0 commit comments