X-Git-Url: http://dolda2000.com/gitweb/?a=blobdiff_plain;f=pdm%2Fsrv.py;h=b2c131aef72874965ab81c16169e2b56399a9f7f;hb=9e3c83b113c519d0073457ae0cfe80291bcda7e9;hp=abf7d89ef76517f4458cf99c6109c4b7468b0275;hpb=578de289fa6936c1a6b21cc962b5a64d5a3a0e52;p=pdm.git diff --git a/pdm/srv.py b/pdm/srv.py index abf7d89..b2c131a 100644 --- a/pdm/srv.py +++ b/pdm/srv.py @@ -40,34 +40,35 @@ class repl(object): self.mod = types.ModuleType("repl") self.mod.echo = self.echo self.printer = pprint.PrettyPrinter(indent = 4, depth = 6) - cl.send(b"+REPL\n") + cl.send("+REPL\n") def sendlines(self, text): for line in text.split("\n"): - self.cl.send(b" " + line.encode("utf-8") + b"\n") + self.cl.send(" " + line + "\n") def echo(self, ob): self.sendlines(self.printer.pformat(ob)) def command(self, cmd): - cmd = cmd.decode("utf-8") try: try: ccode = compile(cmd, "PDM Input", "eval") except SyntaxError: ccode = compile(cmd, "PDM Input", "exec") - exec(ccode, self.mod.__dict__) - self.cl.send(b"+OK\n") + exec ccode in self.mod.__dict__ + self.cl.send("+OK\n") else: self.echo(eval(ccode, self.mod.__dict__)) - self.cl.send(b"+OK\n") + self.cl.send("+OK\n") except: - for line in traceback.format_exception(*sys.exc_info()): - self.cl.send(b" " + line.encode("utf-8")) - self.cl.send(b"+EXC\n") + lines = ("".join(traceback.format_exception(*sys.exc_info()))).split("\n") + while len(lines) > 0 and lines[-1] == "": lines = lines[:-1] + for line in lines: + self.cl.send(" " + line + "\n") + self.cl.send("+EXC\n") def handle(self, buf): - p = buf.find(b"\n\n") + p = buf.find("\n\n") if p < 0: return buf cmd = buf[:p + 1] @@ -170,13 +171,13 @@ class perf(object): def __init__(self, cl): self.cl = cl self.odtab = {} - cl.send(b"+PERF1\n") + cl.send("+PERF1\n") self.buf = "" self.lock = threading.Lock() self.subscribed = {} def closed(self): - for id, recv in self.subscribed.items(): + for id, recv in self.subscribed.iteritems(): ob = self.odtab[id] if ob is None: continue ob, protos = ob @@ -198,7 +199,7 @@ class perf(object): raise ValueError("Object does not support PDM introspection") try: proto = ob.pdm_protocols() - except Exception as exc: + except Exception, exc: raise ValueError("PDM introspection failed", exc) self.odtab[id] = ob, proto return proto @@ -215,7 +216,7 @@ class perf(object): return try: proto = self.bindob(id, ob) - except Exception as exc: + except Exception, exc: self.send("-", exc) return self.send("+", proto) @@ -237,12 +238,12 @@ class perf(object): return try: ob = src.lookup(obnm) - except KeyError as exc: + except KeyError, exc: self.send("-", exc) return try: proto = self.bindob(tgtid, ob) - except Exception as exc: + except Exception, exc: self.send("-", exc) return self.send("+", proto) @@ -272,7 +273,7 @@ class perf(object): return try: ret = ob.readattr() - except Exception as exc: + except Exception, exc: self.send("-", Exception("Could not read attribute")) return self.send("+", ret) @@ -289,7 +290,7 @@ class perf(object): return try: self.send("+", ob.invoke(method, *args, **kwargs)) - except Exception as exc: + except Exception, exc: self.send("-", exc) def event(self, id, ob, ev): @@ -355,7 +356,7 @@ protocols["perf"] = perf class client(threading.Thread): def __init__(self, sk): - super().__init__(name = "Management client") + super(client, self).__init__(name = "Management client") self.setDaemon(True) self.sk = sk self.handler = self @@ -364,10 +365,6 @@ class client(threading.Thread): return self.sk.send(data) def choose(self, proto): - try: - proto = proto.decode("ascii") - except UnicodeError: - proto = None if proto in protocols: self.handler = protocols[proto](self) else: @@ -375,7 +372,7 @@ class client(threading.Thread): raise Exception() def handle(self, buf): - p = buf.find(b"\n") + p = buf.find("\n") if p >= 0: proto = buf[:p] buf = buf[p + 1:] @@ -384,24 +381,24 @@ class client(threading.Thread): def run(self): try: - buf = b"" - self.send(b"+PDM1\n") + buf = "" + self.send("+PDM1\n") while True: ret = self.sk.recv(1024) - if ret == b"": + if ret == "": return buf += ret while True: try: nbuf = self.handler.handle(buf) except: - #for line in traceback.format_exception(*sys.exc_info()): - # print(line) return if nbuf == buf: break buf = nbuf finally: + #for line in traceback.format_exception(*sys.exc_info()): + # print line try: self.sk.close() finally: @@ -418,7 +415,7 @@ class listener(threading.Thread): tcplistener. """ def __init__(self): - super().__init__(name = "Management listener") + super(listener, self).__init__(name = "Management listener") self.setDaemon(True) def listen(self, sk): @@ -446,14 +443,14 @@ class listener(threading.Thread): class unixlistener(listener): """Unix socket listener""" - def __init__(self, name, mode = 0o600, group = None): + def __init__(self, name, mode = 0600, group = None): """Create a listener that will bind to the Unix socket named by `name'. The socket will not actually be bound until the listener is started. The socket will be chmodded to `mode', and if `group' is given, the named group will be set as the owner of the socket. """ - super().__init__() + super(unixlistener, self).__init__() self.name = name self.mode = mode self.group = group @@ -483,7 +480,7 @@ class tcplistener(listener): the given local interface. The socket will not actually be bound until the listener is started. """ - super().__init__() + super(tcplistener, self).__init__() self.port = port self.bindaddr = bindaddr @@ -521,7 +518,7 @@ def listen(spec): last = spec if "/" in first: parts = spec.split(":") - mode = 0o600 + mode = 0600 group = None if len(parts) > 1: mode = int(parts[1], 8)