# Formatting Help
# ===============
+
class HelpFormatter(object):
"""Formatter for generating usage messages and argument help strings.
"""
def _get_help_string(self, action):
+ """
+ Add the default value to the option help message.
+
+ ArgumentDefaultsHelpFormatter and BooleanOptionalAction when it isn't
+ already present. This code will do that, detecting cornercases to
+ prevent duplicates or cases where it wouldn't make sense to the end
+ user.
+ """
help = action.help
- if '%(default)' not in action.help:
+ if help is None:
+ help = ''
+
+ if '%(default)' not in help:
if action.default is not SUPPRESS:
defaulting_nargs = [OPTIONAL, ZERO_OR_MORE]
if action.option_strings or action.nargs in defaulting_nargs:
return help
+
class MetavarTypeHelpFormatter(HelpFormatter):
"""Help message formatter which uses the argument 'type' as the default
metavar value (instead of the argument 'dest')
return action.type.__name__
-
# =====================
# Options and Arguments
# =====================
option_string = '--no-' + option_string[2:]
_option_strings.append(option_string)
- if help is not None and default is not None and default is not SUPPRESS:
- help += " (default: %(default)s)"
-
super().__init__(
option_strings=_option_strings,
dest=dest,
help=help,
metavar=metavar)
+
def __call__(self, parser, namespace, values, option_string=None):
if option_string in self.option_strings:
setattr(namespace, self.dest, not option_string.startswith('--no-'))
def _test(self, tester, parser_text):
expected_text = getattr(tester, self.func_suffix)
expected_text = textwrap.dedent(expected_text)
+ tester.maxDiff = None
tester.assertEqual(expected_text, parser_text)
def test_format(self, tester):
-w W [W ...] w
-x [X ...] x
--foo, --no-foo Whether to foo
- --bar, --no-bar Whether to bar (default: True)
+ --bar, --no-bar Whether to bar
-f, --foobar, --no-foobar, --barfoo, --no-barfoo
--bazz, --no-bazz Bazz!
Sig('--bar', action='store_true', help='bar help'),
Sig('--taz', action=argparse.BooleanOptionalAction,
help='Whether to taz it', default=True),
+ Sig('--corge', action=argparse.BooleanOptionalAction,
+ help='Whether to corge it', default=argparse.SUPPRESS),
Sig('--quux', help="Set the quux", default=42),
Sig('spam', help='spam help'),
Sig('badger', nargs='?', default='wooden', help='badger help'),
[Sig('--baz', type=int, default=42, help='baz help')]),
]
usage = '''\
- usage: PROG [-h] [--foo FOO] [--bar] [--taz | --no-taz] [--quux QUUX]
- [--baz BAZ]
+ usage: PROG [-h] [--foo FOO] [--bar] [--taz | --no-taz] [--corge | --no-corge]
+ [--quux QUUX] [--baz BAZ]
spam [badger]
'''
help = usage + '''\
description
positional arguments:
- spam spam help
- badger badger help (default: wooden)
+ spam spam help
+ badger badger help (default: wooden)
options:
- -h, --help show this help message and exit
- --foo FOO foo help - oh and by the way, None
- --bar bar help (default: False)
- --taz, --no-taz Whether to taz it (default: True)
- --quux QUUX Set the quux (default: 42)
+ -h, --help show this help message and exit
+ --foo FOO foo help - oh and by the way, None
+ --bar bar help (default: False)
+ --taz, --no-taz Whether to taz it (default: True)
+ --corge, --no-corge Whether to corge it
+ --quux QUUX Set the quux (default: 42)
title:
description
- --baz BAZ baz help (default: 42)
+ --baz BAZ baz help (default: 42)
'''
version = ''