# -*- coding: utf-8 -*- """ @author: Fabio Erculiani @contact: lxnay@sabayon.org @copyright: Fabio Erculiani @license: GPL-2 B{Entropy Infrastructure Toolkit}. """ import argparse from entropy.i18n import _ from entropy.output import teal, purple, darkgreen from solo.colorful import ColorfulFormatter from solo.commands.descriptor import SoloCommandDescriptor from solo.commands.command import SoloCommand class SoloHelp(SoloCommand): """ Main Solo help command. """ NAME = "help" ALIASES = ["-h", "--help"] CATCH_ALL = True def parse(self): """ Parse help command """ return self._show_help, [] def bashcomp(self, last_arg): """ Overridden from SoloCommand """ import sys descriptors = SoloCommandDescriptor.obtain() descriptors.sort(key = lambda x: x.get_name()) outcome = [] for descriptor in descriptors: name = descriptor.get_name() if name == SoloHelp.NAME: # do not add self continue outcome.append(name) aliases = descriptor.get_class().ALIASES outcome.extend(aliases) def _startswith(string): if last_arg is not None: return string.startswith(last_arg) return True outcome = sorted(filter(_startswith, outcome)) sys.stdout.write(" ".join(outcome) + "\n") sys.stdout.flush() def _show_help(self, *args): # equo help if len(self._args) > 1: # syntax error return -10 parser = argparse.ArgumentParser( description=_("Entropy Command Line Client, Equo"), epilog="http://www.sabayon.org", formatter_class=ColorfulFormatter) descriptors = SoloCommandDescriptor.obtain() descriptors.sort(key = lambda x: x.get_name()) group = parser.add_argument_group("command", "available commands") for descriptor in descriptors: if descriptor.get_class().HIDDEN: continue aliases = descriptor.get_class().ALIASES aliases_str = ", ".join([teal(x) for x in aliases]) if aliases_str: aliases_str = " [%s]" % (aliases_str,) name = "%s%s" % (purple(descriptor.get_name()), aliases_str) desc = descriptor.get_description() group.add_argument(name, help=darkgreen(desc), action="store_true") parser.print_help() if not self._args: return 1 return 0 SoloCommandDescriptor.register( SoloCommandDescriptor( SoloHelp, SoloHelp.NAME, _("this help")) )