diff options
author | andy <andy@whiskeymedia.com> | 2013-05-01 15:52:11 -0700 |
---|---|---|
committer | andy <andy@whiskeymedia.com> | 2013-05-01 15:52:11 -0700 |
commit | 8062897a973525a352594a7ebe6854918e75b944 (patch) | |
tree | bf9ddc77f8d1a2ab27f394ddced683cfa6118f61 | |
parent | 47e7e3f4fc4db55d1782780ae2c8ff7befa4e3ff (diff) | |
download | redis-py-8062897a973525a352594a7ebe6854918e75b944.tar.gz |
DEL, HDEL, ZREM commands now return number of keys deleted. fixed #243
-rw-r--r-- | CHANGES | 3 | ||||
-rw-r--r-- | redis/client.py | 11 | ||||
-rw-r--r-- | tests/server_commands.py | 31 |
3 files changed, 34 insertions, 11 deletions
@@ -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' |