aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/Lib/argparse.py
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2024-10-02 11:28:02 +0300
committerGitHub <noreply@github.com>2024-10-02 11:28:02 +0300
commit9b31a2d83fa7cb0fe4d75ce7cf6a2c9ea2ce0728 (patch)
tree4a58e91004c914bb22a4555fee420031275fbd23 /Lib/argparse.py
parent9ce90206b7a4649600218cf0bd4826db79c9a312 (diff)
downloadcpython-9b31a2d83fa7cb0fe4d75ce7cf6a2c9ea2ce0728.tar.gz
cpython-9b31a2d83fa7cb0fe4d75ce7cf6a2c9ea2ce0728.zip
gh-58282: Fix support of tuple metavar for positional arguments in argparse (GH-124782)
Previously, formatting help output or error message for positional argument with a tuple metavar raised exception. Co-authored-by: Cyker Way <cykerway@gmail.com>
Diffstat (limited to 'Lib/argparse.py')
-rw-r--r--Lib/argparse.py13
1 files changed, 10 insertions, 3 deletions
diff --git a/Lib/argparse.py b/Lib/argparse.py
index 4b12c2f0c6f..21299b69ecd 100644
--- a/Lib/argparse.py
+++ b/Lib/argparse.py
@@ -527,8 +527,7 @@ class HelpFormatter(object):
def _format_action_invocation(self, action):
if not action.option_strings:
default = self._get_default_metavar_for_positional(action)
- metavar, = self._metavar_formatter(action, default)(1)
- return metavar
+ return ' '.join(self._metavar_formatter(action, default)(1))
else:
@@ -703,7 +702,15 @@ def _get_action_name(argument):
elif argument.option_strings:
return '/'.join(argument.option_strings)
elif argument.metavar not in (None, SUPPRESS):
- return argument.metavar
+ metavar = argument.metavar
+ if not isinstance(metavar, tuple):
+ return metavar
+ if argument.nargs == ZERO_OR_MORE and len(metavar) == 2:
+ return '%s[, %s]' % metavar
+ elif argument.nargs == ONE_OR_MORE:
+ return '%s[, %s]' % metavar
+ else:
+ return ', '.join(metavar)
elif argument.dest not in (None, SUPPRESS):
return argument.dest
elif argument.choices: