From e62cd6af284447d79a74300afae1cc499025bdae Mon Sep 17 00:00:00 2001 From: Flavian Hautbois Date: Sat, 27 Jul 2019 10:17:08 +0200 Subject: [PATCH 1/3] Fixed ArgumentParses format_usage for mutually exclusive groups. Co-authored-by: Andrew Nester --- Lib/argparse.py | 10 ++++- Lib/test/test_argparse.py | 37 +++++++++++++++++++ .../2019-07-27-10-14-45.bpo-29553.TVeIDe.rst | 1 + 3 files changed, 46 insertions(+), 2 deletions(-) create mode 100644 Misc/NEWS.d/next/Library/2019-07-27-10-14-45.bpo-29553.TVeIDe.rst diff --git a/Lib/argparse.py b/Lib/argparse.py index e45b67b67704a9..60fef61922dbf7 100644 --- a/Lib/argparse.py +++ b/Lib/argparse.py @@ -404,13 +404,19 @@ def _format_actions_usage(self, actions, groups): inserts[start] += ' [' else: inserts[start] = '[' - inserts[end] = ']' + if end in inserts: + inserts[end] += ']' + else: + inserts[end] = ']' else: if start in inserts: inserts[start] += ' (' else: inserts[start] = '(' - inserts[end] = ')' + if end in inserts: + inserts[end] += ')' + else: + inserts[end] = ')' for i in range(start + 1, end): inserts[i] = '|' diff --git a/Lib/test/test_argparse.py b/Lib/test/test_argparse.py index 5128dc5e1be499..55a80aea3006dc 100644 --- a/Lib/test/test_argparse.py +++ b/Lib/test/test_argparse.py @@ -2813,6 +2813,43 @@ def get_parser(self, required): -c c help ''' +class TestMutuallyExclusiveNested(MEMixin, TestCase): + def get_parser(self, required): + parser = ErrorRaisingArgumentParser(prog='PROG') + group = parser.add_mutually_exclusive_group(required=required) + group.add_argument('-a') + group.add_argument('-b') + group2 = group.add_mutually_exclusive_group(required=required) + group2.add_argument('-c') + group2.add_argument('-d') + group3 = group2.add_mutually_exclusive_group(required=required) + group3.add_argument('-e') + group3.add_argument('-f') + return parser + + failures = [] + successes = [] + successes_when_not_required = [] + + usage_when_not_required = '''\ + usage: PROG [-h] [-a A | -b B | [-c C | -d D | [-e E | -f F]]] + ''' + usage_when_required = '''\ + usage: PROG [-h] (-a A | -b B | (-c C | -d D | (-e E | -f F))) + ''' + + help = '''\ + + optional arguments: + -h, --help show this help message and exit + -a A + -b B + -c C + -d D + -e E + -f F + ''' + # ================================================= # Mutually exclusive group in parent parser tests # ================================================= diff --git a/Misc/NEWS.d/next/Library/2019-07-27-10-14-45.bpo-29553.TVeIDe.rst b/Misc/NEWS.d/next/Library/2019-07-27-10-14-45.bpo-29553.TVeIDe.rst new file mode 100644 index 00000000000000..311fb8ec57bf26 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2019-07-27-10-14-45.bpo-29553.TVeIDe.rst @@ -0,0 +1 @@ +Fixed ArgumentParses format_usage for mutually exclusive groups. Patch by Andrew Nester (@andrewnester) From 24242e750aa3531df3125e33df877d340ef48f7f Mon Sep 17 00:00:00 2001 From: Berker Peksag Date: Sun, 25 Aug 2019 21:28:53 +0300 Subject: [PATCH 2/3] Update 2019-07-27-10-14-45.bpo-29553.TVeIDe.rst --- .../next/Library/2019-07-27-10-14-45.bpo-29553.TVeIDe.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Misc/NEWS.d/next/Library/2019-07-27-10-14-45.bpo-29553.TVeIDe.rst b/Misc/NEWS.d/next/Library/2019-07-27-10-14-45.bpo-29553.TVeIDe.rst index 311fb8ec57bf26..3472db7bf20998 100644 --- a/Misc/NEWS.d/next/Library/2019-07-27-10-14-45.bpo-29553.TVeIDe.rst +++ b/Misc/NEWS.d/next/Library/2019-07-27-10-14-45.bpo-29553.TVeIDe.rst @@ -1 +1,2 @@ -Fixed ArgumentParses format_usage for mutually exclusive groups. Patch by Andrew Nester (@andrewnester) +Fixed :meth:`argparse.ArgumentParser.format_usage` for mutually exclusive groups. +Patch by Andrew Nester. From b96c8b0bb634f7f9cbd27b063d4be0b0f000875e Mon Sep 17 00:00:00 2001 From: Berker Peksag Date: Sun, 25 Aug 2019 21:44:12 +0300 Subject: [PATCH 3/3] Update test_argparse.py --- Lib/test/test_argparse.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/Lib/test/test_argparse.py b/Lib/test/test_argparse.py index 55a80aea3006dc..707d3215b24792 100644 --- a/Lib/test/test_argparse.py +++ b/Lib/test/test_argparse.py @@ -2814,6 +2814,7 @@ def get_parser(self, required): ''' class TestMutuallyExclusiveNested(MEMixin, TestCase): + def get_parser(self, required): parser = ErrorRaisingArgumentParser(prog='PROG') group = parser.add_mutually_exclusive_group(required=required) @@ -2827,10 +2828,6 @@ def get_parser(self, required): group3.add_argument('-f') return parser - failures = [] - successes = [] - successes_when_not_required = [] - usage_when_not_required = '''\ usage: PROG [-h] [-a A | -b B | [-c C | -d D | [-e E | -f F]]] ''' @@ -2850,6 +2847,12 @@ def get_parser(self, required): -f F ''' + # We are only interested in testing the behavior of format_usage(). + test_failures_when_not_required = None + test_failures_when_required = None + test_successes_when_not_required = None + test_successes_when_required = None + # ================================================= # Mutually exclusive group in parent parser tests # =================================================