示例#1
0
文件: cli.py 项目: tijmengit/pycopia
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()
示例#2
0
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()
示例#3
0
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()
示例#4
0
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()
示例#5
0
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()
示例#6
0
文件: cli.py 项目: wildone/pycopia
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()
示例#7
0
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()
示例#8
0
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()
示例#9
0
 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)
示例#10
0
 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,))
示例#11
0
 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.")
示例#12
0
 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
示例#13
0
 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.")
示例#14
0
 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
示例#15
0
文件: cli.py 项目: tijmengit/pycopia
 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
示例#16
0
文件: cli.py 项目: tijmengit/pycopia
 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,))
示例#17
0
文件: cli.py 项目: tijmengit/pycopia
 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()
示例#18
0
文件: cli.py 项目: tijmengit/pycopia
 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.")
示例#19
0
 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)
示例#20
0
 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
示例#21
0
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
示例#22
0
 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()
示例#23
0
 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
示例#24
0
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
示例#25
0
   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.")
示例#26
0
 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
示例#27
0
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()
示例#28
0
 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
示例#29
0
文件: cli.py 项目: tijmengit/pycopia
 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)
示例#30
0
文件: cli.py 项目: tijmengit/pycopia
 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()
示例#31
0
文件: cli.py 项目: tijmengit/pycopia
 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)
示例#32
0
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()
示例#33
0
 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)
示例#34
0
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()
示例#35
0
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()
示例#36
0
文件: cli.py 项目: tijmengit/pycopia
 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)
示例#37
0
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()
示例#38
0
 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.")
示例#39
0
 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.")
示例#40
0
 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.")
示例#41
0
文件: imapCLI.py 项目: kdart/pycopia3
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()
示例#42
0
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()
示例#43
0
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
示例#44
0
文件: test.py 项目: kdart/pycopia3
 def test_build_CLI(self):
     cli = CLI.get_cli(TestCommands)
     #print(dir(cli))
     cli.interact()
示例#45
0
 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)