]> jfr.im git - irc/rizon/acid.git/blame - pyva/pyva/src/main/python/pseudoclient/sys_command.py
Split pyva plugin into pyva.core and pyva.pyva
[irc/rizon/acid.git] / pyva / pyva / src / main / python / pseudoclient / sys_command.py
CommitLineData
685e346e
A
1RG_NO = 0x1\r
2ARG_YES = 0x2\r
3ARG_OPT = 0x4\r
4ARG_OFFLINE = 0x8\r
5ARG_OFFLINE_REQ = 0x10\r
6\r
7class CommandManager(object):\r
8 def __init__(self):\r
9 self.prefix = self.get_prefix()\r
10 self.invalid = self.get_invalid()\r
11 self.commands = self.get_commands()\r
12 self.generate_help()\r
13\r
14 def get_prefix(self):\r
15 return ''\r
16\r
17 def get_invalid(self):\r
18 return ''\r
19\r
20 def get_commands(self):\r
21 return {}\r
22\r
23 def get_command(self, command):\r
24 command = command.lower()\r
25\r
26 if not command.startswith(self.prefix):\r
27 return None\r
28\r
29 command = command[len(self.prefix):]\r
30\r
31 if not command in self.commands:\r
32 return None\r
33\r
34 command = self.commands[command]\r
35\r
36 if not isinstance(command, basestring):\r
37 return command\r
38\r
39 command = command.lower()\r
40\r
41 if not command in self.commands:\r
42 return None\r
43\r
44 return self.commands[command]\r
45\r
46 def get_help(self, command = None):\r
47 if command == None:\r
48 return self.help\r
49 else:\r
50 if command.startswith(self.prefix):\r
51 command = command[len(self.prefix):]\r
52\r
53 if command in self.help_command:\r
54 return self.help_command[command]\r
55\r
56 return None\r
57\r
58 def add_help_command(self, command):\r
59 cmd = self.commands[command]\r
60\r
61 if isinstance(cmd, basestring):\r
62 cmd = self.commands[cmd]\r
63\r
64 message = []\r
65\r
66 cmd_type = cmd[1]\r
67 cmd_desc = cmd[2]\r
68 cmd_args = cmd[3]\r
69\r
70 message.append('@b%s%s: %s' % (self.prefix, command, cmd_desc))\r
71 message.append(' ')\r
72\r
73 msg = 'Usage: @b%s%s@b' % (self.prefix, command)\r
74\r
75 if len(cmd_args) > 0:\r
76 msg += ' ' + ' '.join(['[%s%s]' % (cmd_arg[1], (' ' + cmd_arg[0]) if ('action' not in cmd_arg[3] or cmd_arg[3]['action'] != 'store_true') else '') for cmd_arg in cmd_args])\r
77\r
78 if len(cmd) > 4:\r
79 argument_name = cmd[4]\r
80 else:\r
81 argument_name = 'argument'\r
82\r
83 if cmd_type & ARG_YES:\r
84 msg += ' %s' % argument_name\r
85 elif cmd_type & ARG_OPT:\r
86 msg += ' [%s]' % argument_name\r
87\r
88 message.append(msg)\r
89 message.append('')\r
90\r
91 longest = 0\r
92\r
93 for cmd_arg in cmd_args:\r
94 longest = len(cmd_arg[0]) if len(cmd_arg[0]) > longest else longest\r
95\r
96 for cmd_arg in cmd_args:\r
97 message.append('@b--%-*s (%s)@b %s' % (longest + 1, cmd_arg[0], cmd_arg[1], cmd_arg[2]))\r
98\r
99 self.help_command[command] = message\r
100\r
101\r
102 def generate_help(self):\r
103 self.help = []\r
104\r
105 self.help.append('@bCommands@b (type @b%shelp command name@b for detailed information):' % self.prefix)\r
106 self.help.append(' ')\r
107\r
108 longest = 0\r
109 alias_dict = {}\r
110 commands = {}\r
111\r
112 for cmd in self.commands:\r
113 if isinstance(self.commands[cmd], basestring):\r
114 orig = self.commands[cmd]\r
115\r
116 if orig in alias_dict:\r
117 alias_dict[orig].append(cmd)\r
118 else:\r
119 alias_dict[orig] = [cmd]\r
120 else:\r
121 if not cmd in alias_dict:\r
122 alias_dict[cmd] = []\r
123\r
124 for key in alias_dict:\r
125 cur = key + ('' if len(alias_dict[key]) == 0 else (' (' + ', '.join(alias_dict[key]) + ')'))\r
126 longest = len(cur) if len(cur) > longest else longest\r
127 commands[cur] = self.commands[key][2]\r
128\r
129 for cmd in sorted(commands):\r
130 self.help.append('@b%-*s@b %s' % (longest + 1, cmd, commands[cmd]))\r
131\r
132 self.help_command = {}\r
133\r
134 for command in self.commands:\r
135 self.add_help_command(command)\r