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 <rep...@bugs.python.org>
<http://bugs.python.org/issue26952>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to