Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit da27d9b

Browse files
Flavian Hautboisandrewnester
authored andcommitted
bpo-29553: Fix ArgumentParser.format_usage() for mutually exclusive groups (GH-14976)
Co-authored-by: Andrew Nester <[email protected]>
1 parent 5dbe0f5 commit da27d9b

File tree

3 files changed

+50
-2
lines changed

3 files changed

+50
-2
lines changed

Lib/argparse.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -404,13 +404,19 @@ def _format_actions_usage(self, actions, groups):
404404
inserts[start] += ' ['
405405
else:
406406
inserts[start] = '['
407-
inserts[end] = ']'
407+
if end in inserts:
408+
inserts[end] += ']'
409+
else:
410+
inserts[end] = ']'
408411
else:
409412
if start in inserts:
410413
inserts[start] += ' ('
411414
else:
412415
inserts[start] = '('
413-
inserts[end] = ')'
416+
if end in inserts:
417+
inserts[end] += ')'
418+
else:
419+
inserts[end] = ')'
414420
for i in range(start + 1, end):
415421
inserts[i] = '|'
416422

Lib/test/test_argparse.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2813,6 +2813,46 @@ def get_parser(self, required):
28132813
-c c help
28142814
'''
28152815

2816+
class TestMutuallyExclusiveNested(MEMixin, TestCase):
2817+
2818+
def get_parser(self, required):
2819+
parser = ErrorRaisingArgumentParser(prog='PROG')
2820+
group = parser.add_mutually_exclusive_group(required=required)
2821+
group.add_argument('-a')
2822+
group.add_argument('-b')
2823+
group2 = group.add_mutually_exclusive_group(required=required)
2824+
group2.add_argument('-c')
2825+
group2.add_argument('-d')
2826+
group3 = group2.add_mutually_exclusive_group(required=required)
2827+
group3.add_argument('-e')
2828+
group3.add_argument('-f')
2829+
return parser
2830+
2831+
usage_when_not_required = '''\
2832+
usage: PROG [-h] [-a A | -b B | [-c C | -d D | [-e E | -f F]]]
2833+
'''
2834+
usage_when_required = '''\
2835+
usage: PROG [-h] (-a A | -b B | (-c C | -d D | (-e E | -f F)))
2836+
'''
2837+
2838+
help = '''\
2839+
2840+
optional arguments:
2841+
-h, --help show this help message and exit
2842+
-a A
2843+
-b B
2844+
-c C
2845+
-d D
2846+
-e E
2847+
-f F
2848+
'''
2849+
2850+
# We are only interested in testing the behavior of format_usage().
2851+
test_failures_when_not_required = None
2852+
test_failures_when_required = None
2853+
test_successes_when_not_required = None
2854+
test_successes_when_required = None
2855+
28162856
# =================================================
28172857
# Mutually exclusive group in parent parser tests
28182858
# =================================================
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Fixed :meth:`argparse.ArgumentParser.format_usage` for mutually exclusive groups.
2+
Patch by Andrew Nester.

0 commit comments

Comments
 (0)