diff --git a/cccli/cli.py b/cccli/cli.py index 2a14df271dbc01b7e9157860b7c615da0ecb225a..7d4ac780bdd924503b34c58ba9db732b0b26912a 100644 --- a/cccli/cli.py +++ b/cccli/cli.py @@ -104,7 +104,9 @@ class Cli(object): continue # alias subsitution if argv[0] in self.alias: - argv[0] = self.alias[argv[0]] + oldargv = argv[1:] + argv = shlex.split(self.alias[argv[0]]) + argv.extend(oldargv) self._exec_command(argv) if self.interactive: self.printer.out("tcho!") @@ -120,7 +122,7 @@ class Cli(object): Command(["help"], self).call() else: Command(argv, self).call() - except BadArgument as e: + except cmdBadArgument as e: if str(e): self.printer.error("Bad argument: %s."%str(e)) else: @@ -128,11 +130,8 @@ class Cli(object): usage = Command.usage(argv[0]) if usage != "": self.printer.out("usage: %s."%usage) - except BadCommand as e: - if str(e): - self.printer.error("command: %s."%str(e)) - else: - self.printer.error("No command: %s."%argv[0]) + except cmdBadName: + self.printer.error("No command: %s."%argv[0]) except cmdWarning as e: self.printer.warn("%s: %s"%(argv[0], str(e))) except cmdError as e: diff --git a/cccli/command.py b/cccli/command.py index 1aedffee01be8d397820c75909a8c0309172688f..8e5d73a253074f9d921f5de4c53e5dd314e506b2 100644 --- a/cccli/command.py +++ b/cccli/command.py @@ -21,21 +21,19 @@ class Command(object): def __init__(self, argv, cli): # check argv - if len(argv) < 1: - raise BadCommand() + if len(argv) == 0: + raise cmdBadName() # check valid command chars if not re.match("^[a-zA-Z0-9]+", argv[0]): - raise BadCommand("Invalid command name") + raise cmdBadName() cmdlist = [ x[4:] for x in dir(self) if x.startswith("cmd_") ] matchlist = [ x for x in cmdlist if re.match("%s.+"%argv[0], x) ] if argv[0] in cmdlist: pass elif len(matchlist) == 1: argv[0] = matchlist[0] - elif len(matchlist) > 1: - raise BadCommand("Too many command: %s"%", ".join(matchlist)) else: - raise BadCommand() + raise cmdBadName() self._cmd = getattr(self, "cmd_%s"%argv[0]) self._argv = argv self.cli = cli @@ -46,7 +44,7 @@ class Command(object): '''Return usage of a command''' fname = "cmd_%s"%cmdname if not hasattr(cls, fname): - raise BadArgument(cmdname) + raise cmdBadName(cmdname) if hasattr(getattr(cls, fname), "usage"): return getattr(getattr(cls, fname), "usage") return "" @@ -58,7 +56,7 @@ class Command(object): if hasattr(self, name): cmd = getattr(self, name) return cmd(self._argv) - raise BadCommand(self._argv[0]) + raise cmdBadName(self._argv[0]) def cmd_exit(self, argv): '''Quit application with respect''' @@ -81,7 +79,7 @@ class Command(object): def cmd_usage(self, argv): '''Print usage of a command''' if len(argv) != 2: - raise BadArgument() + raise cmdBadArgument() usage = Command.usage(argv[1]) if usage != "": self.printer.out("usage: %s"%usage) @@ -120,9 +118,9 @@ class Command(object): if hasattr(getattr(self, fname), "details"): Self.Printer.out("Details: %s"%getattr(getattr(self, fname), "details")) else: - raise BadArgument(argv[1]) + raise cmdBadArgument(argv[1]) else: - raise BadArgument() + raise cmdBadArgument() cmd_help.usage = "help [command]" cmd_help.desc = "Print help about a command" @@ -133,22 +131,22 @@ class Command(object): self.printer.out("%s=%s"%(n, v)) elif len(argv) == 2: if argv[1] not in self.cli.alias: - raise BadArgument(argv[1]) + raise cmdBadArgument(argv[1]) self.printer.out("%s=%s"%(argv[1], self.cli.alias[argv[1]])) elif len(argv) == 3: self.cli.alias[argv[1]] = argv[2] self.cli.alias.save(self.cli.settings.get("alias", "")) else: - raise BadArgument() + raise cmdBadArgument() cmd_alias.usage = "alias [name] [value]" cmd_alias.desc = "Show or create aliases" def cmd_unalias(self, argv): '''Remove an alias''' if len(argv) != 2: - raise BadArgument() + raise cmdBadArgument() if argv[1] not in self.cli.alias: - raise BadArgument("%s: No such alias"%argv[1]) + raise cmdBadArgument("%s: No such alias"%argv[1]) del self.cli.alias[argv[1]] self.cli.alias.save(self.cli.settings.get("alias", "")) cmd_unalias.usage = "unalias [name]" @@ -184,7 +182,7 @@ class Command(object): def _startstopsdestroypauseresume(self, argv): # arg stuff if len(argv) == 1: - raise BadArgument() + raise cmdBadArgument() tql = str.join(" ", argv[1:]) # print tql list result items = self.cli.rpc.list(tql) diff --git a/cccli/exception.py b/cccli/exception.py index 446e39e69f7a5f52df72fcf9328873254ae431a4..78048a3d4ae06adc806ce2e00929b3cba787928f 100644 --- a/cccli/exception.py +++ b/cccli/exception.py @@ -12,14 +12,17 @@ class cliException(Exception): class cliError(cliException): pass -class BadCommand(cliError): +class BadArgument(cliError): pass ################################################################################ class cmdException(cliException): pass -class BadArgument(cmdException): +class cmdBadName(cmdException): + pass + +class cmdBadArgument(cmdException): pass class cmdWarning(cmdException):