http://bugs.python.org/issue10680 Library fix 2010-12-11 by Martin von Löwis Test case 2011-01-27 by Martin von Gagern Index: python/branches/release27-maint/Lib/argparse.py =================================================================== --- python/branches/release27-maint/Lib/argparse.py (revision 88213) +++ python/branches/release27-maint/Lib/argparse.py (working copy) @@ -1482,6 +1482,7 @@ self._defaults = container._defaults self._has_negative_number_optionals = \ container._has_negative_number_optionals + self._mutually_exclusive_groups = container._mutually_exclusive_groups def _add_action(self, action): action = super(_ArgumentGroup, self)._add_action(action) Index: python/branches/release27-maint/Lib/test/test_argparse.py =================================================================== --- python/branches/release27-maint/Lib/test/test_argparse.py (revision 88213) +++ python/branches/release27-maint/Lib/test/test_argparse.py (working copy) @@ -2505,6 +2505,46 @@ ''' +class TestMutuallyExclusiveInGroup(MEMixin, TestCase): + + def get_parser(self, required=None): + parser = ErrorRaisingArgumentParser(prog='PROG') + titled_group = parser.add_argument_group( + title='Titled group', description='Group description') + mutex_group = \ + titled_group.add_mutually_exclusive_group(required=required) + mutex_group.add_argument('--bar', help='bar help') + mutex_group.add_argument('--baz', help='baz help') + return parser + + failures = ['--bar X --baz Y', '--baz X --bar Y'] + successes = [ + ('--bar X', NS(bar='X', baz=None)), + ('--baz Y', NS(bar=None, baz='Y')), + ] + successes_when_not_required = [ + ('', NS(bar=None, baz=None)), + ] + + usage_when_not_required = '''\ + usage: PROG [-h] [--bar BAR | --baz BAZ] + ''' + usage_when_required = '''\ + usage: PROG [-h] (--bar BAR | --baz BAZ) + ''' + help = '''\ + + optional arguments: + -h, --help show this help message and exit + + Titled group: + Group description + + --bar BAR bar help + --baz BAZ baz help + ''' + + class TestMutuallyExclusiveOptionalsAndPositionalsMixed(MEMixin, TestCase): def get_parser(self, required):