New submission from paul j3:

As discussed in issue 16468, a metavar may be used to provide an alternative 
representation of a choices option.  However if a metvar like 'range(20)' is 
used, usage formatter strips off the '()'.

    >>> parser.add_argument('foo', type=int, 
        choices=range(20), metavar='range(0,20)')
    >>> parser.format_usage()
    # expect: 'usage: PROG [-h] range(0,20)\n'
    # actual: 'usage: PROG [-h] range0,20\n'

This is done by a line in the help formater that removes excess mutually 
exclusive group notation:

    HelpFormatter._format_actions_usage
       ...
       text = _re.sub(r'\(([^|]*)\)', r'\1', text)

A solution is to change this line to distinguish between a case like ' (...)' 
and 'range(...)'

    text = _re.sub(r'( )\(([^|]*)\)', r'\1\2', text)

----------
files: metaparen.patch
keywords: patch
messages: 192222
nosy: paul.j3
priority: normal
severity: normal
status: open
title: argparse usage should preserve () in metavars such as range(20)
Added file: http://bugs.python.org/file30754/metaparen.patch

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue18349>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to