diff options
author | Andy McCurdy <andy@andymccurdy.com> | 2014-05-12 17:49:52 -0700 |
---|---|---|
committer | Andy McCurdy <andy@andymccurdy.com> | 2014-05-12 17:49:52 -0700 |
commit | de0004b03a04ea2884a06a074a3d382ea8b08a57 (patch) | |
tree | 96f8c7c0cbfa0ae9bd444d06ad4d4c5bb2a5df91 /redis/connection.py | |
parent | 59b0ce521f93392e79f3a6b316a89015362641d4 (diff) | |
parent | 6f760cc5d14915496dc0fd8becb57eb052c396e8 (diff) | |
download | redis-py-de0004b03a04ea2884a06a074a3d382ea8b08a57.tar.gz |
Merge branch 'pr/446'
Conflicts:
redis/client.py
redis/connection.py
Diffstat (limited to 'redis/connection.py')
-rwxr-xr-x[-rw-r--r--] | redis/connection.py | 34 |
1 files changed, 33 insertions, 1 deletions
diff --git a/redis/connection.py b/redis/connection.py index 2272133..09a40b5 100644..100755 --- a/redis/connection.py +++ b/redis/connection.py @@ -8,6 +8,14 @@ import sys import threading import warnings +try: + import ssl + ssl_available = True + ssl_cert_reqs = ssl.CERT_NONE +except ImportError: + ssl_available = False + ssl_cert_reqs = 0 + from redis._compat import (b, xrange, imap, byte_to_chr, unicode, bytes, long, BytesIO, nativestr, basestring, iteritems, LifoQueue, Empty, Full, urlparse, parse_qs) @@ -427,7 +435,7 @@ class Connection(object): return "Error connecting to %s:%s. %s." % \ (self.host, self.port, exception.args[0]) else: - return "Error %s connecting %s:%s. %s." % \ + return "Error %s connecting to %s:%s. %s." % \ (exception.args[0], self.host, self.port, exception.args[1]) def on_connect(self): @@ -550,6 +558,30 @@ class Connection(object): return output +class SSLConnection(Connection): + description_format = "SSLConnection<host=%(host)s,port=%(port)s,db=%(db)s>" + + def __init__(self, keyfile=None, certfile=None, cert_reqs=ssl_cert_reqs, + ca_certs=None, **kwargs): + if not ssl_available: + raise RedisError("") + super(SSLConnection, self).__init__(**kwargs) + self.keyfile = keyfile + self.certfile = certfile + self.cert_reqs = cert_reqs + self.ca_certs = ca_certs + + def _connect(self): + "Wrap the socket with SSL support" + sock = super(SSLConnection, self)._connect() + sock = ssl.wrap_socket(sock, + cert_reqs=self.cert_reqs, + keyfile=self.keyfile, + certfile=self.certfile, + ca_certs=self.ca_certs) + return sock + + class UnixDomainSocketConnection(Connection): description_format = "UnixDomainSocketConnection<path=%(path)s,db=%(db)s>" |