Merge branch 'master' into python3
authorFredrik Tolf <fredrik@dolda2000.com>
Sun, 15 Jan 2012 07:06:54 +0000 (08:06 +0100)
committerFredrik Tolf <fredrik@dolda2000.com>
Sun, 15 Jan 2012 07:06:54 +0000 (08:06 +0100)
1  2 
pdm/cli.py

diff --combined pdm/cli.py
@@@ -19,16 -19,21 +19,21 @@@ def resolve(spec)
          return spec
      sk = None
      try:
-         if "/" in spec:
+         if ":" in spec:
+             p = spec.rindex(":")
+             first, second = spec[:p], spec[p + 1:]
+             if "/" in second:
+                 import sshsock
+                 sk = sshsock.sshsocket(first, second)
+             else:
+                 sk = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+                 sk.connect((first, second))
+         elif "/" in spec:
              sk = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
              sk.connect(spec)
          elif spec.isdigit():
              sk = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
              sk.connect(("localhost", int(spec)))
-         elif ":" in spec:
-             sk = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
-             p = spec.rindex(":")
-             sk.connect((spec[:p], int(spec[p + 1:])))
          else:
              raise Exception("Unknown target specification %r" % spec)
          rv = sk
@@@ -59,9 -64,9 +64,9 @@@ class client(object)
          the select() method).
          """
          self.sk = resolve(sk)
 -        self.buf = ""
 +        self.buf = b""
          line = self.readline()
 -        if line != "+PDM1":
 +        if line != b"+PDM1":
              raise protoerr("Illegal protocol signature")
          if proto is not None:
              self.select(proto)
      def readline(self):
          """Read a single NL-terminated line and return it."""
          while True:
 -            p = self.buf.find("\n")
 +            p = self.buf.find(b"\n")
              if p >= 0:
                  ret = self.buf[:p]
                  self.buf = self.buf[p + 1:]
                  return ret
              ret = self.sk.recv(1024)
 -            if ret == "":
 +            if ret == b"":
                  return None
              self.buf += ret
  
      def select(self, proto):
          """Negotiate the given subprotocol with the server"""
 -        if "\n" in proto:
 +        if isinstance(proto, str):
 +            proto = proto.encode("ascii")
 +        if b"\n" in proto:
              raise Exception("Illegal protocol specified: %r" % proto)
 -        self.sk.send(proto + "\n")
 +        self.sk.send(proto + b"\n")
          rep = self.readline()
 -        if len(rep) < 1 or rep[0] != "+":
 +        if len(rep) < 1 or rep[0] != b"+"[0]:
              raise protoerr("Error reply when selecting protocol %s: %s" % (proto, rep[1:]))
  
      def __enter__(self):
@@@ -113,7 -116,7 +118,7 @@@ class replclient(client)
      """
      def __init__(self, sk):
          """Create a connected client as documented in the `client' class."""
 -        super(replclient, self).__init__(sk, "repl")
 +        super().__init__(sk, "repl")
  
      def run(self, code):
          """Run a single block of Python code on the server. Returns
              code = ncode
          while len(code) > 0 and code[-1] == "\n":
              code = code[:-1]
 -        self.sk.send(code + "\n\n")
 -        buf = ""
 +        self.sk.send((code + "\n\n").encode("utf-8"))
 +        buf = b""
          while True:
              ln = self.readline()
 -            if ln[0] == " ":
 -                buf += ln[1:] + "\n"
 -            elif ln[0] == "+":
 -                return buf
 -            elif ln[0] == "-":
 -                raise protoerr("Error reply: %s" % ln[1:])
 +            if ln[0] == b" "[0]:
 +                buf += ln[1:] + b"\n"
 +            elif ln[0] == b"+"[0]:
 +                return buf.decode("utf-8")
 +            elif ln[0] == b"-"[0]:
 +                raise protoerr("Error reply: %s" % ln[1:].decode("utf-8"))
              else:
                  raise protoerr("Illegal reply: %s" % ln)
  
@@@ -225,7 -228,7 +230,7 @@@ class perfclient(client)
      """
      def __init__(self, sk):
          """Create a connected client as documented in the `client' class."""
 -        super(perfclient, self).__init__(sk, "perf")
 +        super().__init__(sk, "perf")
          self.nextid = 0
          self.lock = threading.Lock()
          self.proxies = {}
          self.sk.send(buf)
  
      def recvb(self, num):
 -        buf = ""
 +        buf = b""
          while len(buf) < num:
              data = self.sk.recv(num - len(buf))
 -            if data == "":
 +            if data == b"":
                  raise EOFError()
              buf += data
          return buf