- Issue #15906: Fix a regression in argparse caused by the preceding change,

when action='append', type='str' and default=[].
This commit is contained in:
Barry Warsaw 2012-09-12 00:12:29 -04:00
commit 0ae066b281
3 changed files with 14 additions and 0 deletions

View File

@ -1961,6 +1961,7 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer):
# twice (which may fail) if the argument was given, but # twice (which may fail) if the argument was given, but
# only if it was defined already in the namespace # only if it was defined already in the namespace
if (action.default is not None and if (action.default is not None and
isinstance(action, _StoreAction) and
hasattr(namespace, action.dest) and hasattr(namespace, action.dest) and
action.default is getattr(namespace, action.dest)): action.default is getattr(namespace, action.dest)):
setattr(namespace, action.dest, setattr(namespace, action.dest,

View File

@ -4607,6 +4607,16 @@ class TestTypeFunctionCallWithNonStringDefault(TestCase):
args = parser.parse_args([]) args = parser.parse_args([])
self.assertEqual(NS(foo='foo_converted'), args) self.assertEqual(NS(foo='foo_converted'), args)
def test_issue_15906(self):
# Issue #15906: When action='append', type=str, default=[] are
# providing, the dest value was the string representation "[]" when it
# should have been an empty list.
parser = argparse.ArgumentParser()
parser.add_argument('--test', dest='test', type=str,
default=[], action='append')
args = parser.parse_args([])
self.assertEqual(args.test, [])
# ====================== # ======================
# parse_known_args tests # parse_known_args tests
# ====================== # ======================

View File

@ -56,6 +56,9 @@ Library
especially problematic for the FileType type, as a default file would always especially problematic for the FileType type, as a default file would always
be opened, even if a file argument was specified on the command line. be opened, even if a file argument was specified on the command line.
- Issue #15906: Fix a regression in argparse caused by the preceding change,
when action='append', type='str' and default=[].
Extension Modules Extension Modules
----------------- -----------------