
    1yi5                        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#y)    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                 0    t        t        | 
  |i | |  y N)superr   __init__)selfr   r   	__class__s      f/var/www/html/content_weaver/venv/lib/python3.12/site-packages/fakeredis/commands_mixins/hash_mixin.pyr$   zHashCommandsMixin.__init__   s    /@@    keyc           	         |j                   }t        |j                               }|j                  t	        t        t        |      gdz         d       t        |j                               |z
  }|j                          |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   sc    II!!&&(m	cDJ<!+,-Eaffh-"55r(   fieldsc                 j    |j                   }d}|D ]  }||v s||= |j                          |dz  }! |S )Nr      )r.   r5   )r%   r)   r:   r6   remfields         r'   hdelzHashCommandsMixin.hdel%   sF    II 	EzeHq		
 
r(   r>   c                 0    t        ||j                  v       S r"   )intr.   r%   r)   r>   s      r'   hexistszHashCommandsMixin.hexists0   s    5CII%&&r(   c                 8    |j                   j                  |      S r"   r.   getrB   s      r'   hgetzHashCommandsMixin.hget4   s    yy}}U##r(   c                 6    |j                   j                         S r"   )r.   getallr%   r)   s     r'   hgetallzHashCommandsMixin.hgetall8   s    yy!!r(   )fixedamount_bytesc                 4   t        j                  |      }t        j                  |j                  j                  |d      t        j
                        }||z   }|j                  j                  || j                  |      id       |j                          |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<   sr    L)jjud!;$J_J_`& 		%!34uMr(   rT   c                 n   t        j                  |j                  j                  |d            t        j                  |      z   }t	        j
                  |      st        t        j                        | j                  |d      }|j                  j                  ||id       |j                          |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    LLud34u||F7KK}}Qd0011##At,		%)EBr(   c                 H    t        |j                  j                               S r"   )listr.   r0   rJ   s     r'   hkeyszHashCommandsMixin.hkeysO   s    CIINN$%%r(   c                 ,    t        |j                        S r"   )r/   r.   rJ   s     r'   hlenzHashCommandsMixin.hlenS   s    399~r(   c                 ^    |D cg c]  }|j                   j                  |       c}S c c}w r"   rE   )r%   r)   r:   r>   s       r'   hmgetzHashCommandsMixin.hmgetW   s#    289		e$999s   "*c                 4     | j                   |g|  t        S r"   )hsetr   r%   r)   r   s      r'   hmsetzHashCommandsMixin.hmset[   s    		#	r(   cursorc                    t        d |D              }|r|D cg c]  }t        |d      r| }} | j                  |j                  |g| \  }}|D cg c]$  }t	        |t
              s|j                  d      & }}|r||gS g }|D ]1  }|j                  |       |j                  |j                  |          3 ||gS c c}w c c}w )Nc              3   4   K   | ]  }t        |d         yw)   novaluesN)r   ).0args     r'   	<genexpr>z*HashCommandsMixin.hscan.<locals>.<genexpr>b   s     D	#{3Ds   rl   zutf-8)anyr   r   r.   
isinstancestrencodeappend)	r%   r)   ri   r   	no_valuesrn   r0   kitemss	            r'   hscanzHashCommandsMixin.hscan`   s    DtDD	#'KCyk/JCKDK!tzz#))V;d;+/Fa:a3E!FFD>! 	'ALLOLL1&	'  LFs   CCC,Cc                 (     | j                   |g| S r"   )r9   rg   s      r'   rf   zHashCommandsMixin.hseto   s    tzz#%%%r(   r.   c                 F    ||j                   v ry| j                  |||      S )Nr   )r.   r9   )r%   r)   r>   r.   s       r'   hsetnxzHashCommandsMixin.hsetnxs   s$    CIIzz#ue,,r(   c                 L    t        |j                  j                  |d            S )Nr(   )r/   r.   rF   rB   s      r'   hstrlenzHashCommandsMixin.hstrleny   s    399==,--r(   c                 H    t        |j                  j                               S r"   )r_   r.   valuesrJ   s     r'   hvalszHashCommandsMixin.hvals}   s    CII$$&''r(   
HRANDFIELD)namerL   repeatc                 B   t        |      dkD  rt        t        j                        |j                  t        |j                        dk(  ry 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                  j                               |       }n7t        j                  t        |j                  j                               |      }|rM| j                  j                  dk(  r|D cg c]  }|D ]  }|  }}}|S |D cg c]  }t!        |       }}|S |D cg c]  }|d   	 }}|S c c}}w c c}w c c}w )Nr+   r   r<   s
   withvaluesF)rv   )r/   r   rR   SYNTAX_ERROR_MSGr.   minr   rQ   r   randomchoicessortedrw   sample_client_infoprotocol_versionr_   )r%   r)   r   count
withvaluesrestitems           r'   
hrandfieldzHashCommandsMixin.hrandfield   s^   t9q=d334499CII! 33t9>CJJtAw'q#cii.Q:=d)q.YtAw6e
A:I19..		(9!:ufEC--syy'8 95AC  11Q6%(7Q7Tt7t77
 
 ),,1tAw,, 
 "%%A1Q4%C%
 8,%s   F'FFwhen_msc                    t        |ddd      \  \  }}}}}||||fj                  d      dkD  rt        t        j                        t        |      }	|j                  }
