
    1iz                        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 Z7dH Z8dI Z9dJ Z:i  e:dKe;       e:dLe<       e:dMe#       e:dNe       e:dOe1       e:dPe      i dQe6dRe#dSe7dTe#dUe#dVe8dWe5dXe%dYe#dZe#d[e#d\e;d]e#d^e#d_e#d`e#dae#i dbe#dce-dde#dee0dfe0dge#dhe#die#dje#dke#dle0dme2dne#doe#dpe#dqe#dre#i dse"dte(duedvedwe#dxe;dye;dzd{ d|e4d}e4d~e#de9de'dd de#de#dei de#de#de#dede#de#de#de#de+de#dede'dd dedede#de;e#ee e)dZ=i  e:dd        e:de       e:de       e:de"       e:dd        e:dd        e:dd       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  e:dd        e:ddÄ        e:de       e:de       e:dNe      dń e3dƄ 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    `/mnt/e/genesis-system/.venvs/voice-bridge/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   optionss     r   parse_sentinel_masterrf      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   re   r\   r;   r(   rJ   s         r   parse_sentinel_state_resp3ri      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   re   r\   r+   states        r   parse_sentinel_mastersrl      s<    F &$St%<= %uV}& Mr   c                 >    | D cg c]  }t        |       c}S c c}w ra   ri   )r   re   rL   s      r   parse_sentinel_masters_resp3ro      s    =EF6&v.FFF   c           	      Z    | D cg c]  }t        t        t        |             c}S c c}w ra   rb   r   re   r+   s      r   #parse_sentinel_slaves_and_sentinelsrs      s#    FNOd \4!89OOOs    (c                 @    | D cg c]  }t        |fi | c}S c c}w ra   rn   rr   s      r   )parse_sentinel_slaves_and_sentinels_resp3ru      s!    DLMD&t7w7MMMs   c                 8    | xr | d   t        | d         fxs d S Nr   r%   r   rd   s     r   parse_sentinel_get_masterry      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   )r}   r|   rh   )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&   r}   rC   r|   rc   )r   re   r   r   s       r   zset_score_pairsr      sJ    
 7;;|4kk"3U;O	hBBOR0122r   c                 x    | r|j                  d      s| S |j                  dt              }| d    || d         gS zi
    If ``withscores`` is specified in the options, return the response as
    a [value, score] pair
    	withscorer   r   r%   r   r&   r   re   r   s      r   zset_score_for_rankr      @    
 7;;{3kk"3U;OQK!566r   c                     | r|j                  d      s| S |j                  dt              }| D cg c]  \  }}| ||      g c}}S c c}}w )zr
    If ``withscores`` is specified in the options, return the response as
    a list of [value, score] pairs
    r   r   r   )r   re   r   r]   vals        r   zset_score_pairs_resp3r      sJ    
 7;;|4kk"3U;O:BCYT3T?3'(CCCs   A	c                 x    | r|j                  d      s| S |j                  dt              }| d    || d         gS r   r   r   s      r   zset_score_for_rank_resp3r      r   r   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   r|   range)r   re   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 ]e  }|Pd|v r)|j                  |d   t        |d         g|dd         2|j                  |d   t        |d         f       U|j                  d       g |S )Nclaim_min_idle_timer   r%   r{   )NN)r8   r@   )r   re   datars       r   parse_stream_listr     s    D &=$/QqT=1#6?12?@QqT=1#678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   rd   s     r   parse_xclaimr   &  s     {{>5)X&&r   c                 V    |j                  dd      r| d   S t        | d         | d<   | S )Nr   Fr%   r   rd   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   re   r   r,   r)   firstlast_identrygroupgcs               r   parse_xinfo_streamr   3  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           	      X    | g S | D cg c]  }|d   t        |d   fi |g c}S c c}w rw   )r   )r   re   r   s      r   parse_xreadr   R  s9    	@HI1QqT$QqT5W56IIIs   'c           
      t    | i S | j                         D ci c]  \  }}|t        |fi |g c}}S c c}}w ra   )rA   r   )r   re   r;   r(   s       r   parse_xread_resp3r   X  sH    	EM^^EU7AsE1122  s   4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%   r{   )r   minmaxr   )r   parse_xpending_ranger   )r   re   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   r|   )r   r,   r   s      r   r   r   l  s%    MA%-.DQO...s   &c                     | y t        |       S ra   r&   r
   s    r   float_or_noner   q  s    ?r   c                     t        |       dk(  S NOKr   rd   s     r   bool_okr   w  s    !T))r   c                 V    | y |j                  d      rt        |       S t        |       S )Nas_score)r   r&   r   rd   s     r   
