cpython: e9cb45ccf42b (original) (raw)

Mercurial > cpython

changeset 93120:e9cb45ccf42b 3.4

#9351: set_defaults on subparser is no longer ignored if set on parent. Before, if a default was set on the parent parser, any default for that variable set via set_defaults on a subparser would be ignored. Now the subparser set_defaults is honored. Patch by Jyrki Pullianinen. [#9351]

R David Murray rdmurray@bitdance.com
date Fri, 17 Oct 2014 19:55:11 -0400
parents fea3ddcaf652
children b35a811d4420 4c2b77d0680b
files Lib/argparse.py Lib/test/test_argparse.py Misc/NEWS
diffstat 3 files changed, 18 insertions(+), 1 deletions(-)[+] [-] Lib/argparse.py 9 Lib/test/test_argparse.py 7 Misc/NEWS 3

line wrap: on

line diff

--- a/Lib/argparse.py +++ b/Lib/argparse.py @@ -1122,7 +1122,14 @@ class _SubParsersAction(Action): # parse all the remaining options into the namespace # store any unrecognized options on the object, so that the top # level parser can decide what to do with them

+

+ if arg_strings: vars(namespace).setdefault(_UNRECOGNIZED_ARGS_ATTR, []) getattr(namespace, _UNRECOGNIZED_ARGS_ATTR).extend(arg_strings)

--- a/Lib/test/test_argparse.py +++ b/Lib/test/test_argparse.py @@ -2795,6 +2795,13 @@ class TestSetDefaults(TestCase): parser = ErrorRaisingArgumentParser(parents=[parent]) self.assertEqual(NS(x='foo'), parser.parse_args([]))

+ def test_set_defaults_same_as_add_argument(self): parser = ErrorRaisingArgumentParser() parser.set_defaults(w='W', x='X', y='Y', z='Z')

--- a/Misc/NEWS +++ b/Misc/NEWS @@ -33,6 +33,9 @@ Core and Builtins Library ------- +- Issue #9351: Defaults set with set_defaults on an argparse subparser