summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndy McCurdy <andy@andymccurdy.com>2014-05-13 10:30:26 -0700
committerAndy McCurdy <andy@andymccurdy.com>2014-05-13 10:30:26 -0700
commitde7d28493cbb9cd2ed731116712aafcfe1c93c63 (patch)
tree3009cca44cfb4d3f684d8354ca3576dd6cd6bdb7
parent09e5819d45860a272c83ea59c8e246fdc1a5be49 (diff)
downloadredis-py-de7d28493cbb9cd2ed731116712aafcfe1c93c63.tar.gz
added the ablity to pass ssl options to client classes. #446
-rwxr-xr-xredis/client.py16
-rwxr-xr-xredis/connection.py10
2 files changed, 20 insertions, 6 deletions
diff --git a/redis/client.py b/redis/client.py
index 59bdf28..bb63435 100755
--- a/redis/client.py
+++ b/redis/client.py
@@ -7,7 +7,8 @@ import threading
import time as mod_time
from redis._compat import (b, basestring, bytes, imap, iteritems, iterkeys,
itervalues, izip, long, nativestr, unicode)
-from redis.connection import ConnectionPool, UnixDomainSocketConnection, Token
+from redis.connection import (ConnectionPool, UnixDomainSocketConnection,
+ SSLConnection, Token)
from redis.exceptions import (
ConnectionError,
DataError,
@@ -389,7 +390,9 @@ class StrictRedis(object):
db=0, password=None, socket_timeout=None,
connection_pool=None, charset='utf-8',
errors='strict', decode_responses=False,
- unix_socket_path=None):
+ unix_socket_path=None,
+ ssl=False, ssl_keyfile=None, ssl_certfile=None,
+ ssl_cert_reqs=None, ssl_ca_certs=None):
if not connection_pool:
kwargs = {
'db': db,
@@ -410,6 +413,15 @@ class StrictRedis(object):
'host': host,
'port': port
})
+
+ if ssl:
+ kwargs.update({
+ 'connection_class': SSLConnection,
+ 'keyfile': ssl_keyfile,
+ 'certfile': ssl_certfile,
+ 'cert_reqs': ssl_cert_reqs,
+ 'ca_certs': ssl_ca_certs,
+ })
connection_pool = ConnectionPool(**kwargs)
self.connection_pool = connection_pool
diff --git a/redis/connection.py b/redis/connection.py
index 7b49216..a826602 100755
--- a/redis/connection.py
+++ b/redis/connection.py
@@ -11,10 +11,8 @@ 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,
@@ -561,13 +559,17 @@ class Connection(object):
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,
+ def __init__(self, keyfile=None, certfile=None, cert_reqs=None,
ca_certs=None, **kwargs):
if not ssl_available:
- raise RedisError("")
+ raise RedisError("Python wasn't built with SSL support")
+
super(SSLConnection, self).__init__(**kwargs)
+
self.keyfile = keyfile
self.certfile = certfile
+ if cert_reqs is None:
+ cert_reqs = ssl.CERT_NONE
self.cert_reqs = cert_reqs
self.ca_certs = ca_certs