parse_zaddr   {  s+    {{:Xx=r   c                    g }t        |       j                         D ]c  }i }|j                  d      }d }|D ]3  }d|v r|j                  dd      \  }}	|	||<   |}$||xx   d|z   z  cc<   5 |sS|j                  |       e |S )N r#   r%   )r   r4   r   r8   )
r   re   clientsr   client_dicttokenslast_keytokenr;   r(   s
             r   parse_client_listr     s    G(#..0 ( 		5Ee|"[[a0
U#(C  H%u4%		5 NN;'!(" Nr   c                 j    | D cg c]  }|t        |      nd  } }| xr t        |       xs i S c c}w ra   )r   r@   )r   re   r   s      r   parse_config_getr     s=    DLMq1=Qd:MHM/h/525 Ns   0c                 &    | \  }}t        |      |fS ra   rx   )r   re   cursorr   s       r   
parse_scanr     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   re   r   r   r   payloads         r   parse_hscanr     sJ    IFAK/I'r(a(.Bv;r   c           
          |j                  dt              }| \  }}t        |      }t        |      t	        t        |t        ||                  fS )Nr   )r   r&   r}   r   rC   r|   rc   )r   re   r   r   r   r   s         r   parse_zscanr     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   re   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%   r{   )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   re   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   r{   r   )r   r   rC   rc   tupler   )r   re   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   rd   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  rk   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   rd   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 rw   r   lls    r   <lambda>z)parse_geosearch_generic.<locals>.<lambda>F  s    r!uuRU| < r   )r1  r2  r3  c                     | S ra    xs    r   r7  z)parse_geosearch_generic.<locals>.<lambda>L  s    1 r   )r1  r3  r2  c                      | d   | d         S rw   r9  )fvs    r   r7  z)parse_geosearch_generic.<locals>.<lambda>N  s    1be r   )KeyErrorrB   rC   r&   r   rc   r|   )r   re   response_listcastfor   s          r   parse_geosearch_genericrC  -  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%   arityr{   rJ   r   first_key_posr   last_key_posr   
step_countr   tipsr  key_specificationsr  subcommands)r   r   r   r   re   commandsr   cmd_dictcmd_namer^   s          r   parse_commandrP  Q  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%   rE  r{   rJ   r   rF  r   rG  r   rH  r   acl_categoriesr   rI  r  rJ  r  rK  )r   r   rL  s          r   parse_command_resp3rS  d  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   r{   r%   )rC   r|   rd   s     r   parse_pubsub_numsubrU  y  s(    HQTTNHQTTN344r   c                 B    t        | t              r| S t        |       dk(  S r   )rB   r   r   rd   s     r   parse_client_killrW  }  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   	passwordsrM  r~   r   r
  channels	selectorsr   r	  
