Skip to content

Add type hints for set commands #1918

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Feb 3, 2022
Merged
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 20 additions & 15 deletions redis/commands/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
import hashlib
import time
import warnings
from typing import List, Optional, Union

from redis.exceptions import ConnectionError, DataError, NoScriptError, RedisError

Expand Down Expand Up @@ -2335,23 +2336,23 @@ class SetCommands:
see: https://redis.io/topics/data-types#sets
"""

def sadd(self, name, *values):
def sadd(self, name: str, *values: List) -> int:
"""
Add ``value(s)`` to set ``name``

For more information check https://redis.io/commands/sadd
"""
return self.execute_command("SADD", name, *values)

def scard(self, name):
def scard(self, name: str) -> int:
"""
Return the number of elements in set ``name``

For more information check https://redis.io/commands/scard
"""
return self.execute_command("SCARD", name)

def sdiff(self, keys, *args):
def sdiff(self, keys: List, *args: List) -> List:
"""
Return the difference of sets specified by ``keys``

Expand All @@ -2360,7 +2361,7 @@ def sdiff(self, keys, *args):
args = list_or_args(keys, args)
return self.execute_command("SDIFF", *args)

def sdiffstore(self, dest, keys, *args):
def sdiffstore(self, dest: str, keys: List, *args: List) -> int:
"""
Store the difference of sets specified by ``keys`` into a new
set named ``dest``. Returns the number of keys in the new set.
Expand All @@ -2370,7 +2371,7 @@ def sdiffstore(self, dest, keys, *args):
args = list_or_args(keys, args)
return self.execute_command("SDIFFSTORE", dest, *args)

def sinter(self, keys, *args):
def sinter(self, keys: List, *args: List) -> List:
"""
Return the intersection of sets specified by ``keys``

Expand All @@ -2379,7 +2380,7 @@ def sinter(self, keys, *args):
args = list_or_args(keys, args)
return self.execute_command("SINTER", *args)

def sinterstore(self, dest, keys, *args):
def sinterstore(self, dest: str, keys: List, *args: List) -> int:
"""
Store the intersection of sets specified by ``keys`` into a new
set named ``dest``. Returns the number of keys in the new set.
Expand All @@ -2389,23 +2390,23 @@ def sinterstore(self, dest, keys, *args):
args = list_or_args(keys, args)
return self.execute_command("SINTERSTORE", dest, *args)

def sismember(self, name, value):
def sismember(self, name: str, value: str) -> bool:
"""
Return a boolean indicating if ``value`` is a member of set ``name``

For more information check https://redis.io/commands/sismember
"""
return self.execute_command("SISMEMBER", name, value)

def smembers(self, name):
def smembers(self, name: str) -> List:
"""
Return all members of the set ``name``

For more information check https://redis.io/commands/smembers
"""
return self.execute_command("SMEMBERS", name)

def smismember(self, name, values, *args):
def smismember(self, name: str, values: List, *args: List) -> List[bool]:
"""
Return whether each value in ``values`` is a member of the set ``name``
as a list of ``bool`` in the order of ``values``
Expand All @@ -2415,15 +2416,15 @@ def smismember(self, name, values, *args):
args = list_or_args(values, args)
return self.execute_command("SMISMEMBER", name, *args)

def smove(self, src, dst, value):
def smove(self, src: str, dst: str, value: str) -> bool:
"""
Move ``value`` from set ``src`` to set ``dst`` atomically

For more information check https://redis.io/commands/smove
"""
return self.execute_command("SMOVE", src, dst, value)

def spop(self, name, count=None):
def spop(self, name: str, count: Optional[int] = None) -> Union[str, List, None]:
"""
Remove and return a random member of set ``name``

Expand All @@ -2432,7 +2433,11 @@ def spop(self, name, count=None):
args = (count is not None) and [count] or []
return self.execute_command("SPOP", name, *args)

def srandmember(self, name, number=None):
def srandmember(
self,
name: str,
number: Optional[int] = None,
) -> Union[str, List, None]:
"""
If ``number`` is None, returns a random member of set ``name``.

Expand All @@ -2445,15 +2450,15 @@ def srandmember(self, name, number=None):
args = (number is not None) and [number] or []
return self.execute_command("SRANDMEMBER", name, *args)

def srem(self, name, *values):
def srem(self, name: str, *values: List) -> int:
"""
Remove ``values`` from set ``name``

For more information check https://redis.io/commands/srem
"""
return self.execute_command("SREM", name, *values)

def sunion(self, keys, *args):
def sunion(self, keys: List, *args: List) -> List:
"""
Return the union of sets specified by ``keys``

Expand All @@ -2462,7 +2467,7 @@ def sunion(self, keys, *args):
args = list_or_args(keys, args)
return self.execute_command("SUNION", *args)

def sunionstore(self, dest, keys, *args):
def sunionstore(self, dest: str, keys: List, *args: List) -> int:
"""
Store the union of sets specified by ``keys`` into a new
set named ``dest``. Returns the number of keys in the new set.
Expand Down