51 lines
1.3 KiB
Python
51 lines
1.3 KiB
Python
|
|
import abc
|
|
import argparse
|
|
import inspect
|
|
|
|
|
|
class Command(object):
|
|
"""Base class for command plugins.
|
|
|
|
:param app: Application instance invoking the command.
|
|
:paramtype app: cliff.app.App
|
|
"""
|
|
__metaclass__ = abc.ABCMeta
|
|
|
|
def __init__(self, app, app_args):
|
|
self.app = app
|
|
self.app_args = app_args
|
|
return
|
|
|
|
def get_description(self):
|
|
"""Return the command description.
|
|
"""
|
|
return inspect.getdoc(self.__class__) or ''
|
|
|
|
def get_parser(self, prog_name):
|
|
"""Return an :class:`argparse.ArgumentParser`.
|
|
"""
|
|
parser = argparse.ArgumentParser(
|
|
description=self.get_description(),
|
|
prog=prog_name,
|
|
)
|
|
return parser
|
|
|
|
@abc.abstractmethod
|
|
def take_action(self, parsed_args):
|
|
"""Override to do something useful.
|
|
"""
|
|
|
|
def run(self, parsed_args):
|
|
"""Invoked by the application when the command is run.
|
|
|
|
Developers implementing commands should override
|
|
:meth:`take_action`.
|
|
|
|
Developers creating new command base classes (such as
|
|
:class:`Lister` and :class:`ShowOne`) should override this
|
|
method to wrap :meth:`take_action`.
|
|
"""
|
|
self.take_action(parsed_args)
|
|
return 0
|