From: Barry Warsaw Date: Wed, 12 Sep 2012 02:38:47 +0000 (-0400) Subject: - Issue #15906: Fix a regression in argparse caused by the preceding change, X-Git-Tag: v3.3.1rc1~813^2~82 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=4b2f9e914d497d6b2b5ec09a03da8b6f171dffed;p=python - Issue #15906: Fix a regression in argparse caused by the preceding change, when action='append', type='str' and default=[]. --- diff --git a/Lib/argparse.py b/Lib/argparse.py index 52ed3ab107..fba6a262f5 100644 --- a/Lib/argparse.py +++ b/Lib/argparse.py @@ -1957,6 +1957,7 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer): # twice (which may fail) if the argument was given, but # only if it was defined already in the namespace if (action.default is not None and + isinstance(action, _StoreAction) and hasattr(namespace, action.dest) and action.default is getattr(namespace, action.dest)): setattr(namespace, action.dest, diff --git a/Lib/test/test_argparse.py b/Lib/test/test_argparse.py index a2f9a69a59..cd80dc6d16 100644 --- a/Lib/test/test_argparse.py +++ b/Lib/test/test_argparse.py @@ -4516,6 +4516,16 @@ class TestTypeFunctionCallWithNonStringDefault(TestCase): args = parser.parse_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 # ====================== diff --git a/Misc/NEWS b/Misc/NEWS index 3b09e9633a..24c6b7121d 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -139,6 +139,9 @@ Library 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. +- Issue #15906: Fix a regression in argparse caused by the preceding change, + when action='append', type='str' and default=[]. + - Issue #13370: Ensure that ctypes works on Mac OS X when Python is compiled using the clang compiler