Source code for command_tree.groups


from .argument import AddArgumentHandlerBase, Argument

[docs]class GroupBase(object): """Interface class to define group handlers. Args: command_tree (CommandTree): a CommandTree instance handler (AddArgumentHandlerBase): :py:class:`command_tree.argument.AddArgumentHandlerBase` based class instance """ def __init__(self, command_tree, handler): self._command_tree = command_tree self._add_argument_handler = handler @property def handler(self): return self._add_argument_handler
[docs] def common_argument(self, *args, **kwargs): """Decorator for argument creation. All arguments will passed to the ArgumentParser.add_argument function Returns: function: wrapper function """ def wrapper(obj): argument_descriptor = self._command_tree.add_argument(obj, *args, **kwargs) argument_descriptor.set_common() argument_descriptor.add_argument_handler = self._add_argument_handler return obj return wrapper
[docs] def argument(self, *args, **kwargs): """Decorator for argument creation. All arguments will passed to the ArgumentParser.add_argument function Returns: function: wrapper function """ def wrapper(obj): argument_descriptor = self._command_tree.add_argument(obj, *args, **kwargs) argument_descriptor.add_argument_handler = self._add_argument_handler return obj return wrapper
[docs]class GroupAddArgumentHandler(AddArgumentHandlerBase): def __init__(self, factory, argument_group = None): self._group = None self._argument_group_handler = argument_group.handler if argument_group else None self._factory = factory
[docs] def get_parent(self, parser): return self._argument_group_handler.get_group(parser) if self._argument_group_handler else parser
[docs] def get_group(self, parser): if self._group is None: self._group = self._factory(self.get_parent(parser)) return self._group
[docs] def add(self, parser, *args, **kwargs): return self.get_group(parser).add_argument(*args, **kwargs)
[docs]class MutuallyExclusiveGroup(GroupBase): """Group for create MutuallyExclusiveGroup as described as :py:func:`argparse.ArgumentParser.add_mutually_exclusive_group`."""
[docs] class AddArgumentHandler(GroupAddArgumentHandler): def __init__(self, required, argument_group = None): super().__init__(lambda p: p.add_mutually_exclusive_group(required = self._required), argument_group) self._required = required
[docs] def clone(self): return type(self)(self._required)
def __init__(self, command_tree, required = False, argument_group = None): super(MutuallyExclusiveGroup, self).__init__(command_tree, self.AddArgumentHandler(required, argument_group))
[docs]class ArgumentGroup(GroupBase): """Group for create MutuallyExclusiveGroup as described as :py:func:`argparse.ArgumentParser.add_argument_group`."""
[docs] class AddArgumentHandler(GroupAddArgumentHandler): def __init__(self, title = None, description = None): super().__init__(lambda parser: parser.add_argument_group(self._title, self._description)) self._title = title self._description = description
[docs] def clone(self): return type(self)(self._title, self._description)
def __init__(self, command_tree, title = None, description = None): super(ArgumentGroup, self).__init__(command_tree, self.AddArgumentHandler(title, description))