@@ -517,6 +517,17 @@ def encode(self, value: EncodableT) -> Union[bytes, int]:
517
517
518
518
return value
519
519
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
+
520
531
def get_many (
521
532
self ,
522
533
keys : Iterable [KeyT ],
@@ -828,7 +839,7 @@ def sdiff(
828
839
* keys : KeyT ,
829
840
version : Optional [int ] = None ,
830
841
client : Optional [Redis ] = None ,
831
- ) -> Set :
842
+ ) -> Set [ Any ] :
832
843
if client is None :
833
844
client = self .get_client (write = False )
834
845
@@ -855,7 +866,7 @@ def sinter(
855
866
* keys : KeyT ,
856
867
version : Optional [int ] = None ,
857
868
client : Optional [Redis ] = None ,
858
- ) -> Set :
869
+ ) -> Set [ Any ] :
859
870
if client is None :
860
871
client = self .get_client (write = False )
861
872
@@ -910,7 +921,7 @@ def smembers(
910
921
key : KeyT ,
911
922
version : Optional [int ] = None ,
912
923
client : Optional [Redis ] = None ,
913
- ) -> Set :
924
+ ) -> Set [ Any ] :
914
925
if client is None :
915
926
client = self .get_client (write = False )
916
927
@@ -945,11 +956,7 @@ def spop(
945
956
946
957
nkey = self .make_key (key , version = version )
947
958
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 )
953
960
954
961
def srandmember (
955
962
self ,
@@ -963,11 +970,7 @@ def srandmember(
963
970
964
971
key = self .make_key (key , version = version )
965
972
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 )
971
974
972
975
def srem (
973
976
self ,
@@ -1035,7 +1038,7 @@ def sunion(
1035
1038
* keys : KeyT ,
1036
1039
version : Optional [int ] = None ,
1037
1040
client : Optional [Redis ] = None ,
1038
- ) -> Set :
1041
+ ) -> Set [ Any ] :
1039
1042
if client is None :
1040
1043
client = self .get_client (write = False )
1041
1044
0 commit comments