Skip to content

Commit

Permalink
python#10680: fix mutually exclusive arguments in argument groups.
Browse files Browse the repository at this point in the history
  • Loading branch information
birkenfeld committed Jan 30, 2011
1 parent d2f3857 commit 0f6b47a
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 0 deletions.
1 change: 1 addition & 0 deletions Lib/argparse.py
Original file line number Diff line number Diff line change
Expand Up @@ -1495,6 +1495,7 @@ def __init__(self, container, title=None, description=None, **kwargs):
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)
Expand Down
40 changes: 40 additions & 0 deletions Lib/test/test_argparse.py
Original file line number Diff line number Diff line change
Expand Up @@ -2540,6 +2540,46 @@ def get_parser(self, required):
'''


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):
Expand Down
3 changes: 3 additions & 0 deletions Misc/NEWS
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,9 @@ Library
- Issue #10961: The new pydoc server now better handles exceptions raised
during request handling.

- Issue #10680: Fix mutually exclusive arguments for argument groups in
argparse.

Build
-----

Expand Down

0 comments on commit 0f6b47a

Please sign in to comment.