classification
Title: add "Name Collision" section to argparse docs
Type: enhancement Stage:
Components: Documentation Versions: Python 3.4, Python 3.5, Python 2.7
process
Status: open Resolution:
Dependencies: Superseder:
Assigned To: docs@python Nosy List: bethard, docs@python, paul.j3
Priority: normal Keywords:

Created on 2012-07-23 00:00 by bethard, last changed 2014-08-07 23:27 by paul.j3.

Messages (2)
msg166185 - (view) Author: Steven Bethard (bethard) * (Python committer) Date: 2012-07-23 00:00
Several bugs (e.g. Issue 15327 and Issue 15271) have been filed suggesting that people aren't really clear on how argparse handles argument name collisions or how they can get it to do what they want.

I think these problems could probably be solved by a "Name Collision" section (or something like that) in the argparse documentation. It would give a few example problems and show how to resolve them. Some things to include:

* What happens when two arguments have the same dest (Issue 15271), with solutions including action='append' or different dest= values combined with identical metavar= values.

* What happens when a parser and a sub-parser share some of the same argument names (Issue 15327), with solutions including specifying different dest= values for the parser and sub-parser

* A brief mention and cross-reference to the "conflict_handler" section.
msg225046 - (view) Author: paul j3 (paul.j3) * (Python triager) Date: 2014-08-07 23:27
On Stackoverflow a couple of posters have asked about nesting namespaces as a way of separating the parser and subparser arguments.

http://stackoverflow.com/questions/15782948
http://stackoverflow.com/questions/18668227

One solution that I rather like http://stackoverflow.com/a/18709860/901925

uses a custom Namespace class that recognizes a 'dest' like

    p.add_argument('--deep', dest='test.doo.deep')

and produces

    Nestedspace(foo='test', test=Nestedspace(bar='baz', doo=Nestedspace(deep='doodod')))

I wonder if a simplified version of this could be added to the Namespace section in the documentation.

There are 2 sides to the name conflict issue:

- what control does the programmer have over names (esp. when using [parents] and subparsers)?

- how does the programmer want to access the arguments in the resulting namespace?
History
Date User Action Args
2014-08-07 23:27:58paul.j3setmessages: + msg225046
2014-08-03 13:23:49BreamoreBoysettype: enhancement
versions: + Python 3.5, - Python 3.2, Python 3.3
2013-08-14 20:58:38paul.j3setnosy: + paul.j3
2012-07-23 00:00:31bethardcreate