summaryrefslogtreecommitdiff
path: root/cmd2
diff options
context:
space:
mode:
authorKevin Van Brunt <kmvanbrunt@gmail.com>2020-08-12 17:59:21 -0400
committerKevin Van Brunt <kmvanbrunt@gmail.com>2020-08-12 17:59:21 -0400
commitd12a601edb21ae1e9e637d820d1e53c4d3e90c45 (patch)
treea51e9f02ac150731a1806f049d9bf66f55ca2858 /cmd2
parent133e71a5a3074fc21fa52532d00c4d2364964cd3 (diff)
downloadcmd2-git-d12a601edb21ae1e9e637d820d1e53c4d3e90c45.tar.gz
Fixed bug when trying to format help text of argument which used a tuple as its metavar
Diffstat (limited to 'cmd2')
-rw-r--r--cmd2/argparse_custom.py45
1 files changed, 27 insertions, 18 deletions
diff --git a/cmd2/argparse_custom.py b/cmd2/argparse_custom.py
index d724cb88..12c18644 100644
--- a/cmd2/argparse_custom.py
+++ b/cmd2/argparse_custom.py
@@ -733,7 +733,8 @@ class Cmd2HelpFormatter(argparse.RawTextHelpFormatter):
return ', '.join(action.option_strings) + ' ' + args_string
# End cmd2 customization
- def _metavar_formatter(self, action, default_metavar) -> Callable:
+ def _determine_metavar(self, action, default_metavar) -> Union[str, Tuple]:
+ """Custom method to determine what to use as the metavar value of an action"""
if action.metavar is not None:
result = action.metavar
elif action.choices is not None:
@@ -743,38 +744,46 @@ class Cmd2HelpFormatter(argparse.RawTextHelpFormatter):
# End cmd2 customization
else:
result = default_metavar
+ return result
+
+ def _metavar_formatter(self, action, default_metavar) -> Callable:
+ metavar = self._determine_metavar(action, default_metavar)
# noinspection PyMissingOrEmptyDocstring
def format(tuple_size):
- if isinstance(result, tuple):
- return result
+ if isinstance(metavar, tuple):
+ return metavar
else:
- return (result, ) * tuple_size
+ return (metavar, ) * tuple_size
return format
# noinspection PyProtectedMember
def _format_args(self, action, default_metavar) -> str:
- get_metavar = self._metavar_formatter(action, default_metavar)
- # Begin cmd2 customization (less verbose)
- nargs_range = getattr(action, ATTR_NARGS_RANGE, None)
+ """Customized to handle ranged nargs and make other output less verbose"""
+ metavar = self._determine_metavar(action, default_metavar)
+ metavar_formatter = self._metavar_formatter(action, default_metavar)
+ # Handle nargs specified as a range
+ nargs_range = getattr(action, ATTR_NARGS_RANGE, None)
if nargs_range is not None:
if nargs_range[1] == constants.INFINITY:
range_str = '{}+'.format(nargs_range[0])
else:
range_str = '{}..{}'.format(nargs_range[0], nargs_range[1])
- result = '{}{{{}}}'.format('%s' % get_metavar(1), range_str)
- elif action.nargs == ZERO_OR_MORE:
- result = '[%s [...]]' % get_metavar(1)
- elif action.nargs == ONE_OR_MORE:
- result = '%s [...]' % get_metavar(1)
- elif isinstance(action.nargs, int) and action.nargs > 1:
- result = '{}{{{}}}'.format('%s' % get_metavar(1), action.nargs)
- # End cmd2 customization
- else:
- result = super()._format_args(action, default_metavar)
- return result
+ return '{}{{{}}}'.format('%s' % metavar_formatter(1), range_str)
+
+ # Make this output less verbose. Do not customize the output when metavar is a
+ # tuple of strings. Allow argparse's formatter to handle that instead.
+ elif isinstance(metavar, str):
+ if action.nargs == ZERO_OR_MORE:
+ return '[%s [...]]' % metavar_formatter(1)
+ elif action.nargs == ONE_OR_MORE:
+ return '%s [...]' % metavar_formatter(1)
+ elif isinstance(action.nargs, int) and action.nargs > 1:
+ return '{}{{{}}}'.format('%s' % metavar_formatter(1), action.nargs)
+
+ return super()._format_args(action, default_metavar)
# noinspection PyCompatibility