mirror of
https://github.com/python/cpython.git
synced 2026-01-06 15:32:22 +00:00
Merge: #9351: set_defaults on subparser is no longer ignored if set on parent.
This commit is contained in:
commit
afce02ed38
3 changed files with 18 additions and 1 deletions
|
|
@ -1122,7 +1122,14 @@ def __call__(self, parser, namespace, values, option_string=None):
|
|||
# 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)
|
||||
|
||||
# In case this subparser defines new defaults, we parse them
|
||||
# in a new namespace object and then update the original
|
||||
# namespace for the relevant parts.
|
||||
subnamespace, arg_strings = parser.parse_known_args(arg_strings, None)
|
||||
for key, value in vars(subnamespace).items():
|
||||
setattr(namespace, key, value)
|
||||
|
||||
if arg_strings:
|
||||
vars(namespace).setdefault(_UNRECOGNIZED_ARGS_ATTR, [])
|
||||
getattr(namespace, _UNRECOGNIZED_ARGS_ATTR).extend(arg_strings)
|
||||
|
|
|
|||
|
|
@ -2781,6 +2781,13 @@ def test_set_defaults_parents(self):
|
|||
parser = ErrorRaisingArgumentParser(parents=[parent])
|
||||
self.assertEqual(NS(x='foo'), parser.parse_args([]))
|
||||
|
||||
def test_set_defaults_on_parent_and_subparser(self):
|
||||
parser = argparse.ArgumentParser()
|
||||
xparser = parser.add_subparsers().add_parser('X')
|
||||
parser.set_defaults(foo=1)
|
||||
xparser.set_defaults(foo=2)
|
||||
self.assertEqual(NS(foo=2), parser.parse_args(['X']))
|
||||
|
||||
def test_set_defaults_same_as_add_argument(self):
|
||||
parser = ErrorRaisingArgumentParser()
|
||||
parser.set_defaults(w='W', x='X', y='Y', z='Z')
|
||||
|
|
|
|||
|
|
@ -181,6 +181,9 @@ Core and Builtins
|
|||
Library
|
||||
-------
|
||||
|
||||
- Issue #9351: Defaults set with set_defaults on an argparse subparser
|
||||
are no longer ignored when also set on the parent parser.
|
||||
|
||||
- Issue #21991: Make email.headerregistry's header 'params' attributes
|
||||
be read-only (MappingProxyType). Previously the dictionary was modifiable
|
||||
but a new one was created on each access of the attribute.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue