
    <i5                     B   d dl Z d dlmZmZmZmZmZmZmZ d dl	Z	d dl
mZ d dlmZ d dlmZmZmZmZmZ d dlmZmZmZmZ d dlmZ d dlmZmZ  G d	 d
          Zddee         de dee         fdZ!dee"         dee"         dee"         dee"         dee"         f
dZ#dS )    N)CallableListAnyOptionalSequenceUnionMapping)_msgs)extract_args)commandKeyIntFloatCommandItem)SimpleErrorOK	casematchSimpleStringcurrent_time)Hash
ClientInfoc            
       
    e Zd ZU eegef         ed<   eeegef         ed<   ee	e         eege
eee
e         f                  f         ed<   dededdf fdZd	ededefd
Z e ee          efef          d	ededefd            Z e ee          ef          d	ededefd            Z e ee          ef          d	ededefd            Z e ee          f          d	edeeef         fd            Z e ee          eef          d	edededefd            Z e ee          eef          d	edededefd            Z e ee          f          d	ede
e         fd            Z e ee          f          d	edefd            Z e ee          efef          d	edede
e         fd            Z e ee          eefeef          d	ededefd            Z e ee          e fef          d	ededede
e         fd            Z! e ee          eefeef          d	ededefd            Z" e ee          eef          d	edededefd            Z# e ee          ef          d	ededefd            Z$ e ee          f          d	ede
e         fd             Z% ed! ee          fef"          d	ededee
e
e                  e
e         df         fd#            Z&d	ed$edede
e         fd%Z'd&ed	edede
e         fd'Z( ed( ee          e fef"          d	ed)edede
e         fd*            Z) ed+ ee          e fef"          d	ed,edede
e         fd-            Z* ed. ee          e fef"          d	ed/edede
e         fd0            Z+ ed1 ee          e fef"          d	ed2edede
e         fd3            Z, ed4 ee          fef"          d	edede
e         fd5            Z- ed6 ee          fefe.j/        d78          d	edede
e         fd9            Z0 ed: ee          fefd7;          d	edede
e         fd<            Z1 ed= ee          fefd7;          d	edede
e         fd>            Z2 ed? ee          fefd7;          d	edede
e         fd@            Z3 edA ee          fefd7;          d	edede
e         fdB            Z4 edC ee          fefd7;          d	ededefdD            Z5 edE ee          fefd7;          d	ededefdF            Z6 xZ7S )GHashCommandsMixin
_encodeint_encodefloat_scanargskwargsreturnNc                 L     t          t          |           j        |i | |  d S N)superr   __init__)selfr   r   	__class__s      /Users/kimhansen/Desktop/03 Workspace/ceo-agents/chl-effectiveness/mcp-servers/whoop/.venv/lib/python3.11/site-packages/fakeredis/commands_mixins/hash_mixin.pyr$   zHashCommandsMixin.__init__   s2    /&&/@@@@%%%    keyc           	      >   |j         }t          |                                          }|                    t	          t          t          |          gdz             d           t          |                                          |z
  }|                                 |S )N   Tclear_expiration)valuelenkeysupdatedictzipiterupdated)r%   r)   r   hprevious_keys_countcreateds         r'   _hsetzHashCommandsMixin._hset   sx    I!!&&((mm	cDJJ<!+,--EEEaffhh--"55r(   fieldsc                 b    |j         }d}|D ]"}||v r||= |                                 |dz  }#|S )Nr      )r.   r5   )r%   r)   r:   r6   remfields         r'   hdelzHashCommandsMixin.hdel%   sI    I 	 	EzzeHq
