
    j,g r                     l   d dl Z d dlmZ d Zd Zd Zd Zi deded	ed
edededededededededededededeeeeeeedZd Z	d Z
d Zd Zd Zd Zd Zd  Zdd!Zd" Zd# Zd$ Zd% Zd& Zd' Zd( Zd) Zd* Zd+ Zd, Zd- Zd. Zd/ Zd0 Z d1 Z!d2 Z"d3 Z#d4 Z$d5 Z%d6 Z&d7 Z'd8 Z(d9 Z)d: Z*d; Z+d< Z,d= Z-d> Z.d? Z/d@ Z0dA Z1dB Z2dC Z3dD Z4dE Z5dF Z6dG Z7i  e7dHe8       e7dIe9       e7dJe        e7dKe       e7dLe.       e7dMe      i dNe3dOe dPe4dQe dRe dSe5dTe2dUe"dVe dWe dXe dYe8dZe d[e d\e d]e d^e i d_e d`e*dae dbe-dce-dde dee dfe dge dhe die-dje/dke dle dme dne doe i dpedqe%dredsedte due8dve8dwdx dye1dze1d{e d|e6d}e$d~d de de dei de de de dede de de de de(de dede$dd dedede de8e eee&dZ:i  e7dd        e7de       e7de       e7dd        e7dd        e7dd       i dd dedd dd dd dededd dd dd de#dedd dd dd dedd ee
eeee)eee!e'd
Z;i  e7dd        e7dd        e7dKe      d e0d d eeeedÄ dĄ dń dƜZ<y)    Nstr_if_bytesc                 |    | sy	 t        |       } t        j                  j                  |       S # t        $ r Y yw xY w)z5Converts a unix timestamp to a Python datetime objectN)int
ValueErrordatetimefromtimestampresponses    p/var/www/trellinator.diamondhoofcare.com/public_html/venv/lib/python3.12/site-packages/redis/_parsers/helpers.pytimestamp_to_datetimer      sC    x= **844  s   / 	;;c                     t        |       } d| z   } t        d | j                         D              } d}|D ]  }|| v st        | |         | |<    | S )zDParse the results of Redis's DEBUG OBJECT command into a Python dictztype:c              3   >   K   | ]  }|j                  d         yw:Nsplit).0kvs     r   	<genexpr>z%parse_debug_object.<locals>.<genexpr>   s     =bBHHSM=s   )refcountserializedlengthlrulru_seconds_idle)r   dictr   r   )r   
int_fieldsfields      r   parse_debug_objectr      sg     H%H!H=HNN,<==H MJ 3H!(5/2HUO3 O    c                    i }t        |       } fd| j                         D ]  }|s|j                  d      r|j                  d      dk7  rh|j	                  dd      \  }}|dk(  r|j                  dd      \  }}|dk(  r(|j                  dg       j                   |              |      ||<   |j                  d	g       j                  |        |S )
z;Parse the result of Redis's INFO command into a Python dictc                 \   d| vrd| vr	 d| v rt        |       S t        |       S d| vr(| j                  d      D cg c]  }|s |       c}S i }| j                  d      D ]/  }|sd|v r!|j	                  dd      \  }} |      ||<   +d||<   1 |S # t        $ r | cY S w xY wc c}w )N,=.   T)floatr   r   r   rsplit)valuevsub_dictitemk	get_values        r   r-   zparse_info.<locals>.get_value(   s    e5 0%< <'u:% */++c*:@QaIaL@@HC( *$;;;sA.DAq"+A,HQK%)HTN* O   As!   B 
B B)
B)B&%B&#r   r%   cmdstat_hostmodulemodules__raw__)r   
splitlines
startswithfindr   r'   
setdefaultappend)r   infolinekeyr(   r-   s        @r   
parse_infor<   #   s    DH%H. ##% <,yy~# "ZZQ/
U.(!%S!!4JC(? OOIr299)E:JK )% 0DI 	2.55d;%<( Kr   c                     t        | dd      }|j                         D ]9  \  }}|j                  d      st        |t              s)t        |dd      ||<   ; |S )z!Parse the results of MEMORY STATST)decode_keysdecode_string_valueszdb.)pairs_to_dictitemsr5   
isinstancelist)r   kwargsstatsr;   r(   s        r   parse_memory_statsrF   V   sZ    (4PEkkm 
U>>% Zt%<&4dE#J
 Lr   zcan-failover-its-masterzconfig-epochzdown-after-millisecondszfailover-timeoutzinfo-refreshzlast-hello-messagezlast-ok-ping-replyzlast-ping-replyzlast-ping-sentzmaster-link-down-timezmaster-portznum-other-sentinelsz
num-slaveszo-down-timezpending-commandszparallel-syncsport)quorumzrole-reported-timezs-down-timezslave-priorityzslave-repl-offsetzvoted-leader-epochc                     t        | t              }t        |d   j                  d            }dD ]  \  }}||v ||<    |S )Nflagsr"   ))	is_mastermaster)is_slaveslave)is_sdowns_down)is_odowno_down)is_sentinelsentinel)is_disconnecteddisconnected)is_master_downmaster_down)pairs_to_dict_typedSENTINEL_STATE_TYPESsetr   )r+   resultrJ   nameflags        r   parse_sentinel_stater_   |   sS     ';<Fw%%c*+E 	%
d u}t	% Mr   c                 4    t        t        t        |             S Nr_   mapr   r
   s    r   parse_sentinel_masterrd      s    L( ;<<r   c                     i }| D ]+  }	 t        |   t        | |               }||t        |      <   - t        |d   j	                  d            }||d<   |S # t        $ r | t        |         |t        |      <   Y ww xY w)NrJ   r"   )rZ   r   	Exceptionr[   r   )r   r\   r;   r(   rJ   s        r   parse_sentinel_state_resp3rg      s    F D	D(-l8C=.IJE(-F<$%D w%%c*+EF7OM	  	D(0c1B(CF<$%	Ds   (A#A=<A=c                 Z    i }| D ]#  }t        t        t        |            }|||d   <   % |S )Nr]   rb   )r   r\   r+   states       r   parse_sentinel_mastersrj      s<    F &$St%<= %uV}& Mr   c                 >    | D cg c]  }t        |       c}S c c}w ra   )r_   )r   rL   s     r   parse_sentinel_masters_resp3rl      s    7?@V (@@@   c           	      Z    | D cg c]  }t        t        t        |             c}S c c}w ra   rb   r   r+   s     r   #parse_sentinel_slaves_and_sentinelsrp      s#    FNOd \4!89OOOs    (c                 >    | D cg c]  }t        |       c}S c c}w ra   )rg   ro   s     r   )parse_sentinel_slaves_and_sentinels_resp3rr      s    9AB&t,BBBrm   c                 8    | xr | d   t        | d         fxs d S Nr   r%   r   r
   s    r   parse_sentinel_get_masterrv      s$    7!c(1+&67?4?r   c                     | i S |s|rI| ddd   }|rt        t        |      }| ddd   }|rt        t        |      }t        t        ||            S t	        |       }t        t        ||            S )z-Create a dict given a list of key/value pairsN   r%   )rc   r   r   zipiter)r   r>   r?   keysvaluesits         r   r@   r@      s{    	* !}|T*D!$Q$v.FCf%&&(^CBK  r   c                     t        |       }i }t        ||      D ]  \  }}||v r	  ||   |      }|||<    |S # t        $ r Y w xY wra   )rz   ry   rf   )r   	type_infor}   r\   r;   r(   s         r   rY   rY      sn    	hBF"bk 
