summaryrefslogtreecommitdiff
path: root/redis/client.py
diff options
context:
space:
mode:
authorAndy McCurdy <andy@andymccurdy.com>2010-03-12 11:32:21 -0800
committerAndy McCurdy <andy@andymccurdy.com>2010-03-12 11:32:21 -0800
commit56f0ffb88b716287606e08f8ffd77e5f586a9b44 (patch)
tree8e6989f050259069c894fc1a43951ad6815c1a87 /redis/client.py
parentab3061a64cc9ec1cc0ff135005ee478038077434 (diff)
downloadredis-py-56f0ffb88b716287606e08f8ffd77e5f586a9b44.tar.gz
Flushed out the connection manager object a bit more.
Diffstat (limited to 'redis/client.py')
-rw-r--r--redis/client.py30
1 files changed, 22 insertions, 8 deletions
diff --git a/redis/client.py b/redis/client.py
index ea4a6e5..211c0cd 100644
--- a/redis/client.py
+++ b/redis/client.py
@@ -6,7 +6,27 @@ import warnings
from redis.exceptions import ConnectionError, ResponseError, InvalidResponse
from redis.exceptions import RedisError, AuthenticationError
-_connection_manager = threading.local()
+class ConnectionManager(threading.local):
+ "Manages a list of connections on the local thread"
+ def __init__(self):
+ self.connections = {}
+
+ def make_connection_key(self, host, port, db):
+ "Create a unique key for the specified host, port and db"
+ return '%s:%s:%s' % (host, port, db)
+
+ def get_connection(self, host, port, db, password):
+ "Return a specific connection for the specified host, port and db"
+ key = self.make_connection_key(host, port, db)
+ if key not in self.connections:
+ self.connections[key] = Connection(host, port, db, password)
+ return self.connections[key]
+
+ def get_all_connections(self):
+ "Return a list of all connection objects the manager knows about"
+ return self.connections.values()
+
+connection_manager = ConnectionManager()
class Connection(object):
"Manages TCP communication to and from a Redis server"
@@ -327,13 +347,7 @@ class Redis(threading.local):
#### CONNECTION HANDLING ####
def get_connection(self, host, port, db, password):
"Returns a connection object"
- key = '%s:%s:%s' % (host, port, db)
- if not hasattr(_connection_manager, key):
- setattr(
- _connection_manager,
- key,
- Connection(host, port, db, password))
- conn = getattr(_connection_manager, key)
+ conn = connection_manager.get_connection(host, port, db, password)
# if for whatever reason the connection gets a bad password, make
# sure a subsequent attempt with the right password makes its way
# to the connection