Skip to content

Commit bf528fc

Browse files
authored
Add WITHSCORES to ZREVRANK Command (#2725)
* add withscores to zrevrank * change 0 -> 2 * fix errors * split test
1 parent 8b58ebb commit bf528fc

File tree

3 files changed

+29
-2
lines changed

3 files changed

+29
-2
lines changed

redis/commands/core.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4693,13 +4693,22 @@ def zremrangebyscore(
46934693
"""
46944694
return self.execute_command("ZREMRANGEBYSCORE", name, min, max)
46954695

4696-
def zrevrank(self, name: KeyT, value: EncodableT) -> ResponseT:
4696+
def zrevrank(
4697+
self,
4698+
name: KeyT,
4699+
value: EncodableT,
4700+
withscore: bool = False,
4701+
) -> ResponseT:
46974702
"""
46984703
Returns a 0-based value indicating the descending rank of
4699-
``value`` in sorted set ``name``
4704+
``value`` in sorted set ``name``.
4705+
The optional ``withscore`` argument supplements the command's
4706+
reply with the score of the element returned.
47004707
47014708
For more information see https://redis.io/commands/zrevrank
47024709
"""
4710+
if withscore:
4711+
return self.execute_command("ZREVRANK", name, value, "WITHSCORE")
47034712
return self.execute_command("ZREVRANK", name, value)
47044713

47054714
def zscore(self, name: KeyT, value: EncodableT) -> ResponseT:

tests/test_asyncio/test_commands.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1710,6 +1710,15 @@ async def test_zrevrank(self, r: redis.Redis):
17101710
assert await r.zrevrank("a", "a2") == 3
17111711
assert await r.zrevrank("a", "a6") is None
17121712

1713+
@skip_if_server_version_lt("7.2.0")
1714+
async def test_zrevrank_withscore(self, r: redis.Redis):
1715+
await r.zadd("a", {"a1": 1, "a2": 2, "a3": 3, "a4": 4, "a5": 5})
1716+
assert await r.zrevrank("a", "a1") == 4
1717+
assert await r.zrevrank("a", "a2") == 3
1718+
assert await r.zrevrank("a", "a6") is None
1719+
assert await r.zrevrank("a", "a3", withscore=True) == [2, "3"]
1720+
assert await r.zrevrank("a", "a6", withscore=True) is None
1721+
17131722
async def test_zscore(self, r: redis.Redis):
17141723
await r.zadd("a", {"a1": 1, "a2": 2, "a3": 3})
17151724
assert await r.zscore("a", "a1") == 1.0

tests/test_commands.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2641,6 +2641,15 @@ def test_zrevrank(self, r):
26412641
assert r.zrevrank("a", "a2") == 3
26422642
assert r.zrevrank("a", "a6") is None
26432643

2644+
@skip_if_server_version_lt("7.2.0")
2645+
def test_zrevrank_withscore(self, r):
2646+
r.zadd("a", {"a1": 1, "a2": 2, "a3": 3, "a4": 4, "a5": 5})
2647+
assert r.zrevrank("a", "a1") == 4
2648+
assert r.zrevrank("a", "a2") == 3
2649+
assert r.zrevrank("a", "a6") is None
2650+
assert r.zrevrank("a", "a3", withscore=True) == [2, "3"]
2651+
assert r.zrevrank("a", "a6", withscore=True) is None
2652+
26442653
def test_zscore(self, r):
26452654
r.zadd("a", {"a1": 1, "a2": 2, "a3": 3})
26462655
assert r.zscore("a", "a1") == 1.0

0 commit comments

Comments
 (0)