def _format_action(self, action: argparse.Action) -> str: # pylint: disable=attribute-defined-outside-init # if isinstance(action, argparse._SubParsersAction): self._subaction_max_length = max( len(i) for i in [ self._format_action_invocation(a) for a in action._get_subactions() ]) if isinstance(action, argparse._SubParsersAction._ChoicesPseudoAction): subaction = self._format_action_invocation(action) width = self._subaction_max_length help_text = self._expand_help(action) if action.help else str() return '{indent_first}{:{width}}{indent_help}{}\n'.format( subaction, help_text, indent_first=' ' * 2, width=width, indent_help=' ' * 10) elif isinstance(action, argparse._SubParsersAction): return '\n{}'.format(''.join( self._format_action(a) for a in action._get_subactions())) else: return super()._format_action(action)
def _format_action(self, action: Action): if isinstance(action, argparse._SubParsersAction): # pylint: disable=protected-access parts = [] subactions = action._get_subactions() # pylint: disable=protected-access action_subcommnads, group_subcommnands = partition( lambda d: isinstance(ALL_COMMANDS_DICT[d.dest], GroupCommand), subactions ) parts.append("\n") parts.append('%*s%s:\n' % (self._current_indent, '', "Groups")) self._indent() for subaction in group_subcommnands: parts.append(self._format_action(subaction)) self._dedent() parts.append("\n") parts.append('%*s%s:\n' % (self._current_indent, '', "Commands")) self._indent() for subaction in action_subcommnads: parts.append(self._format_action(subaction)) self._dedent() # return a single string return self._join_parts(parts) return super()._format_action(action)