From 53fe4d3eae75cabfb635eae5ae9197efa0bf86c3 Mon Sep 17 00:00:00 2001 From: Avital Fine <79420960+AvitalFineRedis@users.noreply.github.com> Date: Thu, 29 Jul 2021 16:41:46 +0300 Subject: Zrangestore (#1521) --- redis/client.py | 9 +++++++++ tests/test_commands.py | 10 ++++++++++ 2 files changed, 19 insertions(+) diff --git a/redis/client.py b/redis/client.py index ea36ef0..33b0374 100755 --- a/redis/client.py +++ b/redis/client.py @@ -3056,6 +3056,15 @@ class Redis: } return self.execute_command(*pieces, **options) + def zrangestore(self, dest, name, start, end): + """ + Stores in ``dest`` the result of a range of values from sorted set + ``name`` between ``start`` and ``end`` sorted in ascending order. + + ``start`` and ``end`` can be negative, indicating the end of the range. + """ + return self.execute_command('ZRANGESTORE', dest, name, start, end) + def zrangebylex(self, name, min, max, start=None, num=None): """ Return the lexicographical range of values from sorted set ``name`` diff --git a/tests/test_commands.py b/tests/test_commands.py index 62394a4..8411e5e 100644 --- a/tests/test_commands.py +++ b/tests/test_commands.py @@ -1605,6 +1605,16 @@ class TestRedisCommands: assert r.zrange('a', 0, 1, withscores=True, score_cast_func=int) == \ [(b'a1', 1), (b'a2', 2)] + @skip_if_server_version_lt('6.2.0') + def test_zrangestore(self, r): + r.zadd('a', {'a1': 1, 'a2': 2, 'a3': 3}) + assert r.zrangestore('b', 'a', 0, 1) + assert r.zrange('b', 0, -1) == [b'a1', b'a2'] + assert r.zrangestore('b', 'a', 1, 2) + assert r.zrange('b', 0, -1) == [b'a2', b'a3'] + assert r.zrange('b', 0, -1, withscores=True) == \ + [(b'a2', 2), (b'a3', 3)] + @skip_if_server_version_lt('2.8.9') def test_zrangebylex(self, r): r.zadd('a', {'a': 0, 'b': 0, 'c': 0, 'd': 0, 'e': 0, 'f': 0, 'g': 0}) -- cgit v1.2.1