[issue41684] argparse: unexpected subparser behaviour on parse_args with namespace option

2020-09-20 Thread paul j3


Change by paul j3 :


--
stage:  -> resolved
status: open -> closed

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue41684] argparse: unexpected subparser behaviour on parse_args with namespace option

2020-09-01 Thread Lucca Ruhland


Lucca Ruhland  added the comment:

Thank you very much for your support.
I would say we can close this bug report.

--
resolution:  -> duplicate

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue41684] argparse: unexpected subparser behaviour on parse_args with namespace option

2020-09-01 Thread paul j3


paul j3  added the comment:

When there are potential conflicts between arguments set by the main parser and 
those set by a subparser, I often recommend giving the sub ones different 
"dest" parameters.  Then you can reconcile the different values after parsing.

There's nothing wrong with a bit of post-parsing value checking and adjustment. 
 The primary purpose of the parser is to identify what the user wants, and 
secondarily to give useful help and error messages.

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue41684] argparse: unexpected subparser behaviour on parse_args with namespace option

2020-09-01 Thread Lucca Ruhland


Lucca Ruhland  added the comment:

Sorry for the duplication, i haven't noticed the other bug reports.

As far as i have seen, i would need to overwrite parts of the 
_SubParsersAction, _ActionsContainer and ArgumentParser class.
Is there maybe an easier way to change the behavior?

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue41684] argparse: unexpected subparser behaviour on parse_args with namespace option

2020-09-01 Thread paul j3


paul j3  added the comment:

I've noted this behavior before.

https://bugs.python.org/issue27859
argparse - subparsers does not retain namespace

https://bugs.python.org/issue9351
argparse set_defaults on subcommands should override top level set_defaults

Due to a change 2012, the subparser gets a new blank `namespace`.  When done 
those values are copied to the main namespace.  That gives subparser defaults 
priority over both the main ones, and the user provided namespace.

I don't entirely like that change, but it was made by the original developer.

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue41684] argparse: unexpected subparser behaviour on parse_args with namespace option

2020-09-01 Thread Karthikeyan Singaravelan


Change by Karthikeyan Singaravelan :


--
nosy: +paul.j3, rhettinger

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue41684] argparse: unexpected subparser behaviour on parse_args with namespace option

2020-09-01 Thread Lucca Ruhland


New submission from Lucca Ruhland :

When parsing arguments with a namespace object, the subparser are behaving 
different than the main parser, although this is not stated in the 
documentation.

Each attribute which is not already part of the namespace, should be saved into 
the namespace object.
Therefore any already existing namespace attribute should overwrite the default 
value of any argument which is not explicitly set. 

While this is true for the parent parser, it does not work for the subparser.
Here is a small example code:

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--root', type=str, default='.')
subparsers = parser.add_subparsers()
subparser = subparsers.add_parser('subp')
subparser.add_argument('--subroot', type=str, default='./subdir')
our_args = argparse.Namespace(root="./config_root", subroot="./config_subdir")

argv = ['subp']
args = parser.parse_args(argv, namespace=our_args)
print(args)

>>> Expected: Namespace(root='./config_root', subroot='./config_subdir')
>>> Output: Namespace(root='./config_root', subroot='./subdir')

When calling the subparser, the namespace attribute is overwritten by the 
default value.

--
assignee: docs@python
components: Documentation
messages: 376183
nosy: docs@python, lucca.ruhland
priority: normal
severity: normal
status: open
title: argparse: unexpected subparser behaviour on parse_args with namespace 
option
type: behavior
versions: Python 3.8

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com