0001
0002
0003from command import Command, get_commands
0004from command import parser as base_parser
0005
0006class HelpCommand(Command):
0007
0008 summary = "Display help"
0009 usage = '[COMMAND]'
0010
0011 max_args = 1
0012
0013 parser = Command.standard_parser()
0014
0015 def command(self):
0016 if not self.args:
0017 self.generic_help()
0018 return
0019
0020 name = self.args[0]
0021 commands = get_commands()
0022 if name not in commands:
0023 print 'No such command: %s' % name
0024 self.generic_help()
0025 return
0026
0027 command = commands[name].load()
0028 runner = command(name)
0029 runner.run(['-h'])
0030
0031 def generic_help(self):
0032 base_parser.print_help()
0033 print
0034 commands_grouped = {}
0035 commands = get_commands()
0036 longest = max([len(n) for n in commands.keys()])
0037 for name, command in commands.items():
0038 try:
0039 command = command.load()
0040 except Exception, e:
0041 print 'Cannot load command %s: %s' % (name, e)
0042 continue
0043 if getattr(command, 'hidden', False):
0044 continue
0045 commands_grouped.setdefault(
0046 command.group_name, []).append((name, command))
0047 commands_grouped = commands_grouped.items()
0048 commands_grouped.sort()
0049 print 'Commands:'
0050 for group, commands in commands_grouped:
0051 if group:
0052 print group + ':'
0053 commands.sort()
0054 for name, command in commands:
0055 print ' %s %s' % (self.pad(name, length=longest),
0056 command.summary)
0057
0058
0059 print