[issue26952] argparse help formatter crashes

2019-07-07 Thread paul j3


paul j3  added the comment:

Xiang Zhang pointed out that the immediate error in this case was caused by the 
empty mutually exclusive group:

https://bugs.python.org/issue26952#msg264835

The nesting fails because adding actions to the argument_group does not enroll 
them in the mutually exclusive group.  So the group._group_actions list remains 
empty, just as it is in your case.

As I pointed out earlier, the usage formatter is brittle.  The addition of 
mutually exclusive group markings is particularly clunky.

--

___
Python tracker 

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



[issue26952] argparse help formatter crashes

2019-07-07 Thread Alexander Kapshuna


Alexander Kapshuna  added the comment:

I have a feeling that nesting groups has nothing to do with it. Got same 
traceback when I forgot to fill my mutually exclusive groups with arguments. 

import argparse

parser = argparse.ArgumentParser()
group = parser.add_mutually_exclusive_group()
parser.parse_args(['-h'])

# Result:

Traceback (most recent call last):
  File "/home/kapsh/.PyCharmCE2019.1/config/scratches/scratch_12.py", line 5, 
in 
parser.parse_args(['-h'])
  File "/usr/lib/python3.7/argparse.py", line 1749, in parse_args
args, argv = self.parse_known_args(args, namespace)
  File "/usr/lib/python3.7/argparse.py", line 1781, in parse_known_args
namespace, args = self._parse_known_args(args, namespace)
  File "/usr/lib/python3.7/argparse.py", line 1987, in _parse_known_args
start_index = consume_optional(start_index)
  File "/usr/lib/python3.7/argparse.py", line 1927, in consume_optional
take_action(action, args, option_string)
  File "/usr/lib/python3.7/argparse.py", line 1855, in take_action
action(self, namespace, argument_values, option_string)
  File "/usr/lib/python3.7/argparse.py", line 1037, in __call__
parser.print_help()
  File "/usr/lib/python3.7/argparse.py", line 2474, in print_help
self._print_message(self.format_help(), file)
  File "/usr/lib/python3.7/argparse.py", line 2458, in format_help
return formatter.format_help()
  File "/usr/lib/python3.7/argparse.py", line 284, in format_help
help = self._root_section.format_help()
  File "/usr/lib/python3.7/argparse.py", line 215, in format_help
item_help = join([func(*args) for func, args in self.items])
  File "/usr/lib/python3.7/argparse.py", line 215, in 
item_help = join([func(*args) for func, args in self.items])
  File "/usr/lib/python3.7/argparse.py", line 322, in _format_usage
action_usage = format(optionals + positionals, groups)
  File "/usr/lib/python3.7/argparse.py", line 397, in _format_actions_usage
start = actions.index(group._group_actions[0])
IndexError: list index out of range

--
nosy: +kapsh

___
Python tracker 

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



[issue26952] argparse help formatter crashes

2018-09-22 Thread paul j3


paul j3  added the comment:

https://bugs.python.org/issue29553 deals with a similar problem, the usage 
display when one mutually exclusive group is embedded in another mutually 
exclusive group.  In that case, usage is displayed, but with some missing 
brackets.  

As here there are two issues - the usage formatter is brittle, and groups are 
not designed for nesting.

--

___
Python tracker 

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



[issue26952] argparse help formatter crashes

2018-09-22 Thread paul j3


paul j3  added the comment:

If I add an argument to the mutexGroup as suggested by xiang

In [7]: mutexGroup.add_argument('--foo', action='store_true')
Out[7]: _StoreTrueAction(option_strings=['--foo'], dest='foo', nargs=0, 
const=True, default=False, type=None, choices=None, help=None, metavar=None)
In [8]: parser.print_usage()
usage: ipython3 [-h] -u URL -p PROJECT [--dump] --mergeInput MERGEINPUT
[--removeDisabled] -c CHECKERS --foo
In [9]: parser.print_help()
usage: ipython3 [-h] -u URL -p PROJECT [--dump] --mergeInput MERGEINPUT
[--removeDisabled] -c CHECKERS --foo

