Skip to content

Commit

Permalink
[3.9] bpo-24444: fix an error in argparse help when help for an optio…
Browse files Browse the repository at this point in the history
…n is blank (GH-28050) (GH-28932)

(cherry picked from commit 6fafc25)

Co-authored-by: andrei kulakov <andrei.avk@gmail.com>
Co-authored-by: Łukasz Langa <lukasz@langa.pl>
  • Loading branch information
3 people authored Oct 13, 2021
1 parent 9210eff commit fb72034
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 5 deletions.
11 changes: 6 additions & 5 deletions Lib/argparse.py
Original file line number Diff line number Diff line change
Expand Up @@ -526,12 +526,13 @@ def _format_action(self, action):
parts = [action_header]

# if there was help for the action, add lines of help text
if action.help:
if action.help and action.help.strip():
help_text = self._expand_help(action)
help_lines = self._split_lines(help_text, help_width)
parts.append('%*s%s\n' % (indent_first, '', help_lines[0]))
for line in help_lines[1:]:
parts.append('%*s%s\n' % (help_position, '', line))
if help_text:
help_lines = self._split_lines(help_text, help_width)
parts.append('%*s%s\n' % (indent_first, '', help_lines[0]))
for line in help_lines[1:]:
parts.append('%*s%s\n' % (help_position, '', line))

# or add a newline if the description doesn't end with one
elif not action_header.endswith('\n'):
Expand Down
38 changes: 38 additions & 0 deletions Lib/test/test_argparse.py
Original file line number Diff line number Diff line change
Expand Up @@ -2143,6 +2143,44 @@ def test_help_non_breaking_spaces(self):
wrap\N{NO-BREAK SPACE}at non-breaking spaces
'''))

def test_help_blank(self):
# Issue 24444
parser = ErrorRaisingArgumentParser(
prog='PROG', description='main description')
parser.add_argument(
'foo',
help=' ')
self.assertEqual(parser.format_help(), textwrap.dedent('''\
usage: PROG [-h] foo
main description
positional arguments:
foo \
optional arguments:
-h, --help show this help message and exit
'''))

parser = ErrorRaisingArgumentParser(
prog='PROG', description='main description')
parser.add_argument(
'foo', choices=[],
help='%(choices)s')
self.assertEqual(parser.format_help(), textwrap.dedent('''\
usage: PROG [-h] {}
main description
positional arguments:
{} \
optional arguments:
-h, --help show this help message and exit
'''))

def test_help_alternate_prefix_chars(self):
parser = self._get_parser(prefix_chars='+:/')
self.assertEqual(parser.format_usage(),
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Fixed an error raised in :mod:`argparse` help display when help for an
option is set to 1+ blank spaces or when *choices* arg is an empty container.

0 comments on commit fb72034

Please sign in to comment.