Source code for watson.console.command

# -*- coding: utf-8 -*-
import abc
from watson.common.contextmanagers import suppress


[docs]class Base(metaclass=abc.ABCMeta): """The base command that outlines the required structure for a console command. Help is automatically invoked when the `-h` or `--help` option is used. http://docs.python.org/dev/library/argparse.html#the-add-argument-method Example: .. code-block:: python # can be executed by `script.py mycommand` class MyCommand(BaseCommand): name = 'mycommand' def execute(self): return True # can be executed by `script.py mycommand -t something` class MyCommand(BaseCommand): name = 'mycommand' arguments = [ (['-t', '--test'], {'help': 'Do something with -t'}) ] def execute(self): return True if self.parsed_args.t else False # can be executed by `script.py mycommand something` class MyCommand(BaseCommand): name = 'mycommand' arguments = [ {'dest': 'argument1', 'help': 'This is the help for the argument'} ] def execute(self): return True if self.parsed_args.argument1 else False """ name = None arguments = [] help = 'Missing help.' _parsed_args = None @property def parsed_args(self): """Returns the parsed arguments. Returns: list|dict depending on whether or not there have been named arguments. """ return self._parsed_args @parsed_args.setter
[docs] def parsed_args(self, args): """Set the parsed arguments. """ self._parsed_args = args
@abc.abstractmethod def execute(self): raise NotImplementedError('execute() must be implemented.') # pragma: no cover def __call__(self): return self.execute()
[docs]def find_commands_in_module(module): """Retrieves a list of all commands within a module. Returns: A list of commands from the module. """ commands = [] for key in dir(module): item = getattr(module, key) with suppress(Exception): if issubclass(item, Base) and item != Base: commands.append(item) return commands