mirror of
https://github.com/python/cpython.git
synced 2025-12-31 04:23:37 +00:00
gh-112527: Fix help text for required options in argparse (GH-112528)
For optional arguments with required=True, the ArgumentDefaultsHelpFormatter would always add a " (default: None)" to the end of the help text. Since that's a bit misleading, it is removed with this commit.
This commit is contained in:
parent
b20722c300
commit
1adb17b1a2
3 changed files with 21 additions and 14 deletions
|
|
@ -738,18 +738,21 @@ def _get_help_string(self, action):
|
|||
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:
|
||||
t = self._theme
|
||||
default_str = _(" (default: %(default)s)")
|
||||
prefix, suffix = default_str.split("%(default)s")
|
||||
help += (
|
||||
f" {t.default}{prefix.lstrip()}"
|
||||
f"{t.default_value}%(default)s"
|
||||
f"{t.default}{suffix}{t.reset}"
|
||||
)
|
||||
if (
|
||||
'%(default)' not in help
|
||||
and action.default is not SUPPRESS
|
||||
and not action.required
|
||||
):
|
||||
defaulting_nargs = (OPTIONAL, ZERO_OR_MORE)
|
||||
if action.option_strings or action.nargs in defaulting_nargs:
|
||||
t = self._theme
|
||||
default_str = _(" (default: %(default)s)")
|
||||
prefix, suffix = default_str.split("%(default)s")
|
||||
help += (
|
||||
f" {t.default}{prefix.lstrip()}"
|
||||
f"{t.default_value}%(default)s"
|
||||
f"{t.default}{suffix}{t.reset}"
|
||||
)
|
||||
return help
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -5419,6 +5419,7 @@ class TestHelpArgumentDefaults(HelpTestCase):
|
|||
argument_signatures = [
|
||||
Sig('--foo', help='foo help - oh and by the way, %(default)s'),
|
||||
Sig('--bar', action='store_true', help='bar help'),
|
||||
Sig('--required', required=True, help='some help'),
|
||||
Sig('--taz', action=argparse.BooleanOptionalAction,
|
||||
help='Whether to taz it', default=True),
|
||||
Sig('--corge', action=argparse.BooleanOptionalAction,
|
||||
|
|
@ -5432,8 +5433,8 @@ class TestHelpArgumentDefaults(HelpTestCase):
|
|||
[Sig('--baz', type=int, default=42, help='baz help')]),
|
||||
]
|
||||
usage = '''\
|
||||
usage: PROG [-h] [--foo FOO] [--bar] [--taz | --no-taz] [--corge | --no-corge]
|
||||
[--quux QUUX] [--baz BAZ]
|
||||
usage: PROG [-h] [--foo FOO] [--bar] --required REQUIRED [--taz | --no-taz]
|
||||
[--corge | --no-corge] [--quux QUUX] [--baz BAZ]
|
||||
spam [badger]
|
||||
'''
|
||||
help = usage + '''\
|
||||
|
|
@ -5448,6 +5449,7 @@ class TestHelpArgumentDefaults(HelpTestCase):
|
|||
-h, --help show this help message and exit
|
||||
--foo FOO foo help - oh and by the way, None
|
||||
--bar bar help (default: False)
|
||||
--required REQUIRED some help
|
||||
--taz, --no-taz Whether to taz it (default: True)
|
||||
--corge, --no-corge Whether to corge it
|
||||
--quux QUUX Set the quux (default: 42)
|
||||
|
|
|
|||
|
|
@ -0,0 +1,2 @@
|
|||
The help text for required options in :mod:`argparse` no
|
||||
longer extended with " (default: None)".
|
||||
Loading…
Add table
Add a link
Reference in a new issue