paul j3 added the comment:
There's a bug in the HelpFormatter.add_argument method. It does not take into
account the extra indentation of subactions (sub parsers) when calculating
self._action_max_length.
The corrected method and a test case is in the attached file.
class MyFormatter(argparse.HelpFormatter):
"""
Corrected _max_action_length for the indenting of subactions
"""
def add_argument(self, action):
if action.help is not argparse.SUPPRESS:
# find all invocations
get_invocation = self._format_action_invocation
invocations = [get_invocation(action)]
current_indent = self._current_indent
for subaction in self._iter_indented_subactions(action):
# compensate for the indent that will be added
indent_chg = self._current_indent - current_indent
added_indent = 'x'*indent_chg
invocations.append(added_indent + get_invocation( subaction) )
# print('inv', invocations)
# update the maximum item length
invocation_length = max([len(s) for s in invocations])
action_length = invocation_length + self._current_indent
self._action_max_length = max(self._action_max_length,
action_length)
# add the item to the list
self._add_item(self._format_action, [action])
Without this correction self._action_max_length is off by 2 if a subparser has
the longest invocation. Normally that wouldn't be an issue since normally
subparser names are short and easy to use. But with the 'aliases' that newer
argparse allows, the invocation could be longer, and possibly longer than
regular arguments.
I haven't passed this correction through test_argparse.py. It also would need
a test case or two. I don't think it need a documentation change.
I don't know if this correction will work with the subparser grouping proposed
in http://bugs.python.org/issue9341.
----------
Added file: http://bugs.python.org/file40661/issue25297.py
_______________________________________
Python tracker <[email protected]>
<http://bugs.python.org/issue25297>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com