cpython: b35a811d4420 (original) (raw)
Mercurial > cpython
changeset 93121:b35a811d4420
Merge: #9351: set_defaults on subparser is no longer ignored if set on parent. [#9351]
R David Murray rdmurray@bitdance.com | |
---|---|
date | Fri, 17 Oct 2014 19:58:03 -0400 |
parents | 5beb1ea76f36(current diff)e9cb45ccf42b(diff) |
children | 8ed630f28753 |
files | 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
namespace, arg_strings = parser.parse_known_args(arg_strings, namespace)[](#l1.7)
# In case this subparser defines new defaults, we parse them[](#l1.9)
# in a new namespace object and then update the original[](#l1.10)
# namespace for the relevant parts.[](#l1.11)
subnamespace, arg_strings = parser.parse_known_args(arg_strings, None)[](#l1.12)
for key, value in vars(subnamespace).items():[](#l1.13)
setattr(namespace, key, value)[](#l1.14)
+ 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 @@ -2781,6 +2781,13 @@ class TestSetDefaults(TestCase): parser = ErrorRaisingArgumentParser(parents=[parent]) self.assertEqual(NS(x='foo'), parser.parse_args([]))
- def test_set_defaults_on_parent_and_subparser(self):
parser = argparse.ArgumentParser()[](#l2.8)
xparser = parser.add_subparsers().add_parser('X')[](#l2.9)
parser.set_defaults(foo=1)[](#l2.10)
xparser.set_defaults(foo=2)[](#l2.11)
self.assertEqual(NS(foo=2), parser.parse_args(['X']))[](#l2.12)
+ 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 @@ -181,6 +181,9 @@ Core and Builtins Library ------- +- Issue #9351: Defaults set with set_defaults on an argparse subparser