Skip to content

Commit

Permalink
gh-80259: Fix conflict between type and default=SUPPRESS in argparse (G…
Browse files Browse the repository at this point in the history
…H-124519)

type() no longer called for SUPPRESS.

This only affects positional arguments with nargs='?'.
  • Loading branch information
serhiy-storchaka authored Sep 29, 2024
1 parent 49e105f commit 9bcadf5
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 8 deletions.
2 changes: 1 addition & 1 deletion Lib/argparse.py
Original file line number Diff line number Diff line change
Expand Up @@ -2483,7 +2483,7 @@ def _get_values(self, action, arg_strings):
value = action.const
else:
value = action.default
if isinstance(value, str):
if isinstance(value, str) and value is not SUPPRESS:
value = self._get_value(action, value)
self._check_value(action, value)

Expand Down
20 changes: 13 additions & 7 deletions Lib/test/test_argparse.py
Original file line number Diff line number Diff line change
Expand Up @@ -1587,18 +1587,24 @@ class TestDefaultSuppress(ParserTestCase):
"""Test actions with suppressed defaults"""

argument_signatures = [
Sig('foo', nargs='?', default=argparse.SUPPRESS),
Sig('bar', nargs='*', default=argparse.SUPPRESS),
Sig('foo', nargs='?', type=int, default=argparse.SUPPRESS),
Sig('bar', nargs='*', type=int, default=argparse.SUPPRESS),
Sig('--baz', action='store_true', default=argparse.SUPPRESS),
Sig('--qux', nargs='?', type=int, default=argparse.SUPPRESS),
Sig('--quux', nargs='*', type=int, default=argparse.SUPPRESS),
]
failures = ['-x']
failures = ['-x', 'a', '1 a']
successes = [
('', NS()),
('a', NS(foo='a')),
('a b', NS(foo='a', bar=['b'])),
('1', NS(foo=1)),
('1 2', NS(foo=1, bar=[2])),
('--baz', NS(baz=True)),
('a --baz', NS(foo='a', baz=True)),
('--baz a b', NS(foo='a', bar=['b'], baz=True)),
('1 --baz', NS(foo=1, baz=True)),
('--baz 1 2', NS(foo=1, bar=[2], baz=True)),
('--qux', NS(qux=None)),
('--qux 1', NS(qux=1)),
('--quux', NS(quux=[])),
('--quux 1 2', NS(quux=[1, 2])),
]


Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Fix :mod:`argparse` support of positional arguments with ``nargs='?'``,
``default=argparse.SUPPRESS`` and specified ``type``.

0 comments on commit 9bcadf5

Please sign in to comment.