|
dgt        |	      z  S g }|	D ]v  }||
vr|j                  d       |
j                  |      }|r||r||r|||k  s	|r|||k\  r|j                  d       V|j                  |
j                  ||             x |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/   rt   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   s   &2*taf'
#RR) B!!$'!+d8899Y'4#f+%% 	BEH$

2!)!:!:5!A*6-5.6'EW:W-9gI[>[

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

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

2

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

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

1

2	 
r(   HEXPIRETIME)redis)r   rL   r   flagsserver_typesc                 h     | j                   d|g| }|D cg c]  }|dkD  r|dz  n| c}S c c}w )Ns   HEXPIRETIMEr   r   r   )r%   r)   r   r   is        r'   hexpiretimezHashCommandsMixin.hexpiretime   s@     !d  <t<589a!ed*999s   /HPEXPIRETIME)r   rL   r   r   c                 .     | j                   d|g| }|S )Ns   HPEXPIRETIMEr   )r%   r)   r   r   s       r'   hpexpiretimezHashCommandsMixin.hpexpiretime   s      d  #==
r(   HTTLc                      | j                   d|g| }t               }|D cg c]  }|dkD  r||z
  dz  n| c}S c c}w )Ns   HTTLr   r   r   r   r%   r)   r   curr_expireat_mscurr_time_msr   s         r'   httlzHashCommandsMixin.httl   sL    -4--gsBTB#~FVWA!l"t+1<WWWs   <HPTTLc                 |     | j                   d|g| }t               }|D cg c]  }|dkD  r||z
  n| c}S c c}w )Ns   HPTTLr   r   r   s         r'   hpttlzHashCommandsMixin.hpttl   sG    -4--hCdC#~<LMqa!e\!2MMMs   9HGETDELc                 z    t        |      }|j                  }|D cg c]  }|j                  |       }}|S c c}w r"   )r   r.   pop)r%   r)   r   r:   r   r>   r   s          r'   hgetdelzHashCommandsMixin.hgetdel  s;    T"067ux||E"77
 8s   8HGETEXc                 |   t        |ddd      \  \  }}}}}}|d u|d u|d u|d u|fj                  d      dkD  rt        d      t        |      }	|j                  }
t        ||||      }g }|	D ]K  }|j                  |
j                  |             |r|
j                  |       7|:|
j                  ||       M |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_msrt   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
0%RtWy dNBdND,<d$>NPWX^^_cdghhdeeY'r2tT2 	:EJJx||E*+++E2$))%9	: 
r(   HSETEXc                    t        |ddd      \  \  }}}}}}}	}
|d u|d u|d u|d u|fj                  d      dkD  rt        d      ||	fj                  d      dkD  rt        d      t        |
d      }|j                  }t        ||||      }t        |d d d	         }|	r.t        ||j                         j                         z
        d
kD  ry
|r7t        ||j                         j                         z
        t        |      k  ry
d
}t        d
t        |      d	      D ].  }||   ||dz      }}|||<   d}|r||j                  ||       0 |j                          |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dghhdee:D!A%QRR =
r2tT2CaC)
3zHOO$5$:$:$<<=A3zHOO$5$:$:$<<=JOq#j/1- 	:A%a=*QU*;5E#HUOCw2))%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	   rr   rK   rW   r]   r`   rb   rd   r   rh   r   rx   rf   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Xe_c514eT%[>P8Q3RRSS&c &S &T & U s  c$i%* e   + c$i '; 'u ' ' !' c$i $ $E $c $ !$ c$i\"; "738+< " " CIue,-; u E c  . c$i&' E 5 U  ( c$i\& &e & & c$i\    c$i%*: :u :e : +: c$i&7 U |  8 c$ix( c % DI  ) c$i&7& &E &c & 8& c$i&'-+ -e -E -c - (-
 c$i .; .u . . !. c$i\( (e ( ( ,s4ylE8Dk % E$tCy/SWX[S\^bBb<c  E0K # e S	 :U  U tTWy " )CIs#3UHE2; 2 2U 2tCy 2 F2 *SY$4eXF2K 2s 25 2TRUY 2 G2 +c$i%5uhG2[ 2S 2 2SWX[S\ 2 H2 ,s4y#&6xH7k 7 7U 7tTWy 7 I7 *SYL%BK  $s)  C 3t9,xtG^G^mw:{ :5 :T#Y :: .TeXT^_ E d5k  ` &TeXJWX XE Xd3i X XX
 '#d)uhZXN NU NtCy N YN
 )CI<zZ; u c  [ (3t9,xjY+ e   Z, (3t9,xjY+ e   Zr(   r   r   r   r    c                    t        |       dk  st        | d   d      s,t        t        j                  j                  t                    t        j                  | d         }|s*|t        |       dz
  k7  rt        t        j                        |r-|dz  t        |       dz
  k7  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    
4y1}Id1gy9$..55g>??DG$J:TQ6$::;;zA~TQ6$::;;!"XFMr(   r   r   r   r   c                 r    | t               | dz  z   }|S |t               |z   }|S ||dz  }|S ||}|S d }|S r   r   )r   r   r   r   r   s        r'   r   r   L  sp    	~.29, N 
.2% N 
	+
 N	 
	 N 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    r(   r'   <module>r     s     J J J  # 8 E E G G + ,o od		huo 	D 	Xe_ 	Xc]  Xc] RZ[^R_ dlmpdq r(   