U)&	#u-
 s M   s   9	AAc           	          | r|j                  d      s| S |j                  dt              }t        |       }t        t	        |t        ||                  S )zr
    If ``withscores`` is specified in the options, return the response as
    a list of (value, score) pairs
    
withscoresscore_cast_func)getr&   rz   rC   ry   rc   )r   optionsr   r}   s       r   zset_score_pairsr      sJ    
 7;;|4kk"3U;O	hBBOR0122r   c                     | r|j                  d      s| S |d   }t        t        t        |      D cg c]
  }| |d|    c}       S c c}w )z
    If ``groups`` is specified, return the response as a list of
    n-element tuples with n being the value found in options['groups']
    groupsN)r   rC   ry   range)r   r   nis       r   sort_return_tuplesr      sM    
 7;;x0AeAh7hqt!tn78997s   A	c                     | y g }| D ]8  }|#|j                  |d   t        |d         f       (|j                  d       : |S )Nr   r%   )NN)r8   r@   )r   datars      r   parse_stream_listr      sU    D &=KK1}QqT234KK%	&
 Kr   c                     t        | d      S )NTr>   r@   r
   s    r   pairs_to_dict_with_str_keysr      s    t44r   c                 4    t        t        t        |             S ra   )rC   rc   r   r
   s    r   parse_list_of_dictsr      s    /:;;r   c                 @    |j                  dd      r| S t        |       S )Nparse_justidFr   r   r   r   s     r   parse_xclaimr     s     {{>5)X&&r   c                 V    |j                  dd      r| d   S t        | d         | d<   | S )Nr   Fr%   r   r   s     r   parse_xautoclaimr     s1    {{>5){#HQK0HQKOr   c                    t        | t              rt        | d      }n,| j                         D ci c]  \  }}t	        |      | }}}|j                  dd      sR|j                  d      }||d   |d   t        |d         f|d<   |d   }||d   |d   t        |d         f|d<   |S |d	   D ci c]  \  }}|t        |       c}}|d	<   t        |d
         dkD  rst        |d
   d   t              r]|d
   D 	cg c]  }	t        |	d       c}	|d
<   |d
   D ]2  }
|
d   s	|
d   d   |
d   D cg c]  }t        |d       c}|
d<   4 |S |d
   D 	cg c]/  }	|	j                         D ci c]  \  }}t	        |      | c}}1 c}}}	|d
<   |S c c}}w c c}}w c c}	w c c}w c c}}w c c}}}	w )NTr   fullFzfirst-entryr   r%   z
last-entryentriesr   	consumers)rB   rC   r@   rA   r   r   len)r   r   r   r,   r)   firstlast_identrygroupgcs               r   parse_xinfo_streamr     s   (D!X48/7~~/?@tq!Q"@@;;vu%'q!5#(8]58-D"EDL!Q 3"&q'=a+A!BD" K HLIWe3e 44WYtH~"z$x.2CT'JDHN;@e6DN (^ [>anQ&7&CDEkN&?@aT:&AkN K "(^  16>1a!#>DN K1 A X
&
 ?s/   F7F%F+:F0!F;9F5F;5F;c                 V    | g S | D cg c]  }|d   t        |d         g c}S c c}w rt   )r   )r   r   s     r   parse_xreadr   .  s4    	5=>QqT$QqT*+>>>s   &c                 r    | i S | j                         D ci c]  \  }}|t        |      g c}}S c c}}w ra   )rA   r   )r   r;   r(   s      r   parse_xread_resp3r   4  s:    	>Fnn>NO
UC#E*++OOOs   3c                     |j                  dd      rt        |       S | d   xs g D cg c]  \  }}|t        |      d }}}| d   | d   | d   |dS c c}}w )	Nparse_detailF   )r]   pendingr   r%   rx   )r   minmaxr   )r   parse_xpending_ranger   )r   r   r   pr   s        r   parse_xpendingr   :  sl    {{>5)#H--<DQK<M2NDAq!A/NINA;{{	  Os   Ac           	      V    d}| D cg c]  }t        t        ||             c}S c c}w )N)
message_idconsumertime_since_deliveredtimes_delivered)r   ry   )r   r,   r   s      r   r   r   F  s%    MA%-.DQO...s   &c                     | y t        |       S ra   r&   r
   s    r   float_or_noner   K  s    ?r   c                     t        |       dk(  S NOKr   r   s     r   bool_okr   Q  s    !T))r   c                 V    | y |j                  d      rt        |       S t        |       S )Nas_score)r   r&   r   r   s     r   
