Mini Shell
import argparse
# Based on patch from https://bugs.python.org/issue9341
class SubparsersAction(argparse._SubParsersAction):
"""
Provide a subparser action that can create subparsers with ability of
grouping arguments.
It is based on the patch from:
- https://bugs.python.org/issue9341
"""
class _PseudoGroup(argparse.Action):
def __init__(self, container, title):
super().__init__(option_strings=[], dest=title)
self.container = container
self._choices_actions = []
def add_parser(self, name, **kwargs):
# add the parser to the main Action, but move the pseudo action
# in the group's own list
parser = self.container.add_parser(name, **kwargs)
choice_action = self.container._choices_actions.pop()
self._choices_actions.append(choice_action)
return parser
def _get_subactions(self):
return self._choices_actions
def add_parser_group(self, title):
# the formatter can handle recursive subgroups
grp = SubparsersAction._PseudoGroup(self, title)
self._choices_actions.append(grp)
return grp
def add_parser_group(self, title):
"""
Add new parser group.
:param title: Title.
:type title: str
:return: Parser group that can have additional parsers attached.
:rtype: ``argparse.Action`` extended with ``add_parser`` method
"""
grp = self._PseudoGroup(self, title)
self._choices_actions.append(grp)
return grp
class Option:
"""
Group option attributes for command/subcommand options
"""
def __init__(self, name, help_msg, opt_type, short_opt=None):
self.name = name
self.short_opt = short_opt
self.help_msg = help_msg
self.opt_type = opt_type
Zerion Mini Shell 1.0