r(   r>   c                 .    t          ||j        v           S r"   )intr.   r%   r)   r>   s      r'   hexistszHashCommandsMixin.hexists0   s    5CI%&&&r(   c                 6    |j                             |          S r"   r.   getrB   s      r'   hgetzHashCommandsMixin.hget4   s    y}}U###r(   c                 4    |j                                         S r"   )r.   getallr%   r)   s     r'   hgetallzHashCommandsMixin.hgetall8   s    y!!!r(   )fixedamount_bytesc                 4   t          j        |          }t          j        |j                            |d          t          j                  }||z   }|j                            ||                     |          id           |                                 |S )N   0)decode_errorFr,   )	r   decoder.   rF   msgsINVALID_HASH_MSGr1   r   r5   )r%   r)   r>   rM   amountfield_valuecs          r'   hincrbyzHashCommandsMixin.hincrby<   s    L))jud!;!;$J_```& 	%!3!34uMMMr(   rT   c                 t   t          j        |j                            |d                    t          j        |          z   }t	          j        |          st          t          j                  | 	                    |d          }|j        
                    ||id           |                                 |S )NrO   TFr,   )r   rQ   r.   rF   mathisfiniter   rR   NONFINITE_MSGr   r1   r5   )r%   r)   r>   rT   rV   encodeds         r'   hincrbyfloatzHashCommandsMixin.hincrbyfloatE   s    Lud3344u|F7K7KK}Q 	2d0111##At,,	%)EBBBr(   c                 N    t          |j                                                  S r"   )listr.   r0   rJ   s     r'   hkeyszHashCommandsMixin.hkeysO   s    CINN$$%%%r(   c                 *    t          |j                  S r"   )r/   r.   rJ   s     r'   hlenzHashCommandsMixin.hlenS   s    39~~r(   c                      fd|D             S )Nc                 D    g | ]}j                             |          S  rE   ).0r>   r)   s     r'   
<listcomp>z+HashCommandsMixin.hmget.<locals>.<listcomp>Y   s'    999	e$$999r(   re   )r%   r)   r:   s    ` r'   hmgetzHashCommandsMixin.hmgetW   s    9999&9999r(   c                 ,     | j         |g|R   t          S r"   )hsetr   r%   r)   r   s      r'   hmsetzHashCommandsMixin.hmset[   s!    	#	r(   cursorc                 "   t          d |D                       }|rd |D             } | j        |j        |g|R  \  }}d |D             }|r||gS g }|D ]7}|                    |           |                    |j        |                    8||gS )Nc              3   6   K   | ]}t          |d           V  dS )   novaluesNr   rf   args     r'   	<genexpr>z*HashCommandsMixin.hscan.<locals>.<genexpr>b   s,      DD	#{33DDDDDDr(   c                 2    g | ]}t          |d           |S )rp   rq   rr   s     r'   rg   z+HashCommandsMixin.hscan.<locals>.<listcomp>d   s'    KKKCyk/J/JKCKKKr(   c                 b    g | ],}t          |t                    |                    d           -S )zutf-8)
isinstancestrencode)rf   ks     r'   rg   z+HashCommandsMixin.hscan.<locals>.<listcomp>f   s3    FFFa:a3E3EF!!FFFr(   )anyr   r.   append)r%   r)   rm   r   	no_valuesr0   itemsrz   s           r'   hscanzHashCommandsMixin.hscan`   s    DDtDDDDD	 	LKK4KKKD!tz#)V;d;;;FF4FFF 	"D>! 	' 	'ALLOOOLL1&&&&r(   c                      | j         |g|R  S r"   )r9   rk   s      r'   rj   zHashCommandsMixin.hseto   s    tz#%%%%%r(   r.   c                 F    ||j         v rdS |                     |||          S )Nr   )r.   r9   )r%   r)   r>   r.   s       r'   hsetnxzHashCommandsMixin.hsetnxs   s*    CI1zz#ue,,,r(   c                 R    t          |j                            |d                    S )Nr(   )r/   r.   rF   rB   s      r'   hstrlenzHashCommandsMixin.hstrleny   s     39==,,---r(   c                 N    t          |j                                                  S r"   )r_   r.   valuesrJ   s     r'   hvalszHashCommandsMixin.hvals}   s    CI$$&&'''r(   
HRANDFIELD)namerL   repeatc                 
   t          |          dk    rt          t          j                  |j        t          |j                  dk    rd S t          t          |          dk    rt          j        |d                   ndt          |j                            }t          |          dk    rt          |d         d          nd}|dk    ri S |dk     r<t          j
        t          |j                                                  |           }n9t          j        t          |j                                                  |          }|r*| j        j        dk    rd |D             }nd |D             }nd	 |D             }|S )
Nr+   r   r<   s
   withvaluesF)rz   c                     g | ]	}|D ]}|
S re   re   )rf   titems      r'   rg   z0HashCommandsMixin.hrandfield.<locals>.<listcomp>   s%    777Q77Tt7777r(   c                 ,    g | ]}t          |          S re   )r_   rf   r   s     r'   rg   z0HashCommandsMixin.hrandfield.<locals>.<listcomp>   s    ,,,1tAww,,,r(   c                     g | ]
}|d          S r   re   r   s     r'   rg   z0HashCommandsMixin.hrandfield.<locals>.<listcomp>   s    %%%A1Q4%%%r(   )r/   r   rR   SYNTAX_ERROR_MSGr.   minr   rQ   r   randomchoicessortedr~   sample_client_infoprotocol_version)r%   r)   r   count
withvaluesress         r'   
hrandfieldzHashCommandsMixin.hrandfield   sb   t99q==d34449CI! 3 343t99>>CJtAw'''q#ci..QQ:=d))q..YtAw666e
A::I199.	(9(9!:!:ufEEECC-sy'8'8 9 95AAC 	& 1Q6677S777,,,,,%%%%%C
r(   when_msc                     t          |ddd          \  \  }}}}}||||f                    d          dk    rt          t          j                  t          |          }	|j        }
|
dgt          |	          z  S g }|	D ]}||
vr|                    d           |
	                    |          }|r||r||r|||k    s
|r|||k    r|                    d           c|                    |

                    ||                     |S )N)nxxxgtltTFleft_from_first_unexpectederror_on_unexpectedr<   r   )r   r   r   rR   NX_XX_GT_LT_ERROR_MSG_get_fieldsr.   r/   r|   get_key_expireatset_key_expireat)r%   r)   r   r   r   r   r   r   	left_argsr:   hash_valr   r>   current_expirations                 r'   _hexpirezHashCommandsMixin._hexpire   sc   &2*taf'
 '
 '
#RR) B!!$''!++d8999Y''4#f++%% 	B 	BEH$$

2!)!:!:5!A!A*6 7-5 6.6'EW:W:W ;X-9gI[>[>[

1JJx00@@AAAA
r(   r   c                 "   t          |          }|j        }|dgt          |          z  S g }|D ]^}||vr|                    d           |                    |          }||                    d           I|                    |           _|S )Nr   )r   r.   r/   r|   r   )	r%   r   r)   r   r:   r   r   r>   r   s	            r'   _get_expireatzHashCommandsMixin._get_expireat   s    T""4#f++%% 	$ 	$EH$$

2//66G

2

7####
r(   HEXPIREsecondsc                 H    t                      |dz  z   } | j        ||g|R  S N  r   r   )r%   r)   r   r   r   s        r'   hexpirezHashCommandsMixin.hexpire   s0    ..7T>1t}S'1D1111r(   HPEXPIREmillisecondsc                 B    t                      |z   } | j        ||g|R  S r"   r   )r%   r)   r   r   r   s        r'   hpexpirezHashCommandsMixin.hpexpire   s,    ..</t}S'1D1111r(   	HEXPIREATunix_time_secondsc                 *    |dz  } | j         ||g|R  S r   r   )r%   r)   r   r   r   s        r'   	hexpireatzHashCommandsMixin.hexpireat   s(    #d*t}S'1D1111r(   
HPEXPIREATunix_time_msc                       | j         ||g|R  S r"   r   )r%   r)   r   r   s       r'   
hpexpireatzHashCommandsMixin.hpexpireat   s    t}S,66666r(   HPERSISTc                     t          |          }|j        }g }|D ]\}||vr|                    d           |                    |          r|                    d           G|                    d           ]|S )Nr   r<   r   )r   r.   r|   clear_key_expireat)r%   r)   r   r:   r   r   r>   s          r'   hpersistzHashCommandsMixin.hpersist   s    T"" 	 	EH$$

2**511 

1

2
r(   HEXPIRETIME)redis)r   rL   r   flagsserver_typesc                 8     | j         d|g|R  }d |D             S )Ns   HEXPIRETIMEc                 (    g | ]}|d k    r|dz  n|S r   r   re   )rf   is     r'   rg   z1HashCommandsMixin.hexpiretime.<locals>.<listcomp>   s(    999a!eed999r(   r   r%   r)   r   r   s       r'   hexpiretimezHashCommandsMixin.hexpiretime   s4     !d <t<<<99S9999r(   HPEXPIRETIME)r   rL   r   r   c                 $     | j         d|g|R  }|S )Ns   HPEXPIRETIMEr   r   s       r'   hpexpiretimezHashCommandsMixin.hpexpiretime   s#     d #====
r(   HTTLc                 Z     | j         d|g|R  }t                      fd|D             S )Ns   HTTLc                 0    g | ]}|d k    r|z
  dz  n|S r   re   rf   r   curr_time_mss     r'   rg   z*HashCommandsMixin.httl.<locals>.<listcomp>   s0    WWWA!l"t++1WWWr(   r   r   r%   r)   r   curr_expireat_msr   s       @r'   httlzHashCommandsMixin.httl   sD    -4-gsBTBBB#~~WWWWFVWWWWr(   HPTTLc                 Z     | j         d|g|R  }t                      fd|D             S )Ns   HPTTLc                 *    g | ]}|d k    r|z
  n|S r   re   r   s     r'   rg   z+HashCommandsMixin.hpttl.<locals>.<listcomp>   s+    MMMqa!ee\!!MMMr(   r   r   s       @r'   hpttlzHashCommandsMixin.hpttl   sD    -4-hCdCCC#~~MMMM<LMMMMr(   HGETDELc                 P    t          |          }|j        fd|D             }|S )Nc                 :    g | ]}                     |          S re   )pop)rf   r>   r   s     r'   rg   z-HashCommandsMixin.hgetdel.<locals>.<listcomp>  s%    777ux||E""777r(   )r   r.   )r%   r)   r   r:   r   r   s        @r'   hgetdelzHashCommandsMixin.hgetdel  s5    T""7777777
r(   HGETEXc                    t          |ddd          \  \  }}}}}}|d u|d u|d u|d u|f                    d          dk    rt          d          t          |          }	|j        }
t          ||||          }g }|	D ]Z}|                    |
                    |                     |r|
                    |           B||
	                    ||           [|S )N)+ex+px+exat+pxatpersistTFr   r<   zDOnly one of EX, PX, EXAT, PXAT or PERSIST arguments can be specified)
r   r   r   r   r.   _get_when_msr|   rF   r   r   )r%   r)   r   expxexatpxatr   r   r:   r   r   r   r>   s                 r'   hgetexzHashCommandsMixin.hgetex	  s   3?7'+ %	4
 4
 4
0%RtWy dNBdND,<d$>NPWX^^_cddghhhdeeeY''r2tT22 	: 	:EJJx||E**+++ :++E2222$))%999
r(   HSETEXc                 l   t          |ddd          \  \  }}}}}}}	}
|d u|d u|d u|d u|f                    d          dk    rt          d          ||	f                    d          dk    rt          d          t          |
d          }|j        }t          ||||          }t          |d d d	                   }|	r<t          ||                                	                                z
            d
k    rd
S |rIt          ||                                	                                z
            t          |          k     rd
S d
}t          d
t          |          d	          D ]6}||         ||dz            }}|||<   d}|s||                    ||           7|                                 |S )N)r   r   r   r   keepttlfnxfxxTFr   r<   zDOnly one of EX, PX, EXAT, PXAT or KEEPTTL arguments can be specifiedz1Only one of FNX or FXX arguments can be specified)with_valuesr+   r   )r   r   r   r   r.   r   setr/   rI   r0   ranger   r5   )r%   r)   r   r   r   r   r   r   r   r   r   
field_valsr   r   
field_keysr   r   r>   r.   s                      r'   hsetexzHashCommandsMixin.hsetex   s   =IE'+ %	>
 >
 >
:/RtWc3 dNBdND,<d$>NPWX^^_cddghhhdeee:D!!A%%QRRR ===
r2tT22CCaC))
 	3zHOO$5$5$:$:$<$<<==AA1 	3zHOO$5$5$:$:$<$<<==JOO1q#j//1-- 	: 	:A%a=*QU*;5E#HUOC :w2))%999
r(   )8__name__
__module____qualname__r   rA   bytes__annotations__floatboolr   r   r   r   r$   r   r9   r   r   r   r?   rC   rG   r	   rx   rK   rW   r]   r`   rb   rh   r   rl   r   r   rj   r   r   r   r   r   r   r   r   r   r   r   rR   FLAG_DO_NOT_CREATEr   r   r   r   r   r   r  __classcell__)r&   s   @r'   r   r      s
        	
 		    E4=%/0000Xe_c514eT%[>P8Q3RRSSSS&c &S &T & & & & & & U s     Wcc$ii%** e     +* Wcc$ii  '; 'u ' ' ' ' ! ' Wcc$ii  $ $E $c $ $ $ ! $ Wcc$ii\"; "738+< " " " " WCCIIue,---; u E c    .- Wcc$ii&'' E 5 U    (' Wcc$ii\& &e & & & & Wcc$ii\      Wcc$ii%**: :u :e : : : +*: Wcc$ii&77 U |    87 Wcc$iix(( c % DI    )( Wcc$ii&77& &E &c & & & 87& Wcc$ii&''-+ -e -E -c - - - ('-
 Wcc$ii  .; .u . . . . ! . Wcc$ii\( (e ( ( ( ( W,ss4yylE8DDDk % E$tCy/SWX[S\^bBb<c    ED0K # e S	    :U  U tTWy    " W)CCIIs#3UHEEE2; 2 2U 2tCy 2 2 2 FE2 W*SSYY$4eXFFF2K 2s 25 2TRUY 2 2 2 GF2 W+cc$ii%5uhGGG2[ 2S 2 2SWX[S\ 2 2 2 HG2 W,ss4yy#&6xHHH7k 7 7U 7tTWy 7 7 7 IH7 W*SSYYL%BBBK  $s)    CB W33t99,xtG^mw  :{ :5 :T#Y : : : : W.TeXT^___ E d5k    `_ W&TeXJWWWX XE Xd3i X X X XWX
 W'##d))uhZXXXN NU NtCy N N N YXN
 W)CCII<zZZZ; u c    [Z W(33t99,xjYYY+ e     ZY, W(33t99,xjYYY+ e     ZY    r(   r   Fr   r   r    c                    t          |           dk     st          | d         d          s1t          t          j                            t                              t          j        | d                   }|s/|t          |           dz
  k    rt          t          j	                  |r2|dz  t          |           dz
  k    rt          t          j	                  | dd          }|S )N   r   s   fieldsr<   r+   )
r/   r   r   rR   WRONG_ARGS_MSG6formatr   r   rQ   HEXPIRE_NUMFIELDS_DIFFERENT)r   r   
num_fieldsr:   s       r'   r   r   @  s    
4yy1}}Id1gy99}$.55g>>???DG$$J <:TQ66$:;;; <zA~TQ66$:;;;!""XFMr(   r   r   r   r   c                 z    | t                      | dz  z   }n#|t                      |z   }n||dz  }n||}nd }|S r   r   )r   r   r   r   r   s        r'   r   r   L  sX    	~..29,	..2%		+		Nr(   )F)$r   typingr   r   r   r   r   r   r	   rY   	fakeredisr
   rR   fakeredis._command_args_parsingr   fakeredis._commandsr   r   r   r   r   fakeredis._helpersr   r   r   r   r   fakeredis.modelr   r   r   r  r
  r   rA   r   re   r(   r'   <module>r     s    J J J J J J J J J J J J J J J J J J  # # # # # # 8 8 8 8 8 8 E E E E E E E E E E E E E E G G G G G G G G G G G G + + + + + + , , , , , , , ,o o o o o o o od		 	huo 	D 	Xe_ 	 	 	 	Xc]  Xc] RZ[^R_ dlmpdq      r(   