Throw more informative error classes from perf.
[pdm.git] / pdm / cli.py
index 667e2ed..df04883 100644 (file)
@@ -71,13 +71,19 @@ class client(object):
         if proto is not None:
             self.select(proto)
 
+    @property
+    def closed(self):
+        return self.sk is None
+
     def close(self):
         """Close this connection"""
-        self.sk.close()
+        if self.sk is not None:
+            self.sk.close()
+            self.sk = None
 
     def fileno(self):
         """Return the file descriptor of the underlying socket."""
-        return self.sk.fileno()
+        return self.sk.fileno() if self.sk else None
 
     def readline(self):
         """Read a single NL-terminated line and return it."""
@@ -197,7 +203,8 @@ class perfproxy(object):
 
     def close(self):
         if self.id is not None:
-            self.cl.run("unbind", self.id)
+            if not self.cl.closed:
+                self.cl.run("unbind", self.id)
             del self.cl.proxies[self.id]
             self.id = None
 
@@ -324,7 +331,7 @@ class perfclient(client):
         used by the server process.
 
         The proxy objects returned by this function are cached and the
-        same object are returned the next time the same name is
+        same object is returned the next time the same name is
         requested, which means that they are kept live until the
         client connection is closed.
         """