@@ -665,6 +665,7 @@ def _add_parser_args(
665665 group : Any ,
666666 alias_prefixes : list [str ],
667667 model_default : Any ,
668+ is_model_suppressed : bool = False ,
668669 ) -> ArgumentParser :
669670 subparsers : Any = None
670671 alias_path_args : dict [str , str ] = {}
@@ -738,7 +739,7 @@ def _add_parser_args(
738739 is_parser_submodel = sub_models and not is_append_action
739740 kwargs : dict [str , Any ] = {}
740741 kwargs ['default' ] = CLI_SUPPRESS
741- kwargs ['help' ] = self ._help_format (field_name , field_info , model_default )
742+ kwargs ['help' ] = self ._help_format (field_name , field_info , model_default , is_model_suppressed )
742743 kwargs ['metavar' ] = self ._metavar_format (field_info .annotation )
743744 kwargs ['required' ] = (
744745 self .cli_enforce_required and field_info .is_required () and model_default is PydanticUndefined
@@ -782,6 +783,7 @@ def _add_parser_args(
782783 field_info ,
783784 alias_names ,
784785 model_default = model_default ,
786+ is_model_suppressed = is_model_suppressed ,
785787 )
786788 elif not is_alias_path_only :
787789 if group is not None :
@@ -869,6 +871,7 @@ def _add_parser_submodels(
869871 field_info : FieldInfo ,
870872 alias_names : tuple [str , ...],
871873 model_default : Any ,
874+ is_model_suppressed : bool ,
872875 ) -> None :
873876 if issubclass (model , CliMutuallyExclusiveGroup ):
874877 # Argparse has deprecated "calling add_argument_group() or add_mutually_exclusive_group() on a
@@ -906,11 +909,14 @@ def _add_parser_submodels(
906909 model_group_kwargs ['description' ] = desc_header
907910
908911 preferred_alias = alias_names [0 ]
912+ is_model_suppressed = self ._is_field_suppressed (field_info ) or is_model_suppressed
909913 if not self .cli_avoid_json :
910914 added_args .append (arg_names [0 ])
911915 kwargs ['nargs' ] = '?'
912916 kwargs ['const' ] = '{}'
913- kwargs ['help' ] = f'set { arg_names [0 ]} from JSON string (default: {{}})'
917+ kwargs ['help' ] = kwargs ['help' ] = (
918+ CLI_SUPPRESS if is_model_suppressed else f'set { arg_names [0 ]} from JSON string (default: {{}})'
919+ )
914920 model_group = self ._add_group (parser , ** model_group_kwargs )
915921 self ._add_argument (model_group , * (f'{ flag_prefix } { name } ' for name in arg_names ), ** kwargs )
916922 for model in sub_models :
@@ -923,6 +929,7 @@ def _add_parser_submodels(
923929 group = model_group if model_group else model_group_kwargs ,
924930 alias_prefixes = [f'{ arg_prefix } { name } .' for name in alias_names [1 :]],
925931 model_default = model_default ,
932+ is_model_suppressed = is_model_suppressed ,
926933 )
927934
928935 def _add_parser_alias_paths (
@@ -1015,9 +1022,11 @@ def _metavar_format_recurse(self, obj: Any) -> str:
10151022 def _metavar_format (self , obj : Any ) -> str :
10161023 return self ._metavar_format_recurse (obj ).replace (', ' , ',' )
10171024
1018- def _help_format (self , field_name : str , field_info : FieldInfo , model_default : Any ) -> str :
1025+ def _help_format (
1026+ self , field_name : str , field_info : FieldInfo , model_default : Any , is_model_suppressed : bool
1027+ ) -> str :
10191028 _help = field_info .description if field_info .description else ''
1020- if _help == CLI_SUPPRESS or CLI_SUPPRESS in field_info . metadata :
1029+ if is_model_suppressed or self . _is_field_suppressed ( field_info ) :
10211030 return CLI_SUPPRESS
10221031
10231032 if field_info .is_required () and model_default in (PydanticUndefined , None ):
@@ -1037,3 +1046,7 @@ def _help_format(self, field_name: str, field_info: FieldInfo, model_default: An
10371046 default = f'(default factory: { self ._metavar_format (field_info .default_factory )} )'
10381047 _help += f' { default } ' if _help else default
10391048 return _help .replace ('%' , '%%' ) if issubclass (type (self ._root_parser ), ArgumentParser ) else _help
1049+
1050+ def _is_field_suppressed (self , field_info : FieldInfo ) -> bool :
1051+ _help = field_info .description if field_info .description else ''
1052+ return _help == CLI_SUPPRESS or CLI_SUPPRESS in field_info .metadata
0 commit comments