@@ -665,6 +665,7 @@ def _add_parser_args(
665
665
group : Any ,
666
666
alias_prefixes : list [str ],
667
667
model_default : Any ,
668
+ is_model_suppressed : bool = False ,
668
669
) -> ArgumentParser :
669
670
subparsers : Any = None
670
671
alias_path_args : dict [str , str ] = {}
@@ -738,7 +739,7 @@ def _add_parser_args(
738
739
is_parser_submodel = sub_models and not is_append_action
739
740
kwargs : dict [str , Any ] = {}
740
741
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 )
742
743
kwargs ['metavar' ] = self ._metavar_format (field_info .annotation )
743
744
kwargs ['required' ] = (
744
745
self .cli_enforce_required and field_info .is_required () and model_default is PydanticUndefined
@@ -782,6 +783,7 @@ def _add_parser_args(
782
783
field_info ,
783
784
alias_names ,
784
785
model_default = model_default ,
786
+ is_model_suppressed = is_model_suppressed ,
785
787
)
786
788
elif not is_alias_path_only :
787
789
if group is not None :
@@ -869,6 +871,7 @@ def _add_parser_submodels(
869
871
field_info : FieldInfo ,
870
872
alias_names : tuple [str , ...],
871
873
model_default : Any ,
874
+ is_model_suppressed : bool ,
872
875
) -> None :
873
876
if issubclass (model , CliMutuallyExclusiveGroup ):
874
877
# Argparse has deprecated "calling add_argument_group() or add_mutually_exclusive_group() on a
@@ -906,11 +909,14 @@ def _add_parser_submodels(
906
909
model_group_kwargs ['description' ] = desc_header
907
910
908
911
preferred_alias = alias_names [0 ]
912
+ is_model_suppressed = self ._is_field_suppressed (field_info ) or is_model_suppressed
909
913
if not self .cli_avoid_json :
910
914
added_args .append (arg_names [0 ])
911
915
kwargs ['nargs' ] = '?'
912
916
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
+ )
914
920
model_group = self ._add_group (parser , ** model_group_kwargs )
915
921
self ._add_argument (model_group , * (f'{ flag_prefix } { name } ' for name in arg_names ), ** kwargs )
916
922
for model in sub_models :
@@ -923,6 +929,7 @@ def _add_parser_submodels(
923
929
group = model_group if model_group else model_group_kwargs ,
924
930
alias_prefixes = [f'{ arg_prefix } { name } .' for name in alias_names [1 :]],
925
931
model_default = model_default ,
932
+ is_model_suppressed = is_model_suppressed ,
926
933
)
927
934
928
935
def _add_parser_alias_paths (
@@ -1015,9 +1022,11 @@ def _metavar_format_recurse(self, obj: Any) -> str:
1015
1022
def _metavar_format (self , obj : Any ) -> str :
1016
1023
return self ._metavar_format_recurse (obj ).replace (', ' , ',' )
1017
1024
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 :
1019
1028
_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 ) :
1021
1030
return CLI_SUPPRESS
1022
1031
1023
1032
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
1037
1046
default = f'(default factory: { self ._metavar_format (field_info .default_factory )} )'
1038
1047
_help += f' { default } ' if _help else default
1039
1048
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