| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 | from __future__ import absolute_importfrom __future__ import unicode_literalsimport sysfrom inspect import getdocfrom docopt import docoptfrom docopt import DocoptExitdef docopt_full_help(docstring, *args, **kwargs):    try:        return docopt(docstring, *args, **kwargs)    except DocoptExit:        raise SystemExit(docstring)class DocoptCommand(object):    def docopt_options(self):        return {'options_first': True}    def sys_dispatch(self):        self.dispatch(sys.argv[1:], None)    def dispatch(self, argv, global_options):        self.perform_command(*self.parse(argv, global_options))    def parse(self, argv, global_options):        options = docopt_full_help(getdoc(self), argv, **self.docopt_options())        command = options['COMMAND']        if command is None:            raise SystemExit(getdoc(self))        handler = self.get_handler(command)        docstring = getdoc(handler)        if docstring is None:            raise NoSuchCommand(command, self)        command_options = docopt_full_help(docstring, options['ARGS'], options_first=True)        return options, handler, command_options    def get_handler(self, command):        command = command.replace('-', '_')        if not hasattr(self, command):            raise NoSuchCommand(command, self)        return getattr(self, command)class NoSuchCommand(Exception):    def __init__(self, command, supercommand):        super(NoSuchCommand, self).__init__("No such command: %s" % command)        self.command = command        self.supercommand = supercommand
 |