categoriesonenabled)
rB   rC   r@   rA   r   rc   r+  r,  r   r8   )r   re   r   r;   r(   selectorr,   r)   rM  r\  r   s              r   parse_acl_getuserr`    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   re   r   loglog_dataclient_infos         r   parse_acl_logrf    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 ]  }||v s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(   re  r9   r;   int_keys        r   rb  rb    s    
 KU#))+113 !ZZ_
U C!
 =  k!#&{7';#<K #=$ 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   rd   s     r   parse_set_resultrx    s,     {{5 6X.$66r   c                 J    t         j                  | j                         |      S ra   )r   fromkeysr   )
key_stringcallbacks     r   string_keys_to_dictr}    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   r7  r7  -  s    l1o/ r   zPUBSUB NUMSUBzPUBSUB SHARDNUMSUBQUITSETSCANzSCRIPT EXISTSc                 4    t        t        t        |             S ra   )rC   rc   boolr  s    r   r7  r7  3  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 rw   rx   r:  s    r   r7  r7  C  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[   r  s    r   r7  r7  Q      !,A2G#% r   zSZDIFF ZINTER ZPOPMAX ZPOPMIN ZRANGE ZRANGEBYSCORE ZREVRANGE ZREVRANGEBYSCORE ZUNIONzZREVRANK ZRANKzZINCRBY ZSCOREzBGREWRITEAOF BGSAVEc                      y)NTr9  r  s    r   r7  r7  ]  s    r   zBLPOP BRPOPc                 (    | xr t        |       xs d S ra   )r   r  s    r   r7  r7  ^  s    1>q3IT r   zBZPOPMAX BZPOPMINc                 @    | xr | d   | d   t        | d         fxs d S )Nr   r%   r{   r   r  s    r   r7  r7  `  s'    q'FadAaD%!+-F'N$ r   zACL CATc                 4    t        t        t        |             S ra   rC   rc   r   r  s    r   r7  r7  b      c,23 r   zACL GENPASSzACL HELPc                 4    t        t        t        |             S ra   r  r  s    r   r7  r7  d      $s<34 r   zACL LISTc                 4    t        t        t        |             S ra   r  r  s    r   r7  r7  e  r  r   z	ACL USERSc                 4    t        t        t        |             S ra   r  r  s    r   r7  r7  f  s    4L! 45 r   z
ACL WHOAMIzCLIENT GETNAMEzCLIENT TRACKINGINFOc                 4    t        t        t        |             S ra   r  r  s    r   r7  r7  i  s    T#lA*>%? r   zCLUSTER GETKEYSINSLOTc                 4    t        t        t        |             S ra   r  r  s    r   r7  r7  j  s    tCa,@'A r   zCOMMAND GETKEYSc                 4    t        t        t        |             S ra   r  r  s    r   r7  r7  k  s    c,&:!; r   
CONFIG GETzDEBUG OBJECTGEOHASHc                 4    t        t        t        |             S ra   r  r  s    r   r7  r7  n  r  r   GEOPOSc                 .    t        t        d |             S )Nc                 B    | t        | d         t        | d         fS d S rw   r   r5  s    r   r7  z<lambda>.<locals>.<lambda>p  s#    r~beeBqEl3 4 r   )rC   rc   r  s    r   r7  r7  o  s    OQRS r   HGETALLc                 (    | xr t        |       xs i S ra   r   r  s    r   r7  r7  r  s    /}Q/52 r   MEMORY STATSzMODULE LISTc                 >    | D cg c]  }t        |       c}S c c}w ra   r   )r   ms     r   r7  r7  t  s    :1mA.: :rp   )
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  r  s    r   r7  r7    r  r   z0ZRANGE ZINTER ZPOPMAX ZPOPMIN HGETALL XREADGROUPc                     | S ra   r9  )r   rD   s     r   r7  r7    s    A r   z6ZRANGE ZRANGEBYSCORE ZREVRANGE ZREVRANGEBYSCORE ZUNIONc                     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   r7  r7    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   r7  r7    sL     '')	 C !_S$#(#4L$	?  s   '?c                 h    | j                         D ci c]  \  }}t        |      | c}}S c c}}w ra   r  r  s      r   r7  r7    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   re   r;   r(   s       r   r7  r7    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   r7  r7    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   r7  r7    sC    HI CDAGGI>jc5c	E	!> >r  )r~  r  r  r  r  r  r  r  r  r  r  )FF)@r   redis.utilsr   r   r   r<   rF   r   rZ   r_   rf   ri   rl   ro   rs   ru   ry   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  r  r  r-  rC  rP  rS  rU  rW  r`  rf  rb  rx  r}  r  r&   _RedisCallbacks_RedisCallbacksRESP2_RedisCallbacksRESP3r9  r   r   <module>r     s    $5$0fsC s 	
 C # # s c S 3 3 # 3   c!" C#$ / 6 =
GPN@!&	37D7:5<'>J	/
*,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0&(G0 	"	0 0 *M:0 /@0 -)IJ0  N!0& 3'0( <)0* 4+0, 4-0. 5/00 ,102 l304 ?506 A708 ;90: ";0< &=0> 3?0@  A0F 5G0H &I0J :K0L ,.=:*'_0 f0&(G0 :	0 @0 !0  ,.?@!0" # U14C@
[0 r   