summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorandy <andy@whiskeymedia.com>2013-05-01 15:52:11 -0700
committerandy <andy@whiskeymedia.com>2013-05-01 15:52:11 -0700
commit8062897a973525a352594a7ebe6854918e75b944 (patch)
treebf9ddc77f8d1a2ab27f394ddced683cfa6118f61
parent47e7e3f4fc4db55d1782780ae2c8ff7befa4e3ff (diff)
downloadredis-py-8062897a973525a352594a7ebe6854918e75b944.tar.gz
DEL, HDEL, ZREM commands now return number of keys deleted. fixed #243
-rw-r--r--CHANGES3
-rw-r--r--redis/client.py11
-rw-r--r--tests/server_commands.py31
3 files changed, 34 insertions, 11 deletions
diff --git a/CHANGES b/CHANGES
index 6de5a4e..86d89d2 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,6 @@
+* 2.7.5 (in development)
+ * DEL, HDEL and ZREM commands now return the numbers of keys deleted
+ instead of just True/False.
* 2.7.4
* Added missing INCRBY method. Thanks Krzysztof Dorosz.
* SET now accepts the EX, PX, NX and XX options from Redis 2.6.12. These
diff --git a/redis/client.py b/redis/client.py
index 234b140..c6d9ca2 100644
--- a/redis/client.py
+++ b/redis/client.py
@@ -193,14 +193,15 @@ class StrictRedis(object):
"""
RESPONSE_CALLBACKS = dict_merge(
string_keys_to_dict(
- 'AUTH DEL EXISTS EXPIRE EXPIREAT HDEL HEXISTS HMSET MOVE MSETNX '
- 'PERSIST PSETEX RENAMENX SISMEMBER SMOVE SETEX SETNX ZREM',
+ 'AUTH EXISTS EXPIRE EXPIREAT HEXISTS HMSET MOVE MSETNX PERSIST '
+ 'PSETEX RENAMENX SISMEMBER SMOVE SETEX SETNX',
bool
),
string_keys_to_dict(
- 'BITCOUNT DECRBY GETBIT HLEN INCRBY LINSERT LLEN LPUSHX RPUSHX '
- 'SADD SCARD SDIFFSTORE SETBIT SETRANGE SINTERSTORE SREM STRLEN '
- 'SUNIONSTORE ZADD ZCARD ZREMRANGEBYRANK ZREMRANGEBYSCORE',
+ 'BITCOUNT DECRBY DEL GETBIT HDEL HLEN INCRBY LINSERT LLEN LPUSHX '
+ 'RPUSHX SADD SCARD SDIFFSTORE SETBIT SETRANGE SINTERSTORE SREM '
+ 'STRLEN SUNIONSTORE ZADD ZCARD ZREM ZREMRANGEBYRANK '
+ 'ZREMRANGEBYSCORE',
int
),
string_keys_to_dict('INCRBYFLOAT HINCRBYFLOAT', float),
diff --git a/tests/server_commands.py b/tests/server_commands.py
index d8443e1..c4b0fc9 100644
--- a/tests/server_commands.py
+++ b/tests/server_commands.py
@@ -61,9 +61,16 @@ class ServerCommandsTestCase(unittest.TestCase):
self.assertRaises(KeyError, self.client.__getitem__, 'b')
def test_delete(self):
- self.assertEquals(self.client.delete('a'), False)
+ self.assertEquals(self.client.delete('a'), 0)
self.client['a'] = 'foo'
- self.assertEquals(self.client.delete('a'), True)
+ self.assertEquals(self.client.delete('a'), 1)
+
+ def test_delete_multiple_keys(self):
+ self.client['a'] = 'foo'
+ self.client['b'] = 'bar'
+ self.assertEquals(self.client.delete('a', 'b'), 2)
+ self.assertEquals(self.client.get('a'), None)
+ self.assertEquals(self.client.get('b'), None)
def test_delitem(self):
self.client['a'] = 'foo'
@@ -1208,11 +1215,16 @@ class ServerCommandsTestCase(unittest.TestCase):
del self.client['a']
# real logic
self.make_zset('a', {'a1': 1, 'a2': 2, 'a3': 3})
- self.assertEquals(self.client.zrem('a', 'a2'), True)
+ self.assertEquals(self.client.zrem('a', 'a2'), 1)
self.assertEquals(self.client.zrange('a', 0, 5), [b('a1'), b('a3')])
- self.assertEquals(self.client.zrem('a', 'b'), False)
+ self.assertEquals(self.client.zrem('a', 'b'), 0)
self.assertEquals(self.client.zrange('a', 0, 5), [b('a1'), b('a3')])
+ def test_zrem_multiple_keys(self):
+ self.make_zset('a', {'a1': 1, 'a2': 2, 'a3': 3})
+ self.assertEquals(self.client.zrem('a', 'a1', 'a2'), 2)
+ self.assertEquals(self.client.zrange('a', 0, 5), [b('a3')])
+
def test_zremrangebyrank(self):
# key is not a zset
self.client['a'] = 'a'
@@ -1423,13 +1435,20 @@ class ServerCommandsTestCase(unittest.TestCase):
self.assertRaises(redis.ResponseError, self.client.hdel, 'a', 'a1')
del self.client['a']
# no key
- self.assertEquals(self.client.hdel('a', 'a1'), False)
+ self.assertEquals(self.client.hdel('a', 'a1'), 0)
# real logic
self.make_hash('a', {'a1': 1, 'a2': 2, 'a3': 3})
self.assertEquals(self.client.hget('a', 'a2'), b('2'))
- self.assert_(self.client.hdel('a', 'a2'))
+ self.assertEquals(self.client.hdel('a', 'a2'), 1)
self.assertEquals(self.client.hget('a', 'a2'), None)
+ def test_hdel_multiple_keys(self):
+ self.make_hash('a', {'a1': 1, 'a2': 2, 'a3': 3})
+ self.assertEquals(self.client.hdel('a', 'a1', 'a2'), 2)
+ self.assertEquals(self.client.hget('a', 'a1'), None)
+ self.assertEquals(self.client.hget('a', 'a2'), None)
+ self.assertEquals(self.client.hget('a', 'a3'), b('3'))
+
def test_hexists(self):
# key is not a hash
self.client['a'] = 'a'