parse_zaddr   U  s+    {{:Xx=r   c           	          g }t        |       j                         D ]2  }|j                  t        d |j	                  d      D                     4 |S )Nc              3   @   K   | ]  }|j                  d d        yw)r#   r%   Nr   )r   pairs     r   r   z$parse_client_list.<locals>.<genexpr>a  s     H4DJJsA.Hs    )r   r4   r8   r   r   )r   r   clientsr   s       r   parse_client_listr   ]  sL    G(#..0 JtH1773<HHIJ Nr   c                 j    | D cg c]  }|t        |      nd  } }| xr t        |       xs i S c c}w ra   )r   r@   )r   r   r   s      r   parse_config_getr   e  s=    DLMq1=Qd:MHM/h/525 Ns   0c                 &    | \  }}t        |      |fS ra   ru   )r   r   cursorr   s       r   
parse_scanr   j  s    IFAv;>r   c                     | \  }}|j                  dd      }|r|xs g }n|xr t        |      xs i }t        |      |fS )N	no_valuesF)r   r@   r   )r   r   r   r   r   payloads         r   parse_hscanr   o  sJ    IFAK/I'r(a(.Bv;r   c           
          |j                  dt              }| \  }}t        |      }t        |      t	        t        |t        ||                  fS )Nr   )r   r&   rz   r   rC   ry   rc   )r   r   r   r   r   r}   s         r   parse_zscanr   y  sG    kk"3U;OIFA	aBv;SS"%=>???r   c                 F    | D cg c]  }|t        |      nd  c}S c c}w ra   r   )r   r   scores      r   parse_zmscorer     s$    EMNEE-E%L47NNNs   c                 p    |j                  dd      rdndfd}| D cg c]
  } ||       c}S c c}w )Ndecode_responsesFr       c                 X   | d   t        | d         t        | d         d}t        | d   t              r7j                  | d         |d<   t	        |       dk\  r| d   |d	<   | d
   |d<   |S | d   |d<   j                  | d         |d<   t	        |       dk\  r| d
   |d	<   | d   |d<   |S )Nr   r%   rx   )id
start_timedurationr   command      client_address   client_name
complexity   )r   rB   rC   joinr   )r+   r\   spaces     r   
parse_itemz%parse_slowlog_get.<locals>.parse_item  s    Qs47|TRSWV d1gt$ %

47 3F9 4yA~+/7'((,Q}%  $(7F<  %

47 3F9 4yA~+/7'((,Q}%r   )r   )r   r   r   r+   r   s       @r   parse_slowlog_getr     s8    ;;159CtE. *22Jt222s   3c                    |j                  dd      rt        |       S |j                  dd      r|j                  dd      r=| d   D cg c].  }t        |d         gt        t        t        |dd             z   0 }}n)| d   D cg c]  }t        t        t        |             }}t        | d         |t        | d	         t        | d
         iS t        |       S c c}w c c}w )a  
    Parse the response from `STRALGO` command.
    Without modifiers the returned value is string.
    When LEN is given the command returns the length of the result
    (i.e integer).
    When IDX is given the command returns a dictionary with the LCS
    length and all the ranges in both the strings, start and end
    offset for each string, where there are matches.
    When WITHMATCHLEN is given, each array representing a match will
    also have the length of the match at the beginning of the array.
    r   Fidxwithmatchlenr%   r/   Nr   rx   r   )r   r   rC   rc   tupler   )r   r   matchmatchess       r   parse_stralgor     s     {{5% 8}{{5% ;;~u- &a[ eBi."T#eU3BZ*@%AAG 
 =EQKH5tCu-.HGH!%w!%s8A;'7
 	
 !!
 Is   	3C C"c                 X    t        |       } t        d | j                         D              S )Nc              3   D   K   | ]  }|s|j                  d         ywr   r   )r   r:   s     r   r   z%parse_cluster_info.<locals>.<genexpr>  s     JDT

3Js     )r   r   r4   r   s     r   parse_cluster_infor     s&    H%HJH,?,?,AJJJr   c                 j   | j                  d      }| j                  d      d d \  }}}}}}}}	|j                  d      d   }
d|v r*d|v r&|j                  d      d   j                  d      d   nd}|||||||g g |	dk(  rd	nd
d
}t        |      dk\  rt        |dd        \  }}||c|d<   |d<   |
|fS )Nr      @r   r"   r%    	connectedTF)
node_idhostnamerJ   	master_idlast_ping_sentlast_pong_rcvdepochslots
migrationsr   	   r  r  )r   r   _parse_slots)r:   
line_itemsr   addrrJ   r   pingpongr  r   ipr   	node_dictr  r  s                  r   _parse_node_liner    s    CJDHJJsOTVUVDWAGT5)T4		C	B36$;3$;tzz#q!'',Q/TVH&+5T5I :!(AB8z6;Z3	'Il3y=r   c                 P   g g }}| D ]  }d|v r.|dd j                  dd      \  }}|j                  ||dd       5d|v r.|dd j                  dd      \  }}|j                  ||dd       g|j                  d      D cg c]  }| }}|j                  |        ||fS c c}w )	Nz->-r%   r/   	migrating)slotr   ri   z-<-	importing-)r   r8   )slot_rangesr  r  s_rangeslot_iddst_node_idsrc_node_idsls           r   r  r    s    B:E "G#*1R=#6#6ua#@ G[ [;O g#*1R=#6#6ua#@ G[ [;O %,MM#$67br7G7LL!" * 8s   	B#c                 r    t        | t        t        f      r| j                         } t	        d | D              S )z
    @see: https://redis.io/commands/cluster-nodes  # string / bytes
    @see: https://redis.io/commands/cluster-replicas # list of string / bytes
    c              3   D   K   | ]  }t        t        |              y wra   )r  r   )r   nodes     r   r   z&parse_cluster_nodes.<locals>.<genexpr>  s     J d!34Js    )rB   strbytesr4   r   r   s     r   parse_cluster_nodesr    s1    
 (S%L)&&(JJJJr   c                 \   	 |d   s|d   r| S 	 t        | t              s| g}n| }|d   s|d   s|d   s|S t        d t        d}d g}|d	D cg c]  }||   s	||    c}z  }|D cg c]"  }t        t        d
 t        ||                  $ c}S # t         $ r | cY S w xY wc c}w c c}w )z
    Parse the response of 'GEOSEARCH', GEORADIUS' and 'GEORADIUSBYMEMBER'
    commands according to 'withdist', 'withhash' and 'withcoord' labels.
    store
