https://github.com/python/cpython/commit/61180446eee2aef07b042c7e8892c45afabd1499
commit: 61180446eee2aef07b042c7e8892c45afabd1499
branch: main
author: Serhiy Storchaka <[email protected]>
committer: serhiy-storchaka <[email protected]>
date: 2024-09-29T10:52:07+03:00
summary:
gh-124345: Support abbreviated single-dash long options with = in argparse
(GH-124428)
files:
A Misc/NEWS.d/next/Library/2024-09-24-12-34-48.gh-issue-124345.s3vKql.rst
M Lib/argparse.py
M Lib/test/test_argparse.py
diff --git a/Lib/argparse.py b/Lib/argparse.py
index 3c2023e69e9ad6..715d2ba39075e5 100644
--- a/Lib/argparse.py
+++ b/Lib/argparse.py
@@ -2319,7 +2319,9 @@ def _get_option_tuples(self, option_string):
# but multiple character options always have to have their argument
# separate
elif option_string[0] in chars and option_string[1] not in chars:
- option_prefix = option_string
+ option_prefix, sep, explicit_arg = option_string.partition('=')
+ if not sep:
+ sep = explicit_arg = None
short_option_prefix = option_string[:2]
short_explicit_arg = option_string[2:]
@@ -2330,7 +2332,7 @@ def _get_option_tuples(self, option_string):
result.append(tup)
elif self.allow_abbrev and
option_string.startswith(option_prefix):
action = self._option_string_actions[option_string]
- tup = action, option_string, None, None
+ tup = action, option_string, sep, explicit_arg
result.append(tup)
# shouldn't ever get here
diff --git a/Lib/test/test_argparse.py b/Lib/test/test_argparse.py
index 08f31c239950e0..01dc99c9434043 100644
--- a/Lib/test/test_argparse.py
+++ b/Lib/test/test_argparse.py
@@ -380,15 +380,22 @@ class TestOptionalsSingleDashAmbiguous(ParserTestCase):
"""Test Optionals that partially match but are not subsets"""
argument_signatures = [Sig('-foobar'), Sig('-foorab')]
- failures = ['-f', '-f a', '-fa', '-foa', '-foo', '-fo', '-foo b']
+ failures = ['-f', '-f a', '-fa', '-foa', '-foo', '-fo', '-foo b',
+ '-f=a', '-foo=b']
successes = [
('', NS(foobar=None, foorab=None)),
('-foob a', NS(foobar='a', foorab=None)),
+ ('-foob=a', NS(foobar='a', foorab=None)),
('-foor a', NS(foobar=None, foorab='a')),
+ ('-foor=a', NS(foobar=None, foorab='a')),
('-fooba a', NS(foobar='a', foorab=None)),
+ ('-fooba=a', NS(foobar='a', foorab=None)),
('-foora a', NS(foobar=None, foorab='a')),
+ ('-foora=a', NS(foobar=None, foorab='a')),
('-foobar a', NS(foobar='a', foorab=None)),
+ ('-foobar=a', NS(foobar='a', foorab=None)),
('-foorab a', NS(foobar=None, foorab='a')),
+ ('-foorab=a', NS(foobar=None, foorab='a')),
]
@@ -875,7 +882,9 @@ class TestOptionalsAllowLongAbbreviation(ParserTestCase):
successes = [
('', NS(foo=None, foobaz=None, fooble=False)),
('--foo 7', NS(foo='7', foobaz=None, fooble=False)),
+ ('--foo=7', NS(foo='7', foobaz=None, fooble=False)),
('--fooba a', NS(foo=None, foobaz='a', fooble=False)),
+ ('--fooba=a', NS(foo=None, foobaz='a', fooble=False)),
('--foobl --foo g', NS(foo='g', foobaz=None, fooble=True)),
]
diff --git
a/Misc/NEWS.d/next/Library/2024-09-24-12-34-48.gh-issue-124345.s3vKql.rst
b/Misc/NEWS.d/next/Library/2024-09-24-12-34-48.gh-issue-124345.s3vKql.rst
new file mode 100644
index 00000000000000..dff902d8c6139a
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2024-09-24-12-34-48.gh-issue-124345.s3vKql.rst
@@ -0,0 +1,2 @@
+:mod:`argparse` vim supports abbreviated single-dash long options separated
+by ``=`` from its value.
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]