@@ -733,7 +733,8 @@ def _format_action_invocation(self, action) -> str:
733
733
return ', ' .join (action .option_strings ) + ' ' + args_string
734
734
# End cmd2 customization
735
735
736
- def _metavar_formatter (self , action , default_metavar ) -> Callable :
736
+ def _determine_metavar (self , action , default_metavar ) -> Union [str , Tuple ]:
737
+ """Custom method to determine what to use as the metavar value of an action"""
737
738
if action .metavar is not None :
738
739
result = action .metavar
739
740
elif action .choices is not None :
@@ -743,38 +744,46 @@ def _metavar_formatter(self, action, default_metavar) -> Callable:
743
744
# End cmd2 customization
744
745
else :
745
746
result = default_metavar
747
+ return result
748
+
749
+ def _metavar_formatter (self , action , default_metavar ) -> Callable :
750
+ metavar = self ._determine_metavar (action , default_metavar )
746
751
747
752
# noinspection PyMissingOrEmptyDocstring
748
753
def format (tuple_size ):
749
- if isinstance (result , tuple ):
750
- return result
754
+ if isinstance (metavar , tuple ):
755
+ return metavar
751
756
else :
752
- return (result , ) * tuple_size
757
+ return (metavar , ) * tuple_size
753
758
return format
754
759
755
760
# noinspection PyProtectedMember
756
761
def _format_args (self , action , default_metavar ) -> str :
757
- get_metavar = self . _metavar_formatter ( action , default_metavar )
758
- # Begin cmd2 customization (less verbose )
759
- nargs_range = getattr (action , ATTR_NARGS_RANGE , None )
762
+ """Customized to handle ranged nargs and make other output less verbose"""
763
+ metavar = self . _determine_metavar ( action , default_metavar )
764
+ metavar_formatter = self . _metavar_formatter (action , default_metavar )
760
765
766
+ # Handle nargs specified as a range
767
+ nargs_range = getattr (action , ATTR_NARGS_RANGE , None )
761
768
if nargs_range is not None :
762
769
if nargs_range [1 ] == constants .INFINITY :
763
770
range_str = '{}+' .format (nargs_range [0 ])
764
771
else :
765
772
range_str = '{}..{}' .format (nargs_range [0 ], nargs_range [1 ])
766
773
767
- result = '{}{{{}}}' .format ('%s' % get_metavar (1 ), range_str )
768
- elif action .nargs == ZERO_OR_MORE :
769
- result = '[%s [...]]' % get_metavar (1 )
770
- elif action .nargs == ONE_OR_MORE :
771
- result = '%s [...]' % get_metavar (1 )
772
- elif isinstance (action .nargs , int ) and action .nargs > 1 :
773
- result = '{}{{{}}}' .format ('%s' % get_metavar (1 ), action .nargs )
774
- # End cmd2 customization
775
- else :
776
- result = super ()._format_args (action , default_metavar )
777
- return result
774
+ return '{}{{{}}}' .format ('%s' % metavar_formatter (1 ), range_str )
775
+
776
+ # Make this output less verbose. Do not customize the output when metavar is a
777
+ # tuple of strings. Allow argparse's formatter to handle that instead.
778
+ elif isinstance (metavar , str ):
779
+ if action .nargs == ZERO_OR_MORE :
780
+ return '[%s [...]]' % metavar_formatter (1 )
781
+ elif action .nargs == ONE_OR_MORE :
782
+ return '%s [...]' % metavar_formatter (1 )
783
+ elif isinstance (action .nargs , int ) and action .nargs > 1 :
784
+ return '{}{{{}}}' .format ('%s' % metavar_formatter (1 ), action .nargs )
785
+
786
+ return super ()._format_args (action , default_metavar )
778
787
779
788
780
789
# noinspection PyCompatibility
0 commit comments