store_distwithdist	withcoordwithhashc                 :    t        | d         t        | d         fS rt   r   lls    r   <lambda>z)parse_geosearch_generic.<locals>.<lambda>  s    r!uuRU| < r   )r!  r"  r#  c                     | S ra    xs    r   r'  z)parse_geosearch_generic.<locals>.<lambda>  s    1 r   )r!  r#  r"  c                      | d   | d         S rt   r)  )fvs    r   r'  z)parse_geosearch_generic.<locals>.<lambda>  s    1be r   )KeyErrorrB   rC   r&   r   rc   ry   )r   r   response_listcastfor   s          r   parse_geosearch_genericr3    s    
7w|4 O	  5 h%!
 :w{';GJDW <D 
A@	OaGAJ$q'	OOACPQaD,c!Qi89QQ-  * 
PQs#   B 
B$B$)'B)B! B!c                 2   i }| D ]  }i }t        |d         }||d<   t        |d         |d<   |d   D cg c]  }t        |       c}|d<   |d   |d<   |d	   |d
<   |d   |d<   t        |      dkD  r|d   |d<   |d   |d<   |d   |d<   |||<    |S c c}w )Nr   r]   r%   arityrx   rJ   r   first_key_posr   last_key_posr   
step_countr   tipsr   key_specificationsr  subcommands)r   r   r   r   r   commandsr   cmd_dictcmd_namer^   s          r   parse_commandr@    s    H &
+#
O<CAJGD\$/G$+AJ!#*1: !(w<!&qzHV-4QZH)*&-ajH]#%& O Hs   Bc                 0   i }| D ]  }i }t        |d         }||d<   |d   |d<   |d   D ch c]  }t        |       c}|d<   |d   |d<   |d	   |d
<   |d   |d<   |d   |d<   t        |      dkD  r|d   |d<   |d   |d<   |d   |d<   |||<    |S c c}w )Nr   r]   r%   r5  rx   rJ   r   r6  r   r7  r   r8  r   acl_categoriesr   r9  r   r:  r  r;  )r   r   r<  s          r   parse_command_resp3rC  0  s    H &
+##AJ<CAJGD\$/G$+AJ!#*1: !(%,QZ!"w<!&qzHV-4QZH)*&-ajH]#%&  O Hs   Bc           	      D    t        t        | dd d   | dd d               S )Nr   rx   r%   )rC   ry   r   s     r   parse_pubsub_numsubrE  E  s(    HQTTNHQTTN344r   c                 B    t        | t              r| S t        |       dk(  S r   )rB   r   r   r   s     r   parse_client_killrG  I  s!    (C !T))r   c                    | y t        | t              rt        | d      }n,| j                         D ci c]  \  }}t	        |      | }}}t        t        t        |d               |d<   t        t        t        |d               |d<   t	        |d         |d<   t        |d   t              st        |d   t              r)t        t	        |d         j                  d            |d<   |d   dgk(  rg |d<   d	|v r]t        |d	   t              st        |d	   t              r)t        t	        |d	         j                  d            |d	<   |d	   dgk(  rg |d	<   d
|v r|d
   g k7  rDt        |d
   d   t              r.|d
   D cg c]  }t        t        t        |             c}|d