Sets the checkers of a klocwork project

optional arguments:
  -h, --helpshow this help message and exit
  -c CHECKERS, --checkers CHECKERS
File which lists the checkers to be enabled.

the argument_group arguments show up in the usage, but without 
mutually_exclusive markings.  But they don't show up in the help lines.  I 
suspect all those group arguments will be tested as one mutually exclusive 
group, not two subgroups.

If I put the argument groups in the main parser, and omit the 
mutually_exclusive group I get this help:

In [11]: parser.print_help()
usage: ipython3 [-h] -u URL -p PROJECT [--dump] --mergeInput MERGEINPUT
[--removeDisabled] -c CHECKERS

Sets the checkers of a klocwork project

optional arguments:
  -h, --helpshow this help message and exit
  -c CHECKERS, --checkers CHECKERS
File which lists the checkers to be enabled.

serverGroup:
  -u URL, --url URL klocwork server URL.
  -p PROJECT, --project PROJECT
klocwork project name.
  --dumpDump the current checkers config.

mergeGroup:
  --mergeInput MERGEINPUT
Input file to merge for the '--checkers' file. Format:
checkerName Enabled|Disabled
  --removeDisabled  Disabled checkers will be removed from the '--
checkers' file.

The argument groups appear as intended in the help lines.

add_argument_group is inherited from _ActionsContainer.  The parser 
ArgumentParser also inherits this method.  A possible fix is to override this 
method in the _MutuallyExclusiveGroup class to raise some sort of 
not-implemented error.

The documentation, as written, does not suggest or hint that an argument_group 
can be added to anything but a parser.  But a  stronger disclaimer could be 
added.

--

___
Python tracker 

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



[issue26952] argparse help formatter crashes

2018-07-11 Thread Serhiy Storchaka


Change by Serhiy Storchaka :


--
type: crash -> behavior

___
Python tracker 

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



[issue26952] argparse help formatter crashes

2016-05-08 Thread paul j3

paul j3 added the comment:

Argument Groups are not designed for nesting, and despite their names and 
subclassing, Mutually exclusive groups and Argument Groups are not meant to be 
used together (with one exception).

