summaryrefslogtreecommitdiff
path: root/jsonrpclib/jsonrpc.py
diff options
context:
space:
mode:
Diffstat (limited to 'jsonrpclib/jsonrpc.py')
-rw-r--r--jsonrpclib/jsonrpc.py45
1 files changed, 32 insertions, 13 deletions
diff --git a/jsonrpclib/jsonrpc.py b/jsonrpclib/jsonrpc.py
index ae5c75f..0655e38 100644
--- a/jsonrpclib/jsonrpc.py
+++ b/jsonrpclib/jsonrpc.py
@@ -81,6 +81,12 @@ except ImportError:
IDCHARS = string.ascii_lowercase+string.digits
+class UnixSocketMissing(Exception):
+ """
+ Just a properly named Exception if Unix Sockets usage is
+ attempted on a platform that doesn't support them (Windows)
+ """
+ pass
#JSON Abstractions
@@ -147,22 +153,32 @@ class Transport(TransportMixIn, XMLTransport):
class SafeTransport(TransportMixIn, XMLSafeTransport):
pass
-
from httplib import HTTP, HTTPConnection
-from socket import socket, AF_UNIX, SOCK_STREAM
-class UnixHTTPConnection(HTTPConnection):
- def connect(self):
- self.sock = socket(AF_UNIX, SOCK_STREAM)
- self.sock.connect(self.host)
+from socket import socket
+
+USE_UNIX_SOCKETS = False
+
+try:
+ from socket import AF_UNIX, SOCK_STREAM
+ USE_UNIX_SOCKETS = True
+except ImportError:
+ pass
+
+if (USE_UNIX_SOCKETS):
+
+ class UnixHTTPConnection(HTTPConnection):
+ def connect(self):
+ self.sock = socket(AF_UNIX, SOCK_STREAM)
+ self.sock.connect(self.host)
-class UnixHTTP(HTTP):
- _connection_class = UnixHTTPConnection
+ class UnixHTTP(HTTP):
+ _connection_class = UnixHTTPConnection
-class UnixTransport(TransportMixIn, XMLTransport):
- def make_connection(self, host):
- import httplib
- host, extra_headers, x509 = self.get_host_info(host)
- return UnixHTTP(host)
+ class UnixTransport(TransportMixIn, XMLTransport):
+ def make_connection(self, host):
+ import httplib
+ host, extra_headers, x509 = self.get_host_info(host)
+ return UnixHTTP(host)
class ServerProxy(XMLServerProxy):
@@ -181,6 +197,9 @@ class ServerProxy(XMLServerProxy):
if schema not in ('http', 'https', 'unix'):
raise IOError('Unsupported JSON-RPC protocol.')
if schema == 'unix':
+ if not USE_UNIX_SOCKETS:
+ # Don't like the "generic" Exception...
+ raise UnixSocketMissing("Unix sockets not available.")
self.__host = uri
self.__handler = '/'
else: