1 | # (c) 2005 Ian Bicking and contributors; written for Paste (http://pythonpaste.org) |
---|
2 | # Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php |
---|
3 | from command import Command, get_commands |
---|
4 | from command import parser as base_parser |
---|
5 | |
---|
6 | class HelpCommand(Command): |
---|
7 | |
---|
8 | summary = "Display help" |
---|
9 | usage = '[COMMAND]' |
---|
10 | |
---|
11 | max_args = 1 |
---|
12 | |
---|
13 | parser = Command.standard_parser() |
---|
14 | |
---|
15 | def command(self): |
---|
16 | if not self.args: |
---|
17 | self.generic_help() |
---|
18 | return |
---|
19 | |
---|
20 | name = self.args[0] |
---|
21 | commands = get_commands() |
---|
22 | if name not in commands: |
---|
23 | print 'No such command: %s' % name |
---|
24 | self.generic_help() |
---|
25 | return |
---|
26 | |
---|
27 | command = commands[name].load() |
---|
28 | runner = command(name) |
---|
29 | runner.run(['-h']) |
---|
30 | |
---|
31 | def generic_help(self): |
---|
32 | base_parser.print_help() |
---|
33 | print |
---|
34 | commands_grouped = {} |
---|
35 | commands = get_commands() |
---|
36 | longest = max([len(n) for n in commands.keys()]) |
---|
37 | for name, command in commands.items(): |
---|
38 | try: |
---|
39 | command = command.load() |
---|
40 | except Exception, e: |
---|
41 | print 'Cannot load command %s: %s' % (name, e) |
---|
42 | continue |
---|
43 | if getattr(command, 'hidden', False): |
---|
44 | continue |
---|
45 | commands_grouped.setdefault( |
---|
46 | command.group_name, []).append((name, command)) |
---|
47 | commands_grouped = commands_grouped.items() |
---|
48 | commands_grouped.sort() |
---|
49 | print 'Commands:' |
---|
50 | for group, commands in commands_grouped: |
---|
51 | if group: |
---|
52 | print group + ':' |
---|
53 | commands.sort() |
---|
54 | for name, command in commands: |
---|
55 | print ' %s %s' % (self.pad(name, length=longest), |
---|
56 | command.summary) |
---|
57 | #if command.description: |
---|
58 | # print self.indent_block(command.description, 4) |
---|
59 | print |
---|
60 | |
---|