<   nV|d
   g k7  rN|d
   D cg c]8  }|j                         D ci c]  \  }}t	        |      t	        |       c}}: c}}}|d
<   g g }	}|d   j                  d      D ](  }
d|
v r|	j                  |
      n|j                  |
       * ||d<   |	|d<   d|d   v |d<   |S c c}}w c c}w c c}}w c c}}}w )NTr   rJ   	passwordsr=  r{   r   r   channels	selectorsr   r   
categoriesonenabled)
rB   rC   r@   rA   r   rc   r  r  r   r8   )r   r   r   r;   r(   selectorr,   r)   r=  rL  r   s              r   parse_acl_getuserrP  O  s   (D!X48;C>>;KLZS%S!5(LL \4=9:DMStK/@ABD#D$45D$v,$
4<(GLf6<<SABVF|tVTd:&,
4
;KU0S#Lj1A$B$H$H$MND
t#!Dd"z${2CA2F'MBF{BS!6>Sx01!D +"$ !%[ 1! ! ?Gnn>NOdaa,q/1O!D rjH
#))#. S&)Wn
'"(//':RS  D#Dd7m+DOKE M"!
 P!s#   I I <I+I%3I+%I+c                     | y t        | t              rZg }| D ]Q  }t        |dd      }|j                  dd      }t	        |      |d<   t        |d         |d<   |j                  |       S |S t        |       }|S )NTzclient-infor   zage-seconds)rB   rC   r@   r   parse_client_infor&   r8   r   )r   r   r   loglog_dataclient_infos         r   parse_acl_logrV  z  s    (D! 	"C$S$5H",,}b9K&7&DH]# ',H],C&DH]#KK!	" K x Kr   c                     i }t        |       j                         j                         D ]  }|j                  d      \  }} | ||<    dD ]  }t        ||         ||<    |S )zg
    Parsing client-info in ACL Log in following format.
    "key1=value1 key2=value2 key3=value3"
    r#   >   tot-memargv-mem	qbuf-freedbr   ageoblollsubidleomempsubqbufmulti)r   stripr   r   )r(   rU  r9   r;   int_keys        r   rR  rR    sy    
 KU#))+113 !ZZ_
U C!
 9   #;w#78G!9" r   c                 L    |j                  d      r| S | xr t        |       dk(  S )z
    Handle SET result since GET argument is available since Redis 6.2.
    Parsing SET result into:
    - BOOL
    - String when GET argument is used
    r   r   )r   r   r   s     r   parse_set_resultrh    s,     {{5 6X.$66r   c                 J    t         j                  | j                         |      S ra   )r   fromkeysr   )
key_stringcallbacks     r   string_keys_to_dictrm    s    ==))+X66r   zoAUTH COPY EXPIRE EXPIREAT HEXISTS HMSET MOVE MSETNX PERSIST PSETEX PEXPIRE PEXPIREAT RENAMENX SETEX SETNX SMOVEzHINCRBYFLOAT INCRBYFLOATz{ASKING FLUSHALL FLUSHDB LSET LTRIM MSET PFMERGE READONLY READWRITE RENAME SAVE SELECT SHUTDOWN SLAVEOF SWAPDB WATCH UNWATCHzXREAD XREADGROUPz%GEORADIUS GEORADIUSBYMEMBER GEOSEARCHzXRANGE XREVRANGEzACL GETUSERzACL LOADACL LOGzACL SETUSERzACL SAVEzCLIENT INFOzCLIENT KILLzCLIENT LISTzCLIENT PAUSEzCLIENT SETINFOzCLIENT SETNAMEzCLIENT UNBLOCKzCLUSTER ADDSLOTSzCLUSTER ADDSLOTSRANGEzCLUSTER DELSLOTSzCLUSTER DELSLOTSRANGEzCLUSTER FAILOVERzCLUSTER FORGETzCLUSTER INFOzCLUSTER MEETzCLUSTER NODESzCLUSTER REPLICASzCLUSTER REPLICATEzCLUSTER RESETzCLUSTER SAVECONFIGzCLUSTER SET-CONFIG-EPOCHzCLUSTER SETSLOTzCLUSTER SLAVESCOMMANDzCONFIG RESETSTATz
CONFIG SETzFUNCTION DELETEzFUNCTION FLUSHzFUNCTION RESTOREGEODISTHSCANINFOLASTSAVEzMEMORY PURGEzMODULE LOADzMODULE UNLOADPINGc                     t        |       dk(  S )NPONGr   r   s    r   r'  r'    s    l1o/ r   zPUBSUB NUMSUBzPUBSUB SHARDNUMSUBQUITSETSCANzSCRIPT EXISTSc                 4    t        t        t        |             S ra   )rC   rc   boolrw  s    r   r'  r'    s    tCaL1 r   zSCRIPT FLUSHzSCRIPT KILLzSCRIPT LOADzSENTINEL CKQUORUMzSENTINEL FAILOVERzSENTINEL FLUSHCONFIGz SENTINEL GET-MASTER-ADDR-BY-NAMEzSENTINEL MONITORzSENTINEL RESETzSENTINEL REMOVEzSENTINEL SETzSLOWLOG GETzSLOWLOG RESETSORTSSCANTIMEc                 :    t        | d         t        | d         fS rt   ru   r*  s    r   r'  r'    s    s1Q4y#ad), r   
XAUTOCLAIMXCLAIMzXGROUP CREATEzXGROUP DESTROY)zXGROUP SETIDzXINFO STREAMXPENDINGZSCANzSDIFF SINTER SMEMBERS SUNIONc                 8    | xr t        |       xs
 t               S ra   r[   rw  s    r   r'  r'        !,A2G#% r   zbZDIFF ZINTER ZPOPMAX ZPOPMIN ZRANGE ZRANGEBYSCORE ZRANK ZREVRANGE ZREVRANGEBYSCORE ZREVRANK ZUNIONzZINCRBY ZSCOREzBGREWRITEAOF BGSAVEc                      y)NTr)  rw  s    r   r'  r'  $  s    r   zBLPOP BRPOPc                 (    | xr t        |       xs d S ra   )r   rw  s    r   r'  r'  %  s    1>q3IT r   zBZPOPMAX BZPOPMINc                 @    | xr | d   | d   t        | d         fxs d S )Nr   r%   rx   r   rw  s    r   r'  r'  '  s'    q'FadAaD%!+-F'N$ r   zACL CATc                 4    t        t        t        |             S ra   rC   rc   r   rw  s    r   r'  r'  )      c,23 r   zACL GENPASSzACL HELPc                 4    t        t        t        |             S ra   r  rw  s    r   r'  r'  +      $s<34 r   zACL LISTc                 4    t        t        t        |             S ra   r  rw  s    r   r'  r'  ,  r  r   z	ACL USERSc                 4    t        t        t        |             S ra   r  rw  s    r   r'  r'  -  s    4L! 45 r   z
ACL WHOAMIzCLIENT GETNAMEzCLIENT TRACKINGINFOc                 4    t        t        t        |             S ra   r  rw  s    r   r'  r'  0  s    T#lA*>%? r   zCLUSTER GETKEYSINSLOTc                 4    t        t        t        |             S ra   r  rw  s    r   r'  r'  1  s    tCa,@'A r   zCOMMAND GETKEYSc                 4    t        t        t        |             S ra   r  rw  s    r   r'  r'  2  s    c,&:!; r   
CONFIG GETzDEBUG OBJECTGEOHASHc                 4    t        t        t        |             S ra   r  rw  s    r   r'  r'  5  r  r   GEOPOSc                 .    t        t        d |             S )Nc                 B    | t        | d         t        | d         fS d S rt   r   r%  s    r   r'  z<lambda>.<locals>.<lambda>7  s#    r~beeBqEl3 4 r   )rC   rc   rw  s    r   r'  r'  6  s    OQRS r   HGETALLc                 (    | xr t        |       xs i S ra   r   rw  s    r   r'  r'  9  s    /}Q/52 r   MEMORY STATSzMODULE LISTc                 >    | D cg c]  }t        |       c}S c c}w ra   r   )r   ms     r   r'  r'  ;  s    :1mA.: :rm   )
RESETSENTINEL MASTERSENTINEL MASTERSSENTINEL SENTINELSSENTINEL SLAVESSTRALGOXINFO CONSUMERSXINFO GROUPSZADDZMSCOREc                 8    | xr t        |       xs
 t               S ra   r  rw  s    r   r'  r'  K  r  r   z`ZRANGE ZINTER ZPOPMAX ZPOPMIN ZRANGEBYSCORE ZREVRANGE ZREVRANGEBYSCORE ZUNION HGETALL XREADGROUPc                     | S ra   r)  )r   rD   s     r   r'  r'  P  s    A r   c                     t        | t              rH| D cg c]8  }|j                         D ci c]  \  }}t        |      t        |       c}}: c}}}S t	        |       S c c}}w c c}}}w ra   )rB   rC   rA   r   r   r   r+  r;   r(   s       r   r'  r'  S  sl    
 a 	
 	
 GHggiP
U\#U 33P	
  QZ P	
s   A*A$A*$A*c                     | j                         D ci c]"  \  }}|t        |      nd |t        |      nd $ c}}S c c}}w ra   rA   r   r   r;   r(   s      r   r'  r'  \  sL     '')	 C !_S$#(#4L$	?  s   '?c                 h    | j                         D ci c]  \  }}t        |      | c}}S c c}}w ra   r  r  s      r   r'  r'  b  s(    !'')TJC|C0%7T Ts   .c                     t        | t              r6| j                         D ci c]  \  }}t        |      t        |       c}}S t        |       S c c}}w ra   )rB   r   rA   r   )r   r   r;   r(   s       r   r'  r'  g  sM    a CD'')LJCc	L/	/L  !_ Ls   Ac                     | D cg c]/  }|j                         D ci c]  \  }}t        |      | c}}1 c}}}S c c}}w c c}}}w ra   r  r  s       r   r'  r'  l  sC    HI" "CDAGGI>jc5c	E	!>" >"   AA A Ac                     | D cg c]/  }|j                         D ci c]  \  }}t        |      | c}}1 c}}}S c c}}w c c}}}w ra   r  )r   dr;   r(   s       r   r'  r'  o  sC    HI CDAGGI>jc5c	E	!> >r  )rn  ro  r  r  r  r  r  r  r  r  r  )FF)=r   redis.utilsr   r   r   r<   rF   r   rZ   r_   rd   rg   rj   rl   rp   rr   rv   r@   rY   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r3  r@  rC  rE  rG  rP  rV  rR  rh  rm  r|  r&   _RedisCallbacks_RedisCallbacksRESP2_RedisCallbacksRESP3r)  r   r   <module>r     s    $5$0fsC s 	
 C # # s c S 3 3 # 3   c!" C#$ / 6 =
APC@!&	3:	5<'>?P	/
*6

 @O
3:":K
.(K!RH&*5*(V$>77Z	7Z 4e<Z 	CZ ,k:Z /Z" ,.?@#Z$ $%Z& 'Z( })Z* 7+Z, -Z. $/Z0 $1Z2 $3Z4 G5Z6 g7Z8 g9Z: d;Z< =Z> W?Z@ AZB WCZD EZF gGZH &IZJ GKZL (MZN +OZP QZR WSZT 'UZV WZX wYZZ )[Z\ }]Z^ _Z` 'aZb wcZd geZf gZh }iZj [kZl JmZn %oZp GqZr 4sZt TuZv /wZx (yZz -{Z| G}Z~ 
Z@ JAZB 1CZD GEZF 7GZH <IZJ KZL MZN GOZP '(AQZR SZT gUZV wWZX GYZZ $[Z\ W]Z^ _Z` ZaZb ,cZd "eZf lgZh WiZj dkZl &sZz,&(G, 	+	, *M:, /@, -)IJ, N, 3,  <!," 4#,$ 4%,& 5',( ,),* l+,, ?-,. A/,0 ;1,2 "3,4 &5,6 37,8  9,> 5?,@ &A,B :C,D ,.=:*'W, ^)&(G) 	$	) ,.?@) # U14C@
M) r   