diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2024-09-29 07:44:34 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-09-29 07:44:34 (GMT) |
commit | 49e105f9488de18d3d92948232fcbd956cbe0c6e (patch) | |
tree | 69c33024170ad29548aebad862df000d4d93c781 | |
parent | d08c7888229e78533648191dfe42e2d2d3ecea25 (diff) | |
download | cpython-49e105f9488de18d3d92948232fcbd956cbe0c6e.zip cpython-49e105f9488de18d3d92948232fcbd956cbe0c6e.tar.gz cpython-49e105f9488de18d3d92948232fcbd956cbe0c6e.tar.bz2 |
gh-104860: Fix allow_abbrev=False for single-dash long options (GH-124340)
-rw-r--r-- | Lib/argparse.py | 2 | ||||
-rw-r--r-- | Lib/test/test_argparse.py | 17 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Library/2024-09-23-17-33-47.gh-issue-104860.O86OSc.rst | 2 |
3 files changed, 20 insertions, 1 deletions
diff --git a/Lib/argparse.py b/Lib/argparse.py index 690b2a9..4506a5e 100644 --- a/Lib/argparse.py +++ b/Lib/argparse.py @@ -2328,7 +2328,7 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer): action = self._option_string_actions[option_string] tup = action, option_string, '', short_explicit_arg result.append(tup) - elif option_string.startswith(option_prefix): + elif self.allow_abbrev and option_string.startswith(option_prefix): action = self._option_string_actions[option_string] tup = action, option_string, None, None result.append(tup) diff --git a/Lib/test/test_argparse.py b/Lib/test/test_argparse.py index ef05a6f..26e32c3 100644 --- a/Lib/test/test_argparse.py +++ b/Lib/test/test_argparse.py @@ -914,6 +914,23 @@ class TestOptionalsDisallowLongAbbreviationPrefixChars(ParserTestCase): ] +class TestOptionalsDisallowSingleDashLongAbbreviation(ParserTestCase): + """Do not allow abbreviations of long options at all""" + + parser_signature = Sig(allow_abbrev=False) + argument_signatures = [ + Sig('-foo'), + Sig('-foodle', action='store_true'), + Sig('-foonly'), + ] + failures = ['-foon 3', '-food', '-food -foo 2'] + successes = [ + ('', NS(foo=None, foodle=False, foonly=None)), + ('-foo 3', NS(foo='3', foodle=False, foonly=None)), + ('-foonly 7 -foodle -foo 2', NS(foo='2', foodle=True, foonly='7')), + ] + + class TestDisallowLongAbbreviationAllowsShortGrouping(ParserTestCase): """Do not allow abbreviations of long options at all""" diff --git a/Misc/NEWS.d/next/Library/2024-09-23-17-33-47.gh-issue-104860.O86OSc.rst b/Misc/NEWS.d/next/Library/2024-09-23-17-33-47.gh-issue-104860.O86OSc.rst new file mode 100644 index 0000000..707c4d6 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2024-09-23-17-33-47.gh-issue-104860.O86OSc.rst @@ -0,0 +1,2 @@ +Fix disallowing abbreviation of single-dash long options in :mod:`argparse` +with ``allow_abbrev=False``. |