summaryrefslogtreecommitdiff
path: root/redis/client.py
diff options
context:
space:
mode:
authorAndy McCurdy <andy@andymccurdy.com>2010-03-26 15:02:11 -0700
committerAndy McCurdy <andy@andymccurdy.com>2010-03-26 15:02:11 -0700
commitc148ede374784c9220ebc992676667254c443e75 (patch)
tree03d29c3bab5c07590aad92fe70ca0900e510a713 /redis/client.py
parent97ed01d9ac6fe39a53dd9414085f5aa0e44f6041 (diff)
downloadredis-py-c148ede374784c9220ebc992676667254c443e75.tar.gz
* fix for #21, make only the "db" argument of select() required. If host and port aren't specified, the host/port options on the existing connection are used.
* added HINCRBY support
Diffstat (limited to 'redis/client.py')
-rw-r--r--redis/client.py27
1 files changed, 23 insertions, 4 deletions
diff --git a/redis/client.py b/redis/client.py
index f3a8c67..b75dd7f 100644
--- a/redis/client.py
+++ b/redis/client.py
@@ -224,7 +224,8 @@ class Redis(threading.local):
charset='utf-8', errors='strict'):
self.encoding = charset
self.errors = errors
- self.select(host, port, db, password, socket_timeout)
+ self.connection = None
+ self.select(db, host, port, password, socket_timeout)
#### Legacty accessors of connection information ####
def _get_host(self):
@@ -375,14 +376,28 @@ class Redis(threading.local):
raise AuthenticationError("Invalid Password")
self.format_inline('SELECT', self.connection.db)
- def select(self, host, port, db, password=None, socket_timeout=None):
+ def select(self, db, host=None, port=None, password=None,
+ socket_timeout=None):
"""
- Switch to a different database on the current host/port
+ Switch to a different Redis connection.
+
+ If the host and port aren't provided and there's an existing
+ connection, use the existing connection's host and port instead.
Note this method actually replaces the underlying connection object
prior to issuing the SELECT command. This makes sure we protect
the thread-safe connections
"""
+ if host is None:
+ if self.connection is None:
+ raise RedisError("A valid hostname or IP address "
+ "must be specified")
+ host = self.connection.host
+ if port is None:
+ if self.connection is None:
+ raise RedisError("A valid port must be specified")
+ port = self.connection.port
+
self.connection = self.get_connection(
host, port, db, password, socket_timeout)
@@ -939,6 +954,10 @@ class Redis(threading.local):
"Return a Python dict of the hash's name/value pairs"
return self.format_inline('HGETALL', name)
+ def hincrby(self, name, key, amount=1):
+ "Increment the value of ``key`` in hash ``name`` by ``amount``"
+ return self.format_inline('HINCRBY', name, key, amount)
+
def hkeys(self, name):
"Return the list of keys within hash ``name``"
return self.format_inline('HKEYS', name)
@@ -1045,6 +1064,6 @@ class Pipeline(Redis):
self.connection.disconnect()
return self._execute(stack)
- def select(self, host, port, db):
+ def select(self, *args, **kwargs):
raise RedisError("Cannot select a different database from a pipeline")