]> granicus.if.org Git - python/commitdiff
- Issue #15906: Fix a regression in argparse caused by the preceding change,
authorBarry Warsaw <barry@python.org>
Wed, 12 Sep 2012 01:06:29 +0000 (21:06 -0400)
committerBarry Warsaw <barry@python.org>
Wed, 12 Sep 2012 01:06:29 +0000 (21:06 -0400)
  when action='append', type='str' and default=[].

Lib/argparse.py
Lib/test/test_argparse.py
Misc/NEWS

index ab8ff2faec11262254315e924efc75f8ea549327..440d8faef63c334bc297dfbc3fef2932b01f77f0 100644 (file)
@@ -1948,6 +1948,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,
index 99c1babb4acee3b47490064b5b34458a71f6edea..c6119440f76b52e1818b53e7f9ee662d281d24bd 100644 (file)
@@ -4480,6 +4480,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
 # ======================
index 817a3526116de2b8398ea49cb30983a77bec6db5..f3d6fc359b949510ac50d6fd4000593b456cd0e5 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -119,6 +119,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