def dbconfig(argv): """dbconfig [-?D] Options: -? = This help text. -D = Debug on. """ global _session from pycopia import getopt try: optlist, longopts, args = getopt.getopt(argv[1:], "?") except getopt.GetoptError: print (dbconfig.__doc__) return for opt, val in optlist: if opt == "-?": print (dbconfig.__doc__) return if opt == "-D": from pycopia import autodebug io = CLI.ConsoleIO() ui = CLI.UserInterface(io) cmd = ConfigCommands(ui) _session = models.get_session() root = get_root(_session) cmd._setup(root, "%%Ydbconfig%%N:%s> " % (root.name,)) cmd._environ["session"] = _session parser = CLI.CommandParser(cmd, historyfile=os.path.expandvars("$HOME/.hist_dbconfig")) parser.interact()
def jsoncli(argv): """jsoncli [-?D] <configfile>... Provides an interactive CLI for editing a JSON format config file. Options: -? = This help text. -D = Debug on. """ import os from pycopia import getopt try: optlist, longopts, args = getopt.getopt(argv[1:], "?D") except getopt.GetoptError: print (jsoncli.__doc__) return for opt, val in optlist: if opt == "-?": print (jsoncli.__doc__) return elif opt == "-D": from pycopia import autodebug io = CLI.ConsoleIO() ui = CLI.UserInterface(io) cmd = RootCommands(ui) for fname in args: root = jsonconfig.get_config(fname) cmd._setup(root, fname, "%%Yjsonconfig%%N:%s> " % (fname,)) parser = CLI.CommandParser(cmd, historyfile=os.path.expandvars("$HOME/.hist_jsonconfig")) parser.interact()
def doccli(argv): """doccli [-h?] [-D] [<filename>] Create and interactively edit an XHTML document. """ filename = None try: optlist, longopts, args = getopt.getopt(argv[1:], "?hD") except getopt.GetoptError: print doccli.__doc__ return for opt, optarg in optlist: if opt in ("-?", "-h"): print doccli.__doc__ return elif opt == "-D": from pycopia import autodebug if args: filename = args[0] io = CLI.ConsoleIO() ui = CLI.UserInterface(io) cmd = TopLevel(ui) cmd._environ["filename"] = filename if filename: doc = XHTML.get_document(filename) else: doc = XHTML.new_document() cmd._setup(doc, "doc> ") parser = CLI.CommandParser(cmd, historyfile=os.path.expandvars("$HOME/.hist_doccli")) parser.interact()
def cacli(argv): """cacli [-?D] <configfile>... Provides an interactive CLI for managing the certificate authority. Options: -? = This help text. -D = Debug on. """ import os import getopt try: optlist, args = getopt.getopt(argv[1:], "?D") except getopt.GetoptError: print(cacli.__doc__) return for opt, val in optlist: if opt == "-?": print(cacli.__doc__) return elif opt == "-D": from pycopia import autodebug io = CLI.ConsoleIO() ui = CLI.UserInterface(io) cmd = CACommands(ui) mgr = CA.get_manager() cmd._setup(mgr, "%YCA%N> ") parser = CLI.CommandParser( cmd, historyfile=os.path.expandvars("$HOME/.hist_cacli")) parser.interact()
def adbsh(argv): """adbsh [-?hD] Provides an interactive session for ADB. Options: -? = This help text. -D = Enable debugging. """ try: optlist, longopts, args = getopt.getopt(argv[1:], "?hD") except getopt.GetoptError: print adbsh.__doc__ return for opt, optarg in optlist: if opt in ("-?", "-h"): print adbsh.__doc__ return elif opt == "-D": from pycopia import autodebug client = adb.AdbClient() io = CLI.ConsoleIO() ui = CLI.UserInterface(io) cmd = AdbClientCommands(ui) cmd._setup(client, "ADB> ") parser = CLI.CommandParser( cmd, historyfile=os.path.expandvars("$HOME/.hist_androidsh")) parser.interact()
def sslcli(argv): b"""sslcli [-?D] Provides an interactive CLI for managing SSL certificates and CA operations. Options: -? = This help text. -D = Debug on. """ import os import getopt try: optlist, args = getopt.getopt(argv[1:], b"?hD") except getopt.GetoptError: print(sslcli.__doc__) return for opt, val in optlist: if opt in (b"-?", b"-h"): print(sslcli.__doc__) return elif opt == b"-D": from pycopia import autodebug io = CLI.ConsoleIO() ui = CLI.UserInterface(io) ui._env[b"PS1"] = b"SSL> " cmd = SSLCommands(ui) parser = CLI.CommandParser( cmd, historyfile=os.path.expandvars(b"$HOME/.hist_sslcli")) parser.interact()
def storagecli(argv): """storagecli [-?rg] [<scriptfile>...] Provides an interactive session to the configuration server. This allows you to interactively view and change the persistent database. Options: -? = This help text. -g = used paged output (like 'more'). """ from pycopia import getopt paged = False try: optlist, longopts, args = getopt.getopt(argv[1:], "?g") except getopt.GetoptError: print storagecli.__doc__ return for opt, val in optlist: if opt == "-?": print storagecli.__doc__ return elif opt == "-g": paged = True if paged: from pycopia import tty io = tty.PagedIO() else: io = CLI.ConsoleIO() ui = CLI.UserInterface(io) cf = Storage.get_config(initdict=longopts) cf.reportfile = __name__.replace(".", "_") cf.logbasename = "%s.log" % (__name__.replace(".", "_"), ) cf.arguments = argv cmd = RootContainerEditor(ui) cmd._setup(cf, "root") parser = CLI.CommandParser( cmd, historyfile=os.path.expandvars("$HOME/.hist_storagecli")) if args: for arg in args: try: parser.parse(arg) except KeyboardInterrupt: break else: parser.interact()
def androidsh(argv): """androidsh [-d <index>] [-s <serial_no>] [-?hD] [<scriptfilename>] Provides an interactive session to an Android device connected via adb. Options: -d = Device index to use (default 1). -r = Device revision: sooner: 0, dream v2: 2, dream v3: 3 -s = Device serial number. -? = This help text. -D = Enable debugging. """ serial_no = None device_id = 1 try: optlist, longopts, args = getopt.getopt(argv[1:], "?hDd:") except getopt.GetoptError: print androidsh.__doc__ return for opt, optarg in optlist: if opt in ("-?", "-h"): print androidsh.__doc__ return elif opt == "-s": serial_no = optarg elif opt == "-d": device_id = int(optarg) elif opt == "-D": from pycopia import autodebug if serial_no is not None: dev = devices.GetDevice(serial_no) else: dev = devices.GetDevice(device_id) io = CLI.ConsoleIO() ui = CLI.UserInterface(io) cmd = AndroidCommands(ui) cmd._setup(dev, "%s-%s> " % ( dev.build.product, device_id, )) parser = CLI.CommandParser( cmd, historyfile=os.path.expandvars("$HOME/.hist_androidsh")) if args: scriptfilename = args[0] text = open(scriptfilename).read() parser.feed(text) else: parser.interact()
def poll(self, argv): """poll Polls this process object.""" sts = self._obj.poll(self._pid) if sts == -errno.EAGAIN: self._print("running.") elif sts == -errno.ENOENT: self._print("Process disappeared!") raise CLI.CommandQuit(self._pid) else: self._print(sts) self._print("Exited.") raise CLI.CommandQuit(self._pid)
def chdir(self, argv): """chdir/cd <container> Make <container> the current container.""" name = argv[1] if name == "..": raise CLI.CommandQuit() item = self._get(name) if isinstance(item, dict): cmd = self.clone(ConfigCommands) cmd._setup(item, "%Ykey%N:{}> ".format(name)) raise CLI.NewCommand(cmd) else: self._print("%s: not a container." % (name,))
def fiddle(self, argv): """fiddle <handle> fiddle with a remote file object. Provide the handle id obtained from 'flist'.""" args, kwargs = CLI.breakout_args(argv[1:], vars(self._obj)) if args: handle = args[0] else: handle = self._obj.flist()[0] finfo = self._obj.get_handle_info(handle) if finfo: cmd = self.clone(FileCommand) cmd._setup(self._obj, handle, "%s> " % (finfo, )) raise CLI.NewCommand(cmd) else: self._print("No such handle on server.")
def _generic_call(self, argv): meth = getattr(self._client, argv[0]) args, kwargs = CLI.breakout_args(argv[1:], vars(self._client)) rv = apply(meth, args, kwargs) if rv: self._print(rv) return rv
def interact(self, argv): """interact <pid> Interact with the raw file-like interface of a process. Provide the pid as supplied from plist.""" args, kwargs = CLI.breakout_args(argv[1:], vars(self._obj)) if args: pid = int(args[0]) else: pid = self._obj.plist()[0] pid = self._obj.poll(pid) if pid: cmd = self.clone(ProcCommand) cmd._setup(self._obj, pid, "pid %s> " % (pid, )) raise CLI.NewCommand(cmd) else: self._print("No such pid on server.")
def win32(self, argv): """win32 <funcname> args... Calls the win32api function named <funcname> with the supplied arguments and return the results.""" funcname = argv[1] args, kwargs = CLI.breakout_args(argv[2:], vars(self._client)) rv = self._client.win32(funcname, *args, **kwargs) return rv
def _get_query(self, argv): mapper = models.class_mapper(self._obj) args, kwargs = _query_args(argv[1:], self._environ) q = _session.query(self._obj) if args: grps, left = divmod(len(args), 3) if grps: for name, op, val in _by_three(args[:grps*3]): col = getattr(self._obj, name) opm = {"=": col.__eq__, ">": col.__gt__, "<": col.__lt__, "match": col.match, "contains": col.contains, "in": col.in_, "like": col.like}.get(op) if opm: if op == "like": val = val.replace("*", "%") val = val.replace(".", "_") if "%" not in val: val = "%" + val + "%" if op == "in": val = val.split(",") q = q.filter(opm(val)) for name in args[grps*3:]: if name.startswith("="): q = q.order_by(name[1:]) if kwargs: for name, value in kwargs.items(): col = getattr(self._obj, name) value = CLI.clieval(value) q = q.filter(col.__eq__(value)) return q
def chdir(self, argv): """chdir/cd <container> Make <container> the current container.""" name = argv[1] if name == "..": raise CLI.CommandQuit() row = _session.query(models.Config).filter(and_( models.Config.name==name, models.Config.container==self._obj)).one() if row.value is NULL: pathname = ".".join([self._obj.name, row.name]) cmd = self.clone(ConfigCommands) cmd._setup(row, "%%YConfig%%N:%s> " % pathname) raise CLI.NewCommand(cmd) else: self._print("%s: not a container." % (name,))
def add(self, argv): """add [--first_name=<firstname> --last_name=<lastname>] <username> Add a new user to the database.""" args, kwargs = CLI.breakout_args(argv[1:], self._environ) username = args[0] try: pwent = passwd.getpwnam(username) except KeyError: pass else: models.create_user(_session, pwent) return grp = _session.query(models.Group).filter(models.Group.name=="testers").one() kwargs["username"] = username kwargs["authservice"] = "local" kwargs.setdefault("is_staff", True) kwargs.setdefault("is_active", True) kwargs.setdefault("is_superuser", False) if "first_name" not in kwargs: kwargs["first_name"] = self._user_input("First Name? ") if "last_name" not in kwargs: kwargs["last_name"] = self._user_input("Last Name? ") user = models.create(models.User, **kwargs) user.groups = [grp] _session.add(user) _session.commit()
def attrib(self, argv): """attrib get|set|update|del|show|possible name [value] Get, set, delete an attribute. You can also list available attributes.""" cmd = argv[1] if cmd.startswith("get"): name = argv[2] v = self._obj.get_attribute(_session, name) self._print(v) elif cmd.startswith("set"): name = argv[2] value = argv[3] try: self._obj.set_attribute(_session, name, value) except IntegrityError as err: _session.rollback() self._ui.error(err) elif cmd.startswith("upd"): name = argv[2] value = argv[3] self._obj.update_attribute(_session, name, value) elif cmd.startswith("del"): name = argv[2] self._obj.del_attribute(_session, name) elif cmd.startswith("show"): for attr in self._obj.attributes: self._print(attr) elif cmd.startswith("pos"): self._print("Possible attributes:") for name, basetype in self._obj.__class__.get_attribute_list(_session): self._print(" %s (%s)" % (name, basetype)) else: raise CLI.CLISyntaxError("Invalid subcommand.")
def reset(self): bdb.Bdb.reset(self) # old style class self.forget() self._parser = None theme = DebuggerTheme("%GDebug%N> ") self._ui = CLI.UserInterface(self._io, env=None, theme=theme) self._ui.register_prompt_expansion("S", self._expansions)
def win32(self, argv): """win32 <funcname> args... Calls the win32api function named <funcname> with the supplied arguments and return the results.""" funcname = argv[1] args, kwargs = CLI.breakout_args(argv[2:], vars(self._obj)) rv = self._obj.win32(funcname, *args, **kwargs) return rv
def get_editor(cli, obj, name): editobj = get_editor_object(obj) if editobj is None: # not registered, try generic defaults if isinstance(obj, dict): cmd = cli.clone(CLI.DictCLI) elif hasattr(obj, "__dict__"): if isinstance(obj, netobjects.PersistentData): cmd = CLI.get_generic_clone(obj, cli, DataEditor) else: cmd = CLI.get_generic_clone(obj, cli, ObjectEditor) else: raise TypeError, "no editor available for %r." % (obj, ) else: cmd = cli.clone(editobj) cmd._setup(obj, name) return cmd
def set(self, argv): """set [-t <type>] <name> <value> Sets the named attribute to a new value. The value will be converted into a likely suspect, but you can specify a type with the -t flag. """ tval = CLI.clieval optlist, longoptdict, args = self.getopt(argv, "t:") for opt, optarg in optlist: if opt == "-t": try: tval = eval(optarg, {}, {}) except: self._ui.error("Bad type. Use a valid Python type name.") return if type(tval) is not type: self._ui.error("Bad type. Use a valid Python type name.") return if len(args) < 2: raise CLI.CLISyntaxError("Need a name and value.") try: value = tval(*args[1:]) except TypeError as terr: self._ui.error(terr) return name = args[0] self._obj[name] = value self._reset_scopes()
def _generic_call(self, argv): meth = getattr(self._obj, argv[0]) args, kwargs = CLI.breakout_args(argv[1:], vars(self._obj)) rv = meth(*args, **kwargs) if rv: self._print(rv) return rv
def get_editor(cli, obj, name): editobj = get_editor_object(obj) if editobj is None: # not registered, try generic defaults if isinstance(obj, dict): cmd = cli.clone(CLI.DictCLI) elif hasattr(obj, "__dict__"): if isinstance(obj, netobjects.PersistentData): cmd = CLI.get_generic_clone(obj, cli, DataEditor) else: cmd = CLI.get_generic_clone(obj, cli, ObjectEditor) else: raise TypeError, "no editor available for %r." % (obj,) else: cmd = cli.clone(editobj) cmd._setup(obj, name) return cmd
def gservice(self, argv): """gservice <name> [<value>] | reset <name> | list Get or set a GService parameter. If name is 'reset' then reset a value to server provided. If name is 'list' then show all current values. Some examples: gservice gtalk_heartbeat_interval_ms 300000 gservice gtalk_max_server_heartbeat_time 2400000 """ argc = len(argv) if argc >= 3: name = argv[1] value = " ".join(argv[2:]) if name == "reset": self._obj.ResetGserviceSetting(value) else: self._obj.OverrideGserviceSetting(name, value) elif argc == 2: name = argv[1] if name == "list": gs = self._obj.GetAllGservicesSettings() for name, value in gs.items(): self._print("%40.40s: %s" % (name, value)) else: self._print(self._obj.GetGservicesSetting(name)) else: raise CLI.CLISyntaxError("Must supply name, or name and value.")
def smtpcli(argv): """smtpcli [-h] [-l <logfilename>] [-s <portname>] [host] [port] Provides an interactive session at a protocol level to an SMTP server. """ bindto = None port = 25 sourcefile = None paged = False logname = None try: optlist, longopts, args = getopt.getopt(argv[1:], "b:hp:s:l:g") except getopt.GetoptError: print(smtpcli.__doc__) return for opt, val in optlist: if opt == "-b": bindto = val if opt == "-l": logname = val elif opt == "-s": sourcefile = val elif opt == "-g": paged = True elif opt == "-h": print(smtpcli.__doc__) return elif opt == "-p": try: port = int(val) except ValueError: print(smtpcli.__doc__) return theme = UI.DefaultTheme(PROMPT) parser = CLI.get_cli(EmailClientCLI, paged=paged, theme=theme) if len(args) > 0: if len(args) > 1: port = int(args[1]) else: port = 25 host = args[0] else: host = "" if logname: parser.commands.logfile(["logfile", logname]) if host: parser.commands.connect(["connect"] + IF(bindto, ["-s", bindto], []) + [host, port]) else: parser.commands._print( "Be sure to run 'connect' before anything else.\n") if sourcefile: try: parser.parse(sourcefile) except CLI.CommandQuit: pass else: parser.interact()
def config(self, argv): """config Enter configuration table edit mode.""" root = get_root(self._obj) cmd = self.clone(ConfigCommands) cmd._setup(root, "%%YConfig%%N:%s> " % (root.name,)) raise CLI.NewCommand(cmd)
def add(self, argv): """add column=value ... Add a new row.""" args, kwargs = CLI.breakout_args(argv[1:], self._environ) inst = self._obj(*args, **kwargs) _session.add(inst) _session.commit()
def query(self, argv): """query Start a query editor.""" q = _session.query(self._obj) cmd = self.clone(QueryCommands) cmd._setup(q, "Query:%s> " % (self._obj.__name__,)) raise CLI.NewCommand(cmd)
def smtpcli(argv): """smtpcli [-h|--help] [-l|--logfile <logfilename>] [-s|--bindto <portname>] [host] [port] Provides an interactive session at a protocol level to an SMTP server. """ bindto = None port = 25 sourcefile = None paged = False logname = None try: optlist, args = getopt.getopt(argv[1:], "b:hp:s:l:g", ["bindto=", "help", "port=", "script=", "logfile="]) except getopt.GetoptError: print smtpcli.__doc__ return for opt, val in optlist: if opt == "-b" or opt == "--bindto": bindto = val if opt == "-l" or opt == "--logfile": logname = val elif opt == "-s" or opt == "--script": sourcefile = val elif opt == "-g": paged = True elif opt == "-h" or opt == "--help": print smtpcli.__doc__ return elif opt == "-p" or opt == "--port": try: port = int(val) except ValueError: print smtpcli.__doc__ return theme = UI.DefaultTheme(PROMPT) parser = CLI.get_cli(EmailClientCLI, paged=paged, theme=theme) if len(args) > 0: if len(args) > 1: port = int(args[1]) else: port = 25 host = args[0] else: host = "" if logname: parser.commands.logfile(["logfile", logname]) if host: parser.commands.connect(["connect"]+IF(bindto, ["-s", bindto], [])+[host, port]) else: parser.commands._print("Be sure to run 'connect' before anything else.\n") if sourcefile: try: parser.parse(sourcefile) except CLI.CommandQuit: pass else: parser.interact()
def __init__(self, syslog, ps1="%Isyslog%N> "): self.syslog = syslog theme = UI.DefaultTheme(ps1) self.parser = CLI.get_cli(SyslogCLI, paged=False, theme=theme, aliases=_CMDALIASES) self.parser.command_setup(syslog, ps1)
def snmpcli(argv): """snmpcli [-h] [-p <port>] [-s <scriptname>] [-m <module>] host community Provides an interactive session to an SNMP agent. """ port = 161 sourcefile = None logfile = None modname = None try: optlist, longopts, args = getopt.getopt(argv[1:], "hl:p:s:m:") except getopt.GetoptError: print(snmpcli.__doc__) return for opt, val in optlist: if opt == "-s": sourcefile = val elif opt == "-l": logfile = val elif opt == "-h": print(snmpcli.__doc__) return elif opt == "-p": try: port = int(val) except ValueError: print(snmpcli.__doc__) return elif opt == "-m": modname = val if not args: print(snmpcli.__doc__) return host = args[0] if len(args) > 1: community = args[1] else: community = "public" if modname: module = __import__(modname, globals(), locals(), ["*"]) manager = module.get_manager(host, community) else: manager = Manager.get_manager(host, community, mibs=[SNMPv2_MIB, IF_MIB]) parser = CLI.get_generic_cli( manager, SNMPManagerCommands, logfile=logfile, historyfile=os.path.expandvars("$HOME/.hist_snmpcli") ) if sourcefile: try: parser.parse(sourcefile) except CLI.CommandQuit: pass else: parser.interact()
def instrumentshell(argv): """pdish [-?rg] Provides an interactive session to the GPIB bus. Options: -?, -h = This help text. -g = used paged output (like 'more'). -d = Enable debugging. """ paged = False try: optlist, longopts, args = getopt.getopt(argv[1:], "?hgd") except getopt.GetoptError: print instrumentshell.__doc__ return for opt, val in optlist: if opt in ("-?", "-h"): print instrumentshell.__doc__ return elif opt == "-g": paged = True elif opt == "-d": from pycopia import autodebug if paged: from pycopia import tty io = tty.PagedIO() else: io = CLI.ConsoleIO() env = measurecore.MeasurementContext() env.evalupdate(longopts) ui = CLI.UserInterface(io, env) conf = core._GetConfig() cmd = TopLevel(ui) cmd._setup(conf, "pdish> ") parser = CLI.CommandParser(cmd, historyfile=os.path.expandvars("$HOME/.hist_pdish")) parser.interact()
def use(self, argv): """use <table> Use the given table. Name is class name of mapped table.""" name = argv[1] t = getattr(models, name) cls = _TABLE_EDITOR_MAP.get(name, TableCommands) cmd = self.clone(cls) cmd._setup(t, cls.get_prompt(t)) raise CLI.NewCommand(cmd)
def imapcli(argv): """imapcli [-h|--help] [host] [port] Provides an interactive session at a protocol level to an IMAP server. """ import getopt port = imaplib.IMAP4_PORT sourcefile = None paged = False try: optlist, args = getopt.getopt(argv[1:], "hp:s:g", ["help", "port", "script="]) except getopt.GetoptError: print imapcli.__doc__ return for opt, val in optlist: if opt == "-s" or opt == "--script": sourcefile = val elif opt == "-h" or opt == "--help": print imapcli.__doc__ return elif opt == "-g": paged = True elif opt == "-p" or opt == "--port": try: port = int(val) except ValueError: print imapcli.__doc__ return theme = UI.DefaultTheme(PROMPT) parser = CLI.get_cli(ImapCLI, paged=paged, theme=theme) if len(args) > 0: if len(args) > 1: port = int(args[1]) host = args[0] else: host = "" if host: parser.commands.connect(["connect", host, port]) else: parser.commands._print("Be sure to run 'connect' before anything else.\n") if sourcefile: try: parser.parse(sourcefile) except CLI.CommandQuit: pass else: parser.interact()
def fiddle(self, argv): """fiddle <handle> fiddle with a remote file object. Provide the handle id obtained from 'flist'.""" args, kwargs = CLI.breakout_args(argv[1:], vars(self._client)) if args: handle = args[0] else: handle = self._client.flist()[0] finfo = self._client.get_handle_info(handle) if finfo: cmd = self.clone(FileCommand) cmd._setup(self._client, handle, "%s> " % (finfo,)) raise NewCommand, cmd # signal parser to use new cmd object else: self._print("No such handle on server.")
def interact(self, argv): """interact <pid> Interact with the raw file-like interface of a process. Provide the pid as supplied from plist.""" args, kwargs = CLI.breakout_args(argv[1:], vars(self._obj)) if args: pid = int(args[0]) else: pid = self._obj.plist()[0] pid = self._obj.poll(pid) if pid: cmd = self.clone(ProcCommand) cmd._setup(self._obj, pid, "pid %s> " % (pid,)) raise CLI.NewCommand, cmd else: self._print("No such pid on server.")
def interact(self, argv): """interact <pid> Interact with the raw file-like interface of a process. Provide the pid as supplied from plist.""" args, kwargs = CLI.breakout_args(argv[1:], vars(self._client)) if args: handle = int(args[0]) else: handle = self._client.plist()[0] pid = self._client.poll(handle) if pid: cmd = self.clone(ProcCommand) cmd._setup(self._client, pid, "pid %s> " % (pid,)) raise NewCommand, cmd # signal parser to use new cmd object else: self._print("No such pid on server.")
def imapcli(argv): """imapcli [-h|--help] [-S] [host] [port] Provides an interactive session at a protocol level to an IMAP server. If the "-S" argument is provided, will connect using SSL. """ from pycopia import getopt port = imaplib.IMAP4_PORT sourcefile = None paged = False ssl = True try: optlist, longopts, args = getopt.getopt(argv[1:], "hp:s:gS") except getopt.GetoptError: print(imapcli.__doc__) return for opt, val in optlist: if opt == "-s": sourcefile = val elif opt == "-h": print(imapcli.__doc__) return elif opt == "-g": paged = True elif opt == "-S": ssl = True elif opt == "-p": try: port = int(val) except ValueError: print(imapcli.__doc__) return theme = UI.DefaultTheme(PROMPT) parser = CLI.get_cli(ImapCLI, paged=paged, theme=theme) if len(args) > 0: parser.commands.connect(["connect"] + ((ssl == True) and ["-S"] or []) + args) else: parser.commands._print("Be sure to run 'connect' before anything else.\n") if sourcefile: try: parser.parse(sourcefile) except CLI.CommandQuit: pass else: parser.interact()
def remotecli(argv): """remotecli [-h|-?] [-g] [-s <script>] Provides an interactive session to a remote Client server object. Most of the methods in the module remote.Server may be called this way. """ from pycopia import getopt from pycopia.storage import Storage paged = False script = None try: optlist, longopts, args = getopt.getopt(argv[1:], "s:?hg") except getopt.GetoptError: print remotecli.__doc__ return for opt, val in optlist: if opt == "-?" or opt == "-h": print remotecli.__doc__ return elif opt == "-g": paged = True elif opt == "-s": script = val # do runtime setup cf = Storage.get_config(initdict=longopts) #testrunner.connect_user(cf) #testrunner.runtime_config(cf) # fake test module attributes cf.reportfile = "remotecli" cf.logbasename = "remotecli.log" cf.arguments = argv theme = UI.DefaultTheme(PROMPT) history=os.path.expandvars("$HOME/.hist_clientcli") parser = CLI.get_cli(TopLevelCLI, env=cf, paged=paged, theme=theme, historyfile=history) if script: try: parser.parse(script) except KeyboardInterrupt: pass else: parser.interact()
def controller_cli(argv): """controller_cli [-s <script>] [-g] <device> Interact with a DUT configurator. If no device is specified use the testbed DUT. Options: -g Use paged output (like 'more') -s <script> Run a CLI script from the given file instead of entering interactive mode. """ import os from pycopia import getopt from pycopia.QA import controller from pycopia.QA import config paged = False script = None try: optlist, longopts, args = getopt.getopt(argv[1:], "s:?g") except GetoptError: print((controller_cli.__doc__)) return for opt, val in optlist: if opt == "-?": print((controller_cli.__doc__)) return elif opt == "-g": paged = True elif opt == "-s": script = val if not args: print((controller_cli.__doc__)) return if paged: from pycopia import tty io = tty.PagedIO() else: io = IO.ConsoleIO() # do runtime setup cf = config.get_config(initdict=longopts) cf.reportfile = "controller_cli" cf.logbasename = "controller_cli.log" cf.arguments = argv dev = cf.devices[args[0]] cont = controller.get_configurator(dev, logfile=cf.logfile) # construct the CLI theme = ConfiguratorTheme("Controller> ") ui = UI.UserInterface(io, cf, theme) cmd = CLI.get_generic_cmd(cont, ui, ConfiguratorShellCLI) cmd.device = dev # stash actual device for future reference parser = CLI.CommandParser(cmd, historyfile=os.path.expandvars("$HOME/.hist_controller")) if script: try: parser.parse(script) except KeyboardInterrupt: pass else: parser.interact() try: cont.close() except: pass
def test_build_CLI(self): cli = CLI.get_cli(TestCommands) #print(dir(cli)) cli.interact()