Merge branch 'master' into python3
authorFredrik Tolf <fredrik@dolda2000.com>
Sat, 19 Jan 2013 00:35:43 +0000 (01:35 +0100)
committerFredrik Tolf <fredrik@dolda2000.com>
Sat, 19 Jan 2013 00:40:55 +0000 (01:40 +0100)
Conflicts:
pdm/srv.py

1  2 
pdm/srv.py

diff --combined pdm/srv.py
@@@ -40,34 -40,35 +40,36 @@@ class repl(object)
          self.mod = types.ModuleType("repl")
          self.mod.echo = self.echo
          self.printer = pprint.PrettyPrinter(indent = 4, depth = 6)
 -        cl.send("+REPL\n")
 +        cl.send(b"+REPL\n")
  
      def sendlines(self, text):
          for line in text.split("\n"):
 -            self.cl.send(" " + line + "\n")
 +            self.cl.send(b" " + line.encode("utf-8") + b"\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 in self.mod.__dict__
 -                self.cl.send("+OK\n")
 +                exec(ccode, self.mod.__dict__)
 +                self.cl.send(b"+OK\n")
              else:
                  self.echo(eval(ccode, self.mod.__dict__))
 -                self.cl.send("+OK\n")
 +                self.cl.send(b"+OK\n")
          except:
-             for line in traceback.format_exception(*sys.exc_info()):
-                 self.cl.send(b" " + line.encode("utf-8"))
+             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")
++                self.cl.send(b" " + line.encode("utf-8") + b"\n")
 +            self.cl.send(b"+EXC\n")
  
      def handle(self, buf):
 -        p = buf.find("\n\n")
 +        p = buf.find(b"\n\n")
          if p < 0:
              return buf
          cmd = buf[:p + 1]
@@@ -170,13 -171,13 +172,13 @@@ class perf(object)
      def __init__(self, cl):
          self.cl = cl
          self.odtab = {}
 -        cl.send("+PERF1\n")
 +        cl.send(b"+PERF1\n")
          self.buf = ""
          self.lock = threading.Lock()
          self.subscribed = {}
  
      def closed(self):
 -        for id, recv in self.subscribed.iteritems():
 +        for id, recv in self.subscribed.items():
              ob = self.odtab[id]
              if ob is None: continue
              ob, protos = ob
              raise ValueError("Object does not support PDM introspection")
          try:
              proto = ob.pdm_protocols()
 -        except Exception, exc:
 +        except Exception as exc:
              raise ValueError("PDM introspection failed", exc)
          self.odtab[id] = ob, proto
          return proto
              return
          try:
              proto = self.bindob(id, ob)
 -        except Exception, exc:
 +        except Exception as exc:
              self.send("-", exc)
              return
          self.send("+", proto)
              return
          try:
              ob = src.lookup(obnm)
 -        except KeyError, exc:
 +        except KeyError as exc:
              self.send("-", exc)
              return
          try:
              proto = self.bindob(tgtid, ob)
 -        except Exception, exc:
 +        except Exception as exc:
              self.send("-", exc)
              return
          self.send("+", proto)
              return
          try:
              ret = ob.readattr()
 -        except Exception, exc:
 +        except Exception as exc:
              self.send("-", Exception("Could not read attribute"))
              return
          self.send("+", ret)
              return
          try:
              self.send("+", ob.invoke(method, *args, **kwargs))
 -        except Exception, exc:
 +        except Exception as exc:
              self.send("-", exc)
  
      def event(self, id, ob, ev):
@@@ -355,7 -356,7 +357,7 @@@ protocols["perf"] = per
  
  class client(threading.Thread):
      def __init__(self, sk):
 -        super(client, self).__init__(name = "Management client")
 +        super().__init__(name = "Management client")
          self.setDaemon(True)
          self.sk = sk
          self.handler = self
          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:
              raise Exception()
  
      def handle(self, buf):
 -        p = buf.find("\n")
 +        p = buf.find(b"\n")
          if p >= 0:
              proto = buf[:p]
              buf = buf[p + 1:]
  
      def run(self):
          try:
 -            buf = ""
 -            self.send("+PDM1\n")
 +            buf = b""
 +            self.send(b"+PDM1\n")
              while True:
                  ret = self.sk.recv(1024)
 -                if ret == "":
 +                if ret == b"":
                      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 +420,7 @@@ class listener(threading.Thread)
      tcplistener.
      """
      def __init__(self):
 -        super(listener, self).__init__(name = "Management listener")
 +        super().__init__(name = "Management listener")
          self.setDaemon(True)
  
      def listen(self, sk):
  
  class unixlistener(listener):
      """Unix socket listener"""
 -    def __init__(self, name, mode = 0600, group = None):
 +    def __init__(self, name, mode = 0o600, 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(unixlistener, self).__init__()
 +        super().__init__()
          self.name = name
          self.mode = mode
          self.group = group
@@@ -483,7 -480,7 +485,7 @@@ class tcplistener(listener)
          the given local interface. The socket will not actually be
          bound until the listener is started.
          """
 -        super(tcplistener, self).__init__()
 +        super().__init__()
          self.port = port
          self.bindaddr = bindaddr
  
@@@ -521,7 -518,7 +523,7 @@@ def listen(spec)
          last = spec
      if "/" in first:
          parts = spec.split(":")
 -        mode = 0600
 +        mode = 0o600
          group = None
          if len(parts) > 1:
              mode = int(parts[1], 8)