GH-123945: Update regex for parsing negative numbers that contain underscores (#123970)

---------

Co-authored-by: Brandt Bucher <brandtbucher@gmail.com>
Co-authored-by: Shantanu <12621235+hauntsaninja@users.noreply.github.com>
This commit is contained in:
Savannah Ostrowski 2024-09-16 23:30:17 -07:00 committed by GitHub
parent 0a32c6959c
commit 14e5bdceff
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 22 additions and 1 deletions

View File

@ -1360,7 +1360,7 @@ class _ActionsContainer(object):
self._defaults = {}
# determines whether an "option" looks like a negative number
self._negative_number_matcher = _re.compile(r'^-\d+$|^-\d*\.\d+$')
self._negative_number_matcher = _re.compile(r'^-\d[\d_]*(\.\d[\d_]*)?$')
# whether or not there are any optionals that look like negative
# numbers -- uses a list so it can be shared and edited

View File

@ -2093,6 +2093,26 @@ class TestActionExtend(ParserTestCase):
]
class TestNegativeNumber(ParserTestCase):
"""Test parsing negative numbers"""
argument_signatures = [
Sig('--int', type=int),
Sig('--float', type=float),
]
failures = [
'--float -_.45',
'--float -1__000.0',
'--int -1__000',
]
successes = [
('--int -1000 --float -1000.0', NS(int=-1000, float=-1000.0)),
('--int -1_000 --float -1_000.0', NS(int=-1000, float=-1000.0)),
('--int -1_000_000 --float -1_000_000.0', NS(int=-1000000, float=-1000000.0)),
('--float -1_000.0', NS(int=None, float=-1000.0)),
('--float -1_000_000.0_0', NS(int=None, float=-1000000.0)),
]
class TestInvalidAction(TestCase):
"""Test invalid user defined Action"""

View File

@ -0,0 +1 @@
Fix a bug where :mod:`argparse` doesn't recognize negative numbers with underscores