@@ -733,7 +733,8 @@ def _format_action_invocation(self, action) -> str:
733733 return ', ' .join (action .option_strings ) + ' ' + args_string
734734 # End cmd2 customization
735735
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"""
737738 if action .metavar is not None :
738739 result = action .metavar
739740 elif action .choices is not None :
@@ -743,38 +744,46 @@ def _metavar_formatter(self, action, default_metavar) -> Callable:
743744 # End cmd2 customization
744745 else :
745746 result = default_metavar
747+ return result
748+
749+ def _metavar_formatter (self , action , default_metavar ) -> Callable :
750+ metavar = self ._determine_metavar (action , default_metavar )
746751
747752 # noinspection PyMissingOrEmptyDocstring
748753 def format (tuple_size ):
749- if isinstance (result , tuple ):
750- return result
754+ if isinstance (metavar , tuple ):
755+ return metavar
751756 else :
752- return (result , ) * tuple_size
757+ return (metavar , ) * tuple_size
753758 return format
754759
755760 # noinspection PyProtectedMember
756761 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 )
760765
766+ # Handle nargs specified as a range
767+ nargs_range = getattr (action , ATTR_NARGS_RANGE , None )
761768 if nargs_range is not None :
762769 if nargs_range [1 ] == constants .INFINITY :
763770 range_str = '{}+' .format (nargs_range [0 ])
764771 else :
765772 range_str = '{}..{}' .format (nargs_range [0 ], nargs_range [1 ])
766773
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 )
778787
779788
780789# noinspection PyCompatibility
0 commit comments