@@ -726,162 +726,157 @@ def parse_set_result(response, **options):
726
726
727
727
class AbstractRedis :
728
728
RESPONSE_CALLBACKS = {
729
- ** string_keys_to_dict (
730
- "AUTH COPY EXPIRE EXPIREAT PEXPIRE PEXPIREAT "
731
- "HEXISTS HMSET MOVE MSETNX PERSIST "
732
- "PSETEX RENAMENX SISMEMBER SMOVE SETEX SETNX" ,
733
- bool ,
734
- ),
735
- ** string_keys_to_dict (
736
- "BITCOUNT BITPOS DECRBY DEL EXISTS GEOADD GETBIT HDEL HLEN "
737
- "HSTRLEN INCRBY LINSERT LLEN LPUSHX PFADD PFCOUNT RPUSHX SADD "
738
- "SCARD SDIFFSTORE SETBIT SETRANGE SINTERSTORE SREM STRLEN "
739
- "SUNIONSTORE UNLINK XACK XDEL XLEN XTRIM ZCARD ZLEXCOUNT ZREM "
740
- "ZREMRANGEBYLEX ZREMRANGEBYRANK ZREMRANGEBYSCORE" ,
741
- int ,
742
- ),
729
+ ** string_keys_to_dict ("EXPIRE EXPIREAT PEXPIRE PEXPIREAT AUTH" , bool ),
730
+ ** string_keys_to_dict ("EXISTS" , int ),
743
731
** string_keys_to_dict ("INCRBYFLOAT HINCRBYFLOAT" , float ),
744
- ** string_keys_to_dict (
745
- # these return OK, or int if redis-server is >=1.3.4
746
- "LPUSH RPUSH" ,
747
- lambda r : isinstance (r , int ) and r or str_if_bytes (r ) == "OK" ,
748
- ),
749
- ** string_keys_to_dict ("SORT" , sort_return_tuples ),
750
- ** string_keys_to_dict ("ZSCORE ZINCRBY GEODIST" , float_or_none ),
751
- ** string_keys_to_dict (
752
- "FLUSHALL FLUSHDB LSET LTRIM MSET PFMERGE ASKING READONLY READWRITE "
753
- "RENAME SAVE SELECT SHUTDOWN SLAVEOF SWAPDB WATCH UNWATCH " ,
754
- bool_ok ,
755
- ),
756
- ** string_keys_to_dict ("BLPOP BRPOP" , lambda r : r and tuple (r ) or None ),
757
- ** string_keys_to_dict (
758
- "SDIFF SINTER SMEMBERS SUNION" , lambda r : r and set (r ) or set ()
759
- ),
760
- ** string_keys_to_dict (
761
- "ZPOPMAX ZPOPMIN ZINTER ZDIFF ZUNION ZRANGE ZRANGEBYSCORE "
762
- "ZREVRANGE ZREVRANGEBYSCORE" ,
763
- zset_score_pairs ,
764
- ),
765
- ** string_keys_to_dict (
766
- "BZPOPMIN BZPOPMAX" , lambda r : r and (r [0 ], r [1 ], float (r [2 ])) or None
767
- ),
768
- ** string_keys_to_dict ("ZRANK ZREVRANK" , int_or_none ),
769
- ** string_keys_to_dict ("XREVRANGE XRANGE" , parse_stream_list ),
770
- ** string_keys_to_dict ("XREAD XREADGROUP" , parse_xread ),
771
- ** string_keys_to_dict ("BGREWRITEAOF BGSAVE" , lambda r : True ),
772
- "ACL CAT" : lambda r : list (map (str_if_bytes , r )),
773
- "ACL DELUSER" : int ,
774
- "ACL GENPASS" : str_if_bytes ,
775
- "ACL GETUSER" : parse_acl_getuser ,
776
- "ACL HELP" : lambda r : list (map (str_if_bytes , r )),
777
- "ACL LIST" : lambda r : list (map (str_if_bytes , r )),
778
- "ACL LOAD" : bool_ok ,
779
- "ACL LOG" : parse_acl_log ,
780
- "ACL SAVE" : bool_ok ,
781
- "ACL SETUSER" : bool_ok ,
782
- "ACL USERS" : lambda r : list (map (str_if_bytes , r )),
783
- "ACL WHOAMI" : str_if_bytes ,
784
- "CLIENT GETNAME" : str_if_bytes ,
732
+ ** string_keys_to_dict ("READONLY" , bool_ok ),
733
+ "CLUSTER DELSLOTS" : bool_ok ,
734
+ "CLUSTER ADDSLOTS" : bool_ok ,
735
+ "COMMAND" : parse_command ,
736
+ "INFO" : parse_info ,
737
+ "SET" : parse_set_result ,
785
738
"CLIENT ID" : int ,
786
739
"CLIENT KILL" : parse_client_kill ,
787
740
"CLIENT LIST" : parse_client_list ,
788
741
"CLIENT INFO" : parse_client_info ,
789
742
"CLIENT SETNAME" : bool_ok ,
790
- "CLIENT UNBLOCK" : lambda r : r and int (r ) == 1 or False ,
791
- "CLIENT PAUSE" : bool_ok ,
792
- "CLIENT GETREDIR" : int ,
793
743
"CLIENT TRACKINGINFO" : lambda r : list (map (str_if_bytes , r )),
794
- "CLUSTER ADDSLOTS" : bool_ok ,
795
- "CLUSTER ADDSLOTSRANGE" : bool_ok ,
744
+ "LASTSAVE" : timestamp_to_datetime ,
745
+ "RESET" : str_if_bytes ,
746
+ "SLOWLOG GET" : parse_slowlog_get ,
747
+ "TIME" : lambda x : (int (x [0 ]), int (x [1 ])),
748
+ ** string_keys_to_dict ("BLPOP BRPOP" , lambda r : r and tuple (r ) or None ),
749
+ "SCAN" : parse_scan ,
750
+ "CLIENT GETNAME" : str_if_bytes ,
751
+ "SSCAN" : parse_scan ,
752
+ "ACL LOG" : parse_acl_log ,
753
+ "ACL WHOAMI" : str_if_bytes ,
754
+ "ACL GENPASS" : str_if_bytes ,
755
+ "ACL CAT" : lambda r : list (map (str_if_bytes , r )),
756
+ "HSCAN" : parse_hscan ,
757
+ "ZSCAN" : parse_zscan ,
758
+ ** string_keys_to_dict (
759
+ "BZPOPMIN BZPOPMAX" , lambda r : r and (r [0 ], r [1 ], float (r [2 ])) or None
760
+ ),
796
761
"CLUSTER COUNT-FAILURE-REPORTS" : lambda x : int (x ),
797
762
"CLUSTER COUNTKEYSINSLOT" : lambda x : int (x ),
798
- "CLUSTER DELSLOTS" : bool_ok ,
799
- "CLUSTER DELSLOTSRANGE" : bool_ok ,
800
763
"CLUSTER FAILOVER" : bool_ok ,
801
764
"CLUSTER FORGET" : bool_ok ,
802
- "CLUSTER GETKEYSINSLOT" : lambda r : list (map (str_if_bytes , r )),
803
765
"CLUSTER INFO" : parse_cluster_info ,
804
766
"CLUSTER KEYSLOT" : lambda x : int (x ),
805
767
"CLUSTER MEET" : bool_ok ,
806
768
"CLUSTER NODES" : parse_cluster_nodes ,
807
- "CLUSTER REPLICAS" : parse_cluster_nodes ,
808
769
"CLUSTER REPLICATE" : bool_ok ,
809
770
"CLUSTER RESET" : bool_ok ,
810
771
"CLUSTER SAVECONFIG" : bool_ok ,
811
- "CLUSTER SET-CONFIG-EPOCH" : bool_ok ,
812
772
"CLUSTER SETSLOT" : bool_ok ,
813
773
"CLUSTER SLAVES" : parse_cluster_nodes ,
814
- "COMMAND" : parse_command ,
815
- "COMMAND COUNT" : int ,
816
- "COMMAND GETKEYS" : lambda r : list (map (str_if_bytes , r )),
817
- "CONFIG GET" : parse_config_get ,
818
- "CONFIG RESETSTAT" : bool_ok ,
819
- "CONFIG SET" : bool_ok ,
820
- "DEBUG OBJECT" : parse_debug_object ,
821
- "FUNCTION DELETE" : bool_ok ,
822
- "FUNCTION FLUSH" : bool_ok ,
823
- "FUNCTION RESTORE" : bool_ok ,
774
+ ** string_keys_to_dict ("GEODIST" , float_or_none ),
824
775
"GEOHASH" : lambda r : list (map (str_if_bytes , r )),
825
776
"GEOPOS" : lambda r : list (
826
777
map (lambda ll : (float (ll [0 ]), float (ll [1 ])) if ll is not None else None , r )
827
778
),
828
779
"GEOSEARCH" : parse_geosearch_generic ,
829
780
"GEORADIUS" : parse_geosearch_generic ,
830
781
"GEORADIUSBYMEMBER" : parse_geosearch_generic ,
831
- "HGETALL" : lambda r : r and pairs_to_dict (r ) or {},
832
- "HSCAN" : parse_hscan ,
833
- "INFO" : parse_info ,
834
- "LASTSAVE" : timestamp_to_datetime ,
835
- "MEMORY PURGE" : bool_ok ,
836
- "MEMORY STATS" : parse_memory_stats ,
837
- "MEMORY USAGE" : int_or_none ,
838
- "MODULE LOAD" : parse_module_result ,
839
- "MODULE UNLOAD" : parse_module_result ,
840
- "MODULE LIST" : lambda r : [pairs_to_dict (m ) for m in r ],
841
- "OBJECT" : parse_object ,
782
+ "XAUTOCLAIM" : parse_xautoclaim ,
783
+ "XINFO STREAM" : parse_xinfo_stream ,
784
+ "XPENDING" : parse_xpending ,
785
+ ** string_keys_to_dict ("XREAD XREADGROUP" , parse_xread ),
786
+ "COMMAND GETKEYS" : lambda r : list (map (str_if_bytes , r )),
787
+ ** string_keys_to_dict ("SORT" , sort_return_tuples ),
842
788
"PING" : lambda r : str_if_bytes (r ) == "PONG" ,
843
- "QUIT" : bool_ok ,
844
- "STRALGO" : parse_stralgo ,
789
+ "ACL SETUSER" : bool_ok ,
845
790
"PUBSUB NUMSUB" : parse_pubsub_numsub ,
846
- "PUBSUB SHARDNUMSUB" : parse_pubsub_numsub ,
847
- "RANDOMKEY" : lambda r : r and r or None ,
848
- "RESET" : str_if_bytes ,
849
- "SCAN" : parse_scan ,
850
- "SCRIPT EXISTS" : lambda r : list (map (bool , r )),
851
791
"SCRIPT FLUSH" : bool_ok ,
852
- "SCRIPT KILL" : bool_ok ,
853
792
"SCRIPT LOAD" : str_if_bytes ,
854
- "SENTINEL CKQUORUM" : bool_ok ,
855
- "SENTINEL FAILOVER" : bool_ok ,
856
- "SENTINEL FLUSHCONFIG" : bool_ok ,
857
- "SENTINEL GET-MASTER-ADDR-BY-NAME" : parse_sentinel_get_master ,
858
- "SENTINEL MASTER" : parse_sentinel_master ,
859
- "SENTINEL MASTERS" : parse_sentinel_masters ,
860
- "SENTINEL MONITOR" : bool_ok ,
861
- "SENTINEL RESET" : bool_ok ,
862
- "SENTINEL REMOVE" : bool_ok ,
863
- "SENTINEL SENTINELS" : parse_sentinel_slaves_and_sentinels ,
864
- "SENTINEL SET" : bool_ok ,
865
- "SENTINEL SLAVES" : parse_sentinel_slaves_and_sentinels ,
866
- "SET" : parse_set_result ,
867
- "SLOWLOG GET" : parse_slowlog_get ,
868
- "SLOWLOG LEN" : int ,
869
- "SLOWLOG RESET" : bool_ok ,
870
- "SSCAN" : parse_scan ,
871
- "TIME" : lambda x : (int (x [0 ]), int (x [1 ])),
793
+ "ACL GETUSER" : parse_acl_getuser ,
794
+ "CONFIG SET" : bool_ok ,
795
+ ** string_keys_to_dict ("XREVRANGE XRANGE" , parse_stream_list ),
872
796
"XCLAIM" : parse_xclaim ,
873
- "XAUTOCLAIM" : parse_xautoclaim ,
874
- "XGROUP CREATE" : bool_ok ,
875
- "XGROUP DELCONSUMER" : int ,
876
- "XGROUP DESTROY" : bool ,
877
- "XGROUP SETID" : bool_ok ,
878
- "XINFO CONSUMERS" : parse_list_of_dicts ,
879
- "XINFO GROUPS" : parse_list_of_dicts ,
880
- "XINFO STREAM" : parse_xinfo_stream ,
881
- "XPENDING" : parse_xpending ,
797
+ }
798
+
799
+ RESP2_RESPONSE_CALLBACKS = {
800
+ "CONFIG GET" : parse_config_get ,
801
+ ** string_keys_to_dict (
802
+ "SDIFF SINTER SMEMBERS SUNION" , lambda r : r and set (r ) or set ()
803
+ ),
804
+ ** string_keys_to_dict (
805
+ "ZPOPMAX ZPOPMIN ZINTER ZDIFF ZUNION ZRANGE ZRANGEBYSCORE "
806
+ "ZREVRANGE ZREVRANGEBYSCORE" ,
807
+ zset_score_pairs ,
808
+ ),
809
+ ** string_keys_to_dict ("ZSCORE ZINCRBY" , float_or_none ),
882
810
"ZADD" : parse_zadd ,
883
- "ZSCAN" : parse_zscan ,
884
811
"ZMSCORE" : parse_zmscore ,
812
+ "HGETALL" : lambda r : r and pairs_to_dict (r ) or {},
813
+ "MEMORY STATS" : parse_memory_stats ,
814
+ "MODULE LIST" : lambda r : [pairs_to_dict (m ) for m in r ],
815
+ # **string_keys_to_dict(
816
+ # "COPY "
817
+ # "HEXISTS HMSET MOVE MSETNX PERSIST "
818
+ # "PSETEX RENAMENX SISMEMBER SMOVE SETEX SETNX",
819
+ # bool,
820
+ # ),
821
+ # **string_keys_to_dict(
822
+ # "HSTRLEN INCRBY LINSERT LLEN LPUSHX PFADD PFCOUNT RPUSHX SADD "
823
+ # "SCARD SDIFFSTORE SETBIT SETRANGE SINTERSTORE SREM STRLEN "
824
+ # "SUNIONSTORE UNLINK XACK XDEL XLEN XTRIM ZCARD ZLEXCOUNT ZREM "
825
+ # "ZREMRANGEBYLEX ZREMRANGEBYRANK ZREMRANGEBYSCORE",
826
+ # int,
827
+ # ),
828
+ # **string_keys_to_dict(
829
+ # "FLUSHALL FLUSHDB LSET LTRIM MSET PFMERGE ASKING READWRITE "
830
+ # "RENAME SAVE SELECT SHUTDOWN SLAVEOF SWAPDB WATCH UNWATCH ",
831
+ # bool_ok,
832
+ # ),
833
+ # **string_keys_to_dict("ZRANK ZREVRANK", int_or_none),
834
+ # **string_keys_to_dict("BGREWRITEAOF BGSAVE", lambda r: True),
835
+ # "ACL HELP": lambda r: list(map(str_if_bytes, r)),
836
+ # "ACL LIST": lambda r: list(map(str_if_bytes, r)),
837
+ # "ACL LOAD": bool_ok,
838
+ # "ACL SAVE": bool_ok,
839
+ # "ACL USERS": lambda r: list(map(str_if_bytes, r)),
840
+ # "CLIENT UNBLOCK": lambda r: r and int(r) == 1 or False,
841
+ # "CLIENT PAUSE": bool_ok,
842
+ # "CLUSTER ADDSLOTSRANGE": bool_ok,
843
+ # "CLUSTER DELSLOTSRANGE": bool_ok,
844
+ # "CLUSTER GETKEYSINSLOT": lambda r: list(map(str_if_bytes, r)),
845
+ # "CLUSTER REPLICAS": parse_cluster_nodes,
846
+ # "CLUSTER SET-CONFIG-EPOCH": bool_ok,
847
+ # "CONFIG RESETSTAT": bool_ok,
848
+ # "DEBUG OBJECT": parse_debug_object,
849
+ # "FUNCTION DELETE": bool_ok,
850
+ # "FUNCTION FLUSH": bool_ok,
851
+ # "FUNCTION RESTORE": bool_ok,
852
+ # "MEMORY PURGE": bool_ok,
853
+ # "MEMORY USAGE": int_or_none,
854
+ # "MODULE LOAD": parse_module_result,
855
+ # "MODULE UNLOAD": parse_module_result,
856
+ # "OBJECT": parse_object,
857
+ # "QUIT": bool_ok,
858
+ # "STRALGO": parse_stralgo,
859
+ # "RANDOMKEY": lambda r: r and r or None,
860
+ # "SCRIPT EXISTS": lambda r: list(map(bool, r)),
861
+ # "SCRIPT KILL": bool_ok,
862
+ # "SENTINEL CKQUORUM": bool_ok,
863
+ # "SENTINEL FAILOVER": bool_ok,
864
+ # "SENTINEL FLUSHCONFIG": bool_ok,
865
+ # "SENTINEL GET-MASTER-ADDR-BY-NAME": parse_sentinel_get_master,
866
+ # "SENTINEL MASTER": parse_sentinel_master,
867
+ # "SENTINEL MASTERS": parse_sentinel_masters,
868
+ # "SENTINEL MONITOR": bool_ok,
869
+ # "SENTINEL RESET": bool_ok,
870
+ # "SENTINEL REMOVE": bool_ok,
871
+ # "SENTINEL SENTINELS": parse_sentinel_slaves_and_sentinels,
872
+ # "SENTINEL SET": bool_ok,
873
+ # "SENTINEL SLAVES": parse_sentinel_slaves_and_sentinels,
874
+ # "SLOWLOG RESET": bool_ok,
875
+ # "XGROUP CREATE": bool_ok,
876
+ # "XGROUP DESTROY": bool,
877
+ # "XGROUP SETID": bool_ok,
878
+ "XINFO CONSUMERS" : parse_list_of_dicts ,
879
+ "XINFO GROUPS" : parse_list_of_dicts ,
885
880
}
886
881
887
882
RESP3_RESPONSE_CALLBACKS = {
@@ -1122,6 +1117,8 @@ def __init__(
1122
1117
1123
1118
if self .connection_pool .connection_kwargs .get ("protocol" ) in ["3" , 3 ]:
1124
1119
self .response_callbacks .update (self .__class__ .RESP3_RESPONSE_CALLBACKS )
1120
+ else :
1121
+ self .response_callbacks .update (self .__class__ .RESP2_RESPONSE_CALLBACKS )
1125
1122
1126
1123
def __repr__ (self ):
1127
1124
return f"{ type (self ).__name__ } <{ repr (self .connection_pool )} >"
0 commit comments