Loading bin/cc-cli +8 −1 Original line number Diff line number Diff line Loading @@ -87,10 +87,15 @@ try: dest="hsize", default="", help="History max entry count") oparser.add_option("--force-yes", action="store_true", dest="forceyes", default="", help="Answer yes to yes/no question") (options, args) = oparser.parse_args() # options handling for i in ("debug", "login", "server", "port", "timeout", "history", "hsize"): for i in ("debug", "login", "server", "port", "timeout", "history", "hsize", "forceyes"): if hasattr(options, i): o = getattr(options, i) if o: Loading @@ -116,10 +121,12 @@ try: raise BadArgument("Invalid %s number"%i) # check login if "login" not in settings: printer.setinteractive() settings["login"] = printer.ask("Login: ") # check password if "pass" not in settings: printer.setinteractive() settings["pass"] = printer.getpass("Password: ") # start cli Loading cccli/cli.py +9 −10 Original line number Diff line number Diff line Loading @@ -21,14 +21,11 @@ from sjrpc.client import SimpleRpcClient from sjrpc.utils import RpcHandler, ConnectionProxy, pure from sjrpc.core.exceptions import * class Cli(object): def __init__(self, settings): self.settings = settings self.prompt = "" self.prompt = "> " self.rpc = None self.printer = None self.alias = Alias() def start(self, line=""): Loading @@ -39,25 +36,27 @@ class Cli(object): # set interactive mode self.interactive = sys.stderr.isatty() and sys.stdin.isatty() # start printer and load history self.printer = Printer(self.interactive) self.printer.history.load(self.settings.get("history", "")) self.printer.history.maxsize(self.settings.get("hsize", None)) self.printer = Printer(self.interactive, self.settings.get("forceyes", False), historyfile=self.settings.get("history", ""), historysize=self.settings.get("hsize", None)) # load alias self.alias.load(self.settings.get("alias", "")) # print debug self.printer.debug("Interactive: %s"%self.interactive) self.printer.debug("Alias: %s"%self.alias) self.printer.debug("Loaded history: %s"%len(self.printer.history)) # Connecting # connecting self._connect() # authentifications # auth self._auth() # Parsing # parsing self._parse() # save history self.printer.history.save(self.settings.get("history", "")) def _connect(self): '''Connect to a cloud control server''' self.printer.debug("Connecting...") try: rpcc = SimpleRpcClient.from_addr(self.settings["server"], Loading cccli/command.py +2 −3 Original line number Diff line number Diff line Loading @@ -193,14 +193,13 @@ class Command(object): for item in items: self.printer.out("%s"%item["id"]) self.printer.out("Count: %s"%len(items)) if self.printer.ask("Are you sure to %s? (yes/NO) "%argv[0]) != "yes": if self.printer.ask("Are you sure to %s? (yes/NO) "%argv[0], "yes") != "yes": raise cmdWarning("Aborted") if len(items) > 5: if self.printer.ask("You request is on more than 5 objets. Are you really sure to %s its? (Yes, I am) "%argv[0]) != "Yes, I am": if self.printer.ask("You request is on more than 5 objets. Are you really sure to %s its? (Yes, I am) "%argv[0], "Yes, I am") != "Yes, I am": raise cmdWarning("Aborted") self.cli.rpc[argv[0]](tql) def cmd_start(self, argv): '''Start objects''' self._startstopsdestroypauseresume(argv) Loading cccli/printer.py +29 −8 Original line number Diff line number Diff line Loading @@ -10,6 +10,7 @@ import os import getpass import cccli from cccli.exception import * color = { # regular Loading Loading @@ -42,17 +43,31 @@ color = { class Printer(object): '''Print relative class''' def __init__(self, interactive=False): def __init__(self, interactive=False, forceyes=False, historyfile=None, historysize=None): self.readline = None self.history = History() self.historyfile = historyfile self.historysize = historysize self.forceyes = forceyes if interactive: import readline self.readline = readline self.history = History(self.readline) self.setinteractive() def isinteractive(self): '''Return if printer is in interactive mode''' return self.readline is not None def setinteractive(self): if self.readline is not None: return import readline self.readline = readline if self.history is None: self.history = History(self.readline) else: self.history.readline = readline self.history.load(self.historyfile) self.history.maxsize(self.historysize) def out(self, message, fd=sys.stdout, nl=os.linesep, flush=True): '''Print a message in fd ended by nl''' fd.write("%s%s"%(message, nl)) Loading Loading @@ -98,20 +113,26 @@ class Printer(object): def getpass(self, prompt): '''Ask for a password. No echo. Not in history''' if self.readline is None: raise cliError("Unable to ask a password in non-interactive mode") return getpass.getpass(prompt) def ask(self, prompt): def ask(self, prompt, goodans=None): '''Used to ask a question. Default answer not saved to history''' if self.forceyes and goodans is not None: return goodans if self.readline is None: raise cliError("Unable to ask question in non-interactive mode") return self.getline(prompt, history=False) class History(object): '''History class''' def __init__(self, readline): self.readline = readline def __init__(self): self.readline = None def __nonzero__(self): return not self.readline is None return self.readline is not None def __getattribute__(self, name): r = object.__getattribute__(self, "readline") Loading Loading
bin/cc-cli +8 −1 Original line number Diff line number Diff line Loading @@ -87,10 +87,15 @@ try: dest="hsize", default="", help="History max entry count") oparser.add_option("--force-yes", action="store_true", dest="forceyes", default="", help="Answer yes to yes/no question") (options, args) = oparser.parse_args() # options handling for i in ("debug", "login", "server", "port", "timeout", "history", "hsize"): for i in ("debug", "login", "server", "port", "timeout", "history", "hsize", "forceyes"): if hasattr(options, i): o = getattr(options, i) if o: Loading @@ -116,10 +121,12 @@ try: raise BadArgument("Invalid %s number"%i) # check login if "login" not in settings: printer.setinteractive() settings["login"] = printer.ask("Login: ") # check password if "pass" not in settings: printer.setinteractive() settings["pass"] = printer.getpass("Password: ") # start cli Loading
cccli/cli.py +9 −10 Original line number Diff line number Diff line Loading @@ -21,14 +21,11 @@ from sjrpc.client import SimpleRpcClient from sjrpc.utils import RpcHandler, ConnectionProxy, pure from sjrpc.core.exceptions import * class Cli(object): def __init__(self, settings): self.settings = settings self.prompt = "" self.prompt = "> " self.rpc = None self.printer = None self.alias = Alias() def start(self, line=""): Loading @@ -39,25 +36,27 @@ class Cli(object): # set interactive mode self.interactive = sys.stderr.isatty() and sys.stdin.isatty() # start printer and load history self.printer = Printer(self.interactive) self.printer.history.load(self.settings.get("history", "")) self.printer.history.maxsize(self.settings.get("hsize", None)) self.printer = Printer(self.interactive, self.settings.get("forceyes", False), historyfile=self.settings.get("history", ""), historysize=self.settings.get("hsize", None)) # load alias self.alias.load(self.settings.get("alias", "")) # print debug self.printer.debug("Interactive: %s"%self.interactive) self.printer.debug("Alias: %s"%self.alias) self.printer.debug("Loaded history: %s"%len(self.printer.history)) # Connecting # connecting self._connect() # authentifications # auth self._auth() # Parsing # parsing self._parse() # save history self.printer.history.save(self.settings.get("history", "")) def _connect(self): '''Connect to a cloud control server''' self.printer.debug("Connecting...") try: rpcc = SimpleRpcClient.from_addr(self.settings["server"], Loading
cccli/command.py +2 −3 Original line number Diff line number Diff line Loading @@ -193,14 +193,13 @@ class Command(object): for item in items: self.printer.out("%s"%item["id"]) self.printer.out("Count: %s"%len(items)) if self.printer.ask("Are you sure to %s? (yes/NO) "%argv[0]) != "yes": if self.printer.ask("Are you sure to %s? (yes/NO) "%argv[0], "yes") != "yes": raise cmdWarning("Aborted") if len(items) > 5: if self.printer.ask("You request is on more than 5 objets. Are you really sure to %s its? (Yes, I am) "%argv[0]) != "Yes, I am": if self.printer.ask("You request is on more than 5 objets. Are you really sure to %s its? (Yes, I am) "%argv[0], "Yes, I am") != "Yes, I am": raise cmdWarning("Aborted") self.cli.rpc[argv[0]](tql) def cmd_start(self, argv): '''Start objects''' self._startstopsdestroypauseresume(argv) Loading
cccli/printer.py +29 −8 Original line number Diff line number Diff line Loading @@ -10,6 +10,7 @@ import os import getpass import cccli from cccli.exception import * color = { # regular Loading Loading @@ -42,17 +43,31 @@ color = { class Printer(object): '''Print relative class''' def __init__(self, interactive=False): def __init__(self, interactive=False, forceyes=False, historyfile=None, historysize=None): self.readline = None self.history = History() self.historyfile = historyfile self.historysize = historysize self.forceyes = forceyes if interactive: import readline self.readline = readline self.history = History(self.readline) self.setinteractive() def isinteractive(self): '''Return if printer is in interactive mode''' return self.readline is not None def setinteractive(self): if self.readline is not None: return import readline self.readline = readline if self.history is None: self.history = History(self.readline) else: self.history.readline = readline self.history.load(self.historyfile) self.history.maxsize(self.historysize) def out(self, message, fd=sys.stdout, nl=os.linesep, flush=True): '''Print a message in fd ended by nl''' fd.write("%s%s"%(message, nl)) Loading Loading @@ -98,20 +113,26 @@ class Printer(object): def getpass(self, prompt): '''Ask for a password. No echo. Not in history''' if self.readline is None: raise cliError("Unable to ask a password in non-interactive mode") return getpass.getpass(prompt) def ask(self, prompt): def ask(self, prompt, goodans=None): '''Used to ask a question. Default answer not saved to history''' if self.forceyes and goodans is not None: return goodans if self.readline is None: raise cliError("Unable to ask question in non-interactive mode") return self.getline(prompt, history=False) class History(object): '''History class''' def __init__(self, readline): self.readline = readline def __init__(self): self.readline = None def __nonzero__(self): return not self.readline is None return self.readline is not None def __getattribute__(self, name): r = object.__getattribute__(self, "readline") Loading