From 14c6c8427c45d940f8d4136fe20449874c1ea20d Mon Sep 17 00:00:00 2001 From: Anuragkillswitch <70265851+Anuragkillswitch@users.noreply.github.com> Date: Thu, 6 Apr 2023 08:39:30 +0530 Subject: [PATCH 1/4] feat: add support for zrank7.2 --- redis/commands/core.py | 9 ++++++--- tests/test_asyncio/test_commands.py | 5 +++++ tests/test_commands.py | 5 +++++ 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/redis/commands/core.py b/redis/commands/core.py index e2cabb85fa..e5375a836e 100644 --- a/redis/commands/core.py +++ b/redis/commands/core.py @@ -4643,14 +4643,17 @@ def zrevrangebyscore( options = {"withscores": withscores, "score_cast_func": score_cast_func} return self.execute_command(*pieces, **options) - def zrank(self, name: KeyT, value: EncodableT) -> ResponseT: + def zrank(self, name: KeyT, value: EncodableT, withscore: bool = False) -> ResponseT: """ Returns a 0-based value indicating the rank of ``value`` in sorted set - ``name`` + ``name``. If `withscore` is True, the score of the element is also returned. For more information see https://redis.io/commands/zrank """ - return self.execute_command("ZRANK", name, value) + if withscore: + return self.execute_command("ZRANK", name, value, "WITHSCORE") + else: + return self.execute_command("ZRANK", name, value) def zrem(self, name: KeyT, *values: FieldT) -> ResponseT: """ diff --git a/tests/test_asyncio/test_commands.py b/tests/test_asyncio/test_commands.py index 7c6fd45ab9..7931f24dc2 100644 --- a/tests/test_asyncio/test_commands.py +++ b/tests/test_asyncio/test_commands.py @@ -1630,6 +1630,11 @@ async def test_zrank(self, r: redis.Redis): assert await r.zrank("a", "a2") == 1 assert await r.zrank("a", "a6") is None + await r.zadd("b", {"a1": 1, "a2": 2, "a3": 3, "a4": 4, "a5": 5}) + assert await r.zrank("b", "a1", True) == [0, 1.0] + assert await r.zrank("b", "a2", True) == [1, 2.0] + assert await r.zrank("b", "a6", True) is None + async def test_zrem(self, r: redis.Redis): await r.zadd("a", {"a1": 1, "a2": 2, "a3": 3}) assert await r.zrem("a", "a2") == 1 diff --git a/tests/test_commands.py b/tests/test_commands.py index 94249e9419..f493c056d2 100644 --- a/tests/test_commands.py +++ b/tests/test_commands.py @@ -2567,6 +2567,11 @@ def test_zrank(self, r): assert r.zrank("a", "a1") == 0 assert r.zrank("a", "a2") == 1 assert r.zrank("a", "a6") is None + + r.zadd("b", {"a1": 1, "a2": 2, "a3": 3, "a4": 4, "a5": 5}) + assert r.zrank("b", "a1", True) == [0, 1.0] + assert r.zrank("b", "a2", True) == [1, 2.0] + assert r.zrank("b", "a6", True) is None def test_zrem(self, r): r.zadd("a", {"a1": 1, "a2": 2, "a3": 3}) From 37b9736080153e64af15f5eb1887dfab4ae95b26 Mon Sep 17 00:00:00 2001 From: Anuragkillswitch <70265851+Anuragkillswitch@users.noreply.github.com> Date: Thu, 6 Apr 2023 09:48:58 +0530 Subject: [PATCH 2/4] fix: format --- redis/commands/core.py | 7 ++++++- tests/test_asyncio/test_commands.py | 2 +- tests/test_commands.py | 2 +- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/redis/commands/core.py b/redis/commands/core.py index e5375a836e..3184c772a7 100644 --- a/redis/commands/core.py +++ b/redis/commands/core.py @@ -4643,7 +4643,12 @@ def zrevrangebyscore( options = {"withscores": withscores, "score_cast_func": score_cast_func} return self.execute_command(*pieces, **options) - def zrank(self, name: KeyT, value: EncodableT, withscore: bool = False) -> ResponseT: + def zrank( + self, + name: KeyT, + value: EncodableT, + withscore: bool = False + ) -> ResponseT: """ Returns a 0-based value indicating the rank of ``value`` in sorted set ``name``. If `withscore` is True, the score of the element is also returned. diff --git a/tests/test_asyncio/test_commands.py b/tests/test_asyncio/test_commands.py index 7931f24dc2..0feb7b749a 100644 --- a/tests/test_asyncio/test_commands.py +++ b/tests/test_asyncio/test_commands.py @@ -1629,7 +1629,7 @@ async def test_zrank(self, r: redis.Redis): assert await r.zrank("a", "a1") == 0 assert await r.zrank("a", "a2") == 1 assert await r.zrank("a", "a6") is None - + # withscore await r.zadd("b", {"a1": 1, "a2": 2, "a3": 3, "a4": 4, "a5": 5}) assert await r.zrank("b", "a1", True) == [0, 1.0] assert await r.zrank("b", "a2", True) == [1, 2.0] diff --git a/tests/test_commands.py b/tests/test_commands.py index f493c056d2..f4ce62256f 100644 --- a/tests/test_commands.py +++ b/tests/test_commands.py @@ -2567,7 +2567,7 @@ def test_zrank(self, r): assert r.zrank("a", "a1") == 0 assert r.zrank("a", "a2") == 1 assert r.zrank("a", "a6") is None - + # withscore r.zadd("b", {"a1": 1, "a2": 2, "a3": 3, "a4": 4, "a5": 5}) assert r.zrank("b", "a1", True) == [0, 1.0] assert r.zrank("b", "a2", True) == [1, 2.0] From 2eee571d82d4619bdd325e10217b098cd2d4e105 Mon Sep 17 00:00:00 2001 From: "Chayim I. Kirshen" Date: Sun, 23 Apr 2023 12:55:10 +0300 Subject: [PATCH 3/4] fixing the linter issue --- redis/commands/core.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/redis/commands/core.py b/redis/commands/core.py index 3184c772a7..235fc21df3 100644 --- a/redis/commands/core.py +++ b/redis/commands/core.py @@ -4644,10 +4644,7 @@ def zrevrangebyscore( return self.execute_command(*pieces, **options) def zrank( - self, - name: KeyT, - value: EncodableT, - withscore: bool = False + self, name: KeyT, value: EncodableT, withscore: bool = False ) -> ResponseT: """ Returns a 0-based value indicating the rank of ``value`` in sorted set From c8ebdeb73073be66c66982194425fdc6afc83831 Mon Sep 17 00:00:00 2001 From: Anuragkillswitch <70265851+Anuragkillswitch@users.noreply.github.com> Date: Sat, 20 May 2023 20:58:27 +0530 Subject: [PATCH 4/4] feat: fix zrank7.2 --- redis/commands/core.py | 9 +++++---- tests/test_asyncio/test_commands.py | 4 +++- tests/test_commands.py | 4 +++- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/redis/commands/core.py b/redis/commands/core.py index ebe8918c56..743a69deb2 100644 --- a/redis/commands/core.py +++ b/redis/commands/core.py @@ -4659,14 +4659,15 @@ def zrank( ) -> ResponseT: """ Returns a 0-based value indicating the rank of ``value`` in sorted set - ``name``. If `withscore` is True, the score of the element is also returned. + ``name``. + If `withscore` is True, the score of the element is also returned. For more information see https://redis.io/commands/zrank """ + pieces = [name, value] if withscore: - return self.execute_command("ZRANK", name, value, "WITHSCORE") - else: - return self.execute_command("ZRANK", name, value) + pieces.append("WITHSCORE") + return self.execute_command("ZRANK", *pieces) def zrem(self, name: KeyT, *values: FieldT) -> ResponseT: """ diff --git a/tests/test_asyncio/test_commands.py b/tests/test_asyncio/test_commands.py index b3278acaad..91772bbc81 100644 --- a/tests/test_asyncio/test_commands.py +++ b/tests/test_asyncio/test_commands.py @@ -1644,7 +1644,9 @@ async def test_zrank(self, r: redis.Redis): assert await r.zrank("a", "a1") == 0 assert await r.zrank("a", "a2") == 1 assert await r.zrank("a", "a6") is None - # withscore + + @skip_if_server_version_lt("7.2.0") + async def test_zrank_withscore(self, r: redis.Redis): await r.zadd("b", {"a1": 1, "a2": 2, "a3": 3, "a4": 4, "a5": 5}) assert await r.zrank("b", "a1", True) == [0, 1.0] assert await r.zrank("b", "a2", True) == [1, 2.0] diff --git a/tests/test_commands.py b/tests/test_commands.py index 4a5c3d3dfc..27c65bb217 100644 --- a/tests/test_commands.py +++ b/tests/test_commands.py @@ -2580,7 +2580,9 @@ def test_zrank(self, r): assert r.zrank("a", "a1") == 0 assert r.zrank("a", "a2") == 1 assert r.zrank("a", "a6") is None - # withscore + + @skip_if_server_version_lt("7.2.0") + def test_zrankwithscore(self, r): r.zadd("b", {"a1": 1, "a2": 2, "a3": 3, "a4": 4, "a5": 5}) assert r.zrank("b", "a1", True) == [0, 1.0] assert r.zrank("b", "a2", True) == [1, 2.0]