diff --git a/bin/cc-cli b/bin/cc-cli index a47e380d3da88bc357da0463a66282d6d304327f..995bad1fc6e9369c12e5801b1b94d0d1e09b8198 100755 --- a/bin/cc-cli +++ b/bin/cc-cli @@ -135,10 +135,10 @@ try: except BadArgument as e: printer.error("Bad Argument: %s"%str(e)) oparser.print_help() -except cliError as e: - printer.error(str(e)) except KeyboardInterrupt: exit(1) +except cliError as e: + printer.error(str(e)) except Exception as e: if cccli.debug: printer.fatal(str(e), quit=False) diff --git a/cccli/cli.py b/cccli/cli.py index 33601e9efc8f5b61041b2a41944f10a529b66daf..4b739858bd18348c29ccc0c614d167f81f45826e 100644 --- a/cccli/cli.py +++ b/cccli/cli.py @@ -18,7 +18,7 @@ from cccli.printer import Printer, color from cccli.exception import * from sjrpc.client import SimpleRpcClient -from sjrpc.utils import RpcHandler, ConnectionProxy, pure +from sjrpc.utils import RpcHandler, pure from sjrpc.core.exceptions import * class Cli(object): diff --git a/cccli/command.py b/cccli/command.py index db4ceaf536a85ceae0aa1d45c493dc78195f1e45..35480c5e3aa94aa34bfec5ca5b1514118e58020b 100644 --- a/cccli/command.py +++ b/cccli/command.py @@ -10,6 +10,7 @@ import sys import re import pprint import ConfigParser +import code from optparse import OptionParser import cccli @@ -17,6 +18,7 @@ from cccli.exception import * from cccli.printer import color from sjrpc.client import SimpleRpcClient +from sjrpc.utils import ConnectionProxy from sjrpc.core.exceptions import * class Command(object): @@ -367,6 +369,20 @@ class Command(object): raise cmdError("RPCError: %s"%str(e)) cmd_passwd.usage = "passwd [password]" + def cmd_expert(self, argv): + '''Switch in expert mode''' + self.printer.history.save(self.cli.settings.get("history", "")) + try: + local = dict() + local["cli"] = self.cli + local["rpc"] = self.cli.rpc + local["proxy"] = ConnectionProxy(self.cli.rpc) + c = code.InteractiveConsole(local) + c.interact("Use Ctrl+D to go back in CLI") + finally: + self.printer.history.load(self.cli.settings.get("history", "")) + cmd_expert.usage = "expert" + class Alias(dict): ''' Alias wrapper''' diff --git a/cccli/printer.py b/cccli/printer.py index 6bd75d940343e5b4a0c6c0cd3f517713a84a4d92..51accd8a938fb6c8309f863e2df6a43c77b0a339 100644 --- a/cccli/printer.py +++ b/cccli/printer.py @@ -106,8 +106,8 @@ class Printer(object): raise except KeyboardInterrupt: raise - except: - raise cliError + except Exception as e: + raise cliError(str(e)) if not history and s: self.history.removelast() return s