@@ -517,6 +517,17 @@ def encode(self, value: EncodableT) -> Union[bytes, int]:
517517
518518 return value
519519
520+ def _decode_iterable_result (
521+ self , result : Any , covert_to_set : bool = True
522+ ) -> Union [List [Any ], None , Any ]:
523+ if result is None :
524+ return None
525+ if isinstance (result , list ):
526+ if covert_to_set :
527+ return {self .decode (value ) for value in result }
528+ return [self .decode (value ) for value in result ]
529+ return self .decode (result )
530+
520531 def get_many (
521532 self ,
522533 keys : Iterable [KeyT ],
@@ -828,7 +839,7 @@ def sdiff(
828839 * keys : KeyT ,
829840 version : Optional [int ] = None ,
830841 client : Optional [Redis ] = None ,
831- ) -> Set :
842+ ) -> Set [ Any ] :
832843 if client is None :
833844 client = self .get_client (write = False )
834845
@@ -855,7 +866,7 @@ def sinter(
855866 * keys : KeyT ,
856867 version : Optional [int ] = None ,
857868 client : Optional [Redis ] = None ,
858- ) -> Set :
869+ ) -> Set [ Any ] :
859870 if client is None :
860871 client = self .get_client (write = False )
861872
@@ -910,7 +921,7 @@ def smembers(
910921 key : KeyT ,
911922 version : Optional [int ] = None ,
912923 client : Optional [Redis ] = None ,
913- ) -> Set :
924+ ) -> Set [ Any ] :
914925 if client is None :
915926 client = self .get_client (write = False )
916927
@@ -945,11 +956,7 @@ def spop(
945956
946957 nkey = self .make_key (key , version = version )
947958 result = client .spop (nkey , count )
948- if result is None :
949- return None
950- if isinstance (result , list ):
951- return {self .decode (value ) for value in result }
952- return self .decode (result )
959+ return self ._decode_iterable_result (result )
953960
954961 def srandmember (
955962 self ,
@@ -963,11 +970,7 @@ def srandmember(
963970
964971 key = self .make_key (key , version = version )
965972 result = client .srandmember (key , count )
966- if result is None :
967- return None
968- if isinstance (result , list ):
969- return [self .decode (value ) for value in result ]
970- return self .decode (result )
973+ return self ._decode_iterable_result (result , covert_to_set = False )
971974
972975 def srem (
973976 self ,
@@ -1035,7 +1038,7 @@ def sunion(
10351038 * keys : KeyT ,
10361039 version : Optional [int ] = None ,
10371040 client : Optional [Redis ] = None ,
1038- ) -> Set :
1041+ ) -> Set [ Any ] :
10391042 if client is None :
10401043 client = self .get_client (write = False )
10411044
0 commit comments