I agree that the error is obscure, but it occurs in a particularly fragile 
function in the formatter, '_format_actions_usage'.  That function needs a 
major rewrite (that's in another bug/issue).

Argument Groups serve only as a way of grouping help lines.  Mutually exclusive 
groups test arguments during parsing, and add some markings to the usage line.  
So they have very different purposes.

I have seen questions on Stackoverflow where people try to use Argument Groups 
as a way of adding some sort of subgroup to the Mutually Exclusive one, one for 
example that implements a 'allow any of this group' logic.  There is a 
bug/issue asking for 'inclusive' nesting groups, but production patch of that 
sort is long ways off.  http://bugs.python.org/issue11588

This usage line

(--url URL --project Prj [--dump]) | (--mergeInput input.txt 
[--removeDisabled])

suggests that this what you are trying do - allow any of -u,-p,-d, but disallow 
one of these with -m or -r.  That logic is beyond the current group testing 
mechanism, and beyond the usage formatting code.  You'll have to do your own 
tests, and write a custom usage line.

Mutually exclusive groups can be nested in other mutual groups, but the effect 
isn't what you might hope.  It just forms a larger mutually exclusive group; 
there's no subgrouping.

It is possible to nest a mutually exclusive group in an Argument group; the 
effect is to give the mutually exclusive group a title.

--
nosy: +paul.j3

___
Python tracker 

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



[issue26952] argparse help formatter crashes

2016-05-04 Thread Xiang Zhang

Xiang Zhang added the comment:

I agree with Berker. Even without any exceptions, the help message given is not 
what add_argument_group and add_mutually_exclusive_group intend.

You can see

usage: argparse_test.py [-h] [--foo] -u URL -p PROJECT [--dump] --mergeInput
MERGEINPUT [--removeDisabled] -c CHECKERS

Sets the checkers of a klocwork project

optional arguments:
  -h, --helpshow this help message and exit
  --foo
  -c CHECKERS, --checkers CHECKERS
File which lists the checkers to be enabled.

There is not group name and still optional arguments. And the command line does 
not show exclusive. I believe they are not designed to work like this.

--

___
Python tracker 

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



[issue26952] argparse help formatter crashes

2016-05-04 Thread Xiang Zhang

Changes by Xiang Zhang :


--
nosy: +bethard

___
Python tracker 

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



[issue26952] argparse help formatter crashes

2016-05-04 Thread Endre

Endre added the comment:

Hi,

Thanks for taking a look at it.
I have only tried it with argparse-1.4.0.

"I don't think add_mutually_exclusive_group and add_argument_group are designed 
to work together."

Yes, it really works strange in this case. I guess the framework should raise 
an exception which states that this use case is not supported, e.g. at the 
"serverGroup = mutexGroup.add_argument_group('serverGroup')
" line.

--

___
Python tracker 

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



[issue26952] argparse help formatter crashes

2016-05-04 Thread Xiang Zhang

Xiang Zhang added the comment:

This error occurs due to there is no action belong to the mutexGroup, the code 
requires at least one. You can simply add

mutexGroup.add_argument('--foo', action='store_true')

and you'll see the error disappears. I have no idea that this behaviour is 
intended or not.

--

___
Python tracker 

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



[issue26952] argparse help formatter crashes

2016-05-04 Thread Berker Peksag

Berker Peksag added the comment:

I don't think add_mutually_exclusive_group and add_argument_group are designed 
to work together. Did this worked with argparse 1.3.0 or stdlib version of 
argparse before? I'm getting the same traceback in 2.7 and 3.4+.

--
nosy: +berker.peksag

___
Python tracker 

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



[issue26952] argparse help formatter crashes

2016-05-04 Thread Xiang Zhang

Changes by Xiang Zhang :


--
nosy: +xiang.zhang

___
Python tracker 

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



[issue26952] argparse help formatter crashes

2016-05-04 Thread Endre

New submission from Endre:

I am using argparse-1.4.0.

For this code exception is thrown when the script is started with the -h option:
http://pastebin.com/dFF1paFA

This exception is thrown:
Traceback (most recent call last):
  File "C:\Users\ebak\Picea\tools\buildsystem\python\kw_set_checkers.py", line 
129, in 
args = parser.parse_args()
  File "C:\Python27\lib\argparse.py", line 1688, in parse_args
args, argv = self.parse_known_args(args, namespace)
  File "C:\Python27\lib\argparse.py", line 1720, in parse_known_args
namespace, args = self._parse_known_args(args, namespace)
  File "C:\Python27\lib\argparse.py", line 1926, in _parse_known_args
start_index = consume_optional(start_index)
  File "C:\Python27\lib\argparse.py", line 1866, in consume_optional
take_action(action, args, option_string)
  File "C:\Python27\lib\argparse.py", line 1794, in take_action
action(self, namespace, argument_values, option_string)
  File "C:\Python27\lib\argparse.py", line 994, in __call__
parser.print_help()
  File "C:\Python27\lib\argparse.py", line 2327, in print_help
self._print_message(self.format_help(), file)
  File "C:\Python27\lib\argparse.py", line 2301, in format_help
return formatter.format_help()
  File "C:\Python27\lib\argparse.py", line 279, in format_help
help = self._root_section.format_help()
  File "C:\Python27\lib\argparse.py", line 209, in format_help
func(*args)
  File "C:\Python27\lib\argparse.py", line 317, in _format_usage
action_usage = format(optionals + positionals, groups)
  File "C:\Python27\lib\argparse.py", line 388, in _format_actions_usage
start = actions.index(group._group_actions[0])
IndexError: list index out of range

--
components: Library (Lib)
messages: 264823
nosy: Endre
priority: normal
severity: normal
status: open
title: argparse help formatter crashes
type: crash
versions: Python 2.7

___
Python tracker 

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