New submission from Dougal Sutherland: If you wrap a mutually exclusive group inside an argument group in an argparse.ArgumentParser, and then use parents= to inherit from that parser, the non-exclusive argument group is forgotten in the help output, and the arguments move to the default "optional arguments" section. For example:
# construct the parser with a mutually exclusive group >>> import argparse >>> parent = argparse.ArgumentParser(add_help=False) >>> group = parent.add_argument_group('the group') >>> group.add_argument('--foo') and None >>> mutex = group.add_mutually_exclusive_group() >>> mutex.add_argument('-a', action='store_true') and None >>> mutex.add_argument('-b', action='store_true') and None >>> parent.print_help() usage: [--foo FOO] [-a | -b] the group: --foo FOO -a -b # now try to inherit from it; "the group" is forgotten for # mutex arguments, but remains for others >>> argparse.ArgumentParser(add_help=False, parents=[parent]).print_help() usage: [--foo FOO] [-a | -b] optional arguments: -a -b the group: --foo FOO I see the same behavior on 2.7.3 and 3.3.0. The problem is that [`argparse._ActionsContainer._add_container_actions`](http://hg.python.org/releasing/2.7.3/file/7bb96963d067/Lib/argparse.py#l1331) always adds mutex groups to the top level, rather than to the equivalent of their `_container` attribute. The attached patch fixes this, and adds a test based on the formatted output (almost identical to the `test_groups_parents` test). One thing about the patch: it assumes that the `_container` attribute of all the mutex groups will be either the `container` argument to `_add_container_actions` or an argument group that has been processed in `group_map`. If this is not the case, it'll fail with either an `AttributeError` or a `KeyError`. I don't know when this would happen, or if it's common enough that it's worth checking for more explicitly. ---------- components: Library (Lib) files: argparse_mutex_parent.patch keywords: patch messages: 178459 nosy: Dougal.Sutherland, bethard priority: normal severity: normal status: open title: argparse group nesting lost on inheritance type: behavior versions: Python 2.7, Python 3.2, Python 3.3, Python 3.4 Added file: http://bugs.python.org/file28473/argparse_mutex_parent.patch _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue16807> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com