
    1yi4                         d dl Z d dlmZmZmZmZmZmZ d dlm	Z
 d dlmZ d dlmZmZmZmZmZmZmZmZ d dlmZmZmZmZmZ d dlmZ ded	ed
eeeeee       f   fdZ! G d d      Z"y)    N)TupleCallableListAnyOptionalDict)_msgs)extract_args)commandKeyIntFloatMAX_STRING_SIZEdelete_keysfix_range_stringCommandItem)OKSimpleError	casematchDatabaseSimpleString)VersionTypes1s2returnc                    t        |       }t        |      }t        d|dz         D cg c]  }dg|dz   z   }}t        d|dz         D cg c]  }dg|dz   z   }}t        d|dz         D ]  }t        d|dz         D ]}  }| |dz
     ||dz
     k(  r ||dz
     |dz
     dz   ||   |<   d||   |<   4||   |dz
     ||dz
     |   k\  r||   |dz
     ||   |<   d||   |<   e||dz
     |   ||   |<   d||   |<     ||}}d}	g }
d\  }}}|dkD  r|dkD  r||   |   dk(  r$t        | |dz
           |	z   }	|dz  }|dz  }|dz  }n||   |   dk(  r|dz  }n|dz  }||   |   dk(  r
|dk(  r|}|}n.||   |   dkD  r#|dkD  r|
j                  ||g||g|g       d\  }}}|dkD  r|dkD  r|r|
j                  ||g||g|g       ||   |   |	j	                         |
fS c c}w c c}w )Nr          )NNr   )lenrangechrappendencode)r   r   l1l2_optpircresultmatchess1inds2indcurr_lengths                 h/var/www/html/content_weaver/venv/lib/python3.12/site-packages/fakeredis/commands_mixins/string_mixin.py_lcsr2      s   	RB	RB 5:!R!V4DEqQC26NECE 49BF3CDaA3"q&>DBD 1b1f 
q"q&! 		A!a%yBq1uI%AJq1u-1Aq	1aQA#a!e*Q-/F1q5MAq	1aAJqMAq	1a		
 rqAFG -E5+
a%AEa58q=AE^f,FFAFA1KU1X]FAFAa58q=[A-EEU1X\kAoNNQJE
K@A(5%E5+! a%AE" 
UAJ<=r72;00] F Es   GG#c                       e Zd ZU eegef   ed<   eeege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      dededefd       Z e ee      f      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fd       Z e ee      f      dedefd       Z eddg 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      ef      ded	edefd       Z e ee      f      dedefd       Z e ee      ef      ded	edefd       Z e e       f e       f      dedeee      fd       Z e e       ef e       ef      de	defd       Z e e       ef e       ef      de	defd        Z  e e       eef      ded!ededefd"       Z! ed# e       efef$      dededede	fd%       Z" e e       eef      ded&ededefd'       Z# e 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      f      dedefd+       Z& e ee      fef      dedede	fd,       Z' e ee       ee      fef      d-ed.edede(ee	f   fd/       Z) ed0efef$      d1ede	defd2       Z* xZ+S )3StringCommandsMixin
_encodeint_encodefloatargskwargsr   Nc                 4    t        t        | 
  |i | |  |  y N)superr4   __init__)selfr7   r8   	__class__s      r1   r<   zStringCommandsMixin.__init__S   s    !414B6B    keyamountc                     t        j                  |j                  d            |z   }|j                  | j	                  |             |S )N   0)r   decodegetupdater5   )r=   r@   rA   r+   s       r1   _incrbyzStringCommandsMixin._incrbyX   s7    JJswwt}%.

4??1%&r?   valuec                    |j                  d      }t        |      t        |      z   t        kD  rt        t        j
                        |j                  |j                  d      |z          t        |j                        S Nr?   )rE   r    r   r   msgsSTRING_OVERFLOW_MSGrF   rH   r=   r@   rH   olds       r1   r#   zStringCommandsMixin.append]   s\    ggcls8c%j ?2d6677

3773<%'(399~r?   c                 &    | j                  |d      S )NrG   r=   r@   s     r1   decrzStringCommandsMixin.decre   s    ||C$$r?   c                 (    | j                  ||       S r:   rQ   r=   r@   rA   s      r1   decrbyzStringCommandsMixin.decrbyi   s    ||C&))r?   c                 (    |j                  d       }|S r:   )rE   r=   r@   ress      r1   rE   zStringCommandsMixin.getm   s    WWT]
r?   c                 >    |j                  d       }t        |       |S r:   )rE   r   rX   s      r1   getdelzStringCommandsMixin.getdelr   s    WWT]C
r?   GETRANGESUBSTR)namefixedstartendc                 `    |j                  d      }t        ||t        |            \  }}||| S rJ   )rE   r   r    )r=   r@   r`   ra   rH   s        r1   getrangezStringCommandsMixin.getrangex   s2    wws|%eS#e*=
sU3r?   )r_   c                 ,    |j                   }||_         |S r:   rH   rM   s       r1   getsetzStringCommandsMixin.getset~   s    YY	
r?   c                 &    | j                  ||      S r:   rQ   rU   s      r1   incrbyzStringCommandsMixin.incrby   s    ||C((r?   c                 &    | j                  |d      S )Nr   rQ   rR   s     r1   incrzStringCommandsMixin.incr   s    ||C##r?   c                     t        j                  |j                  d            |z   }t        j                  |      st        t        j                        | j                  |d      }|j                  |       |S )NrC   T)
r   rD   rE   mathisfiniter   rK   NONFINITE_MSGr6   rF   )r=   r@   rA   r+   encodeds        r1   incrbyfloatzStringCommandsMixin.incrbyfloat   s]    LL'&0}}V$d0011##At,

7r?   )r_   repeatkeysc                 x    |D cg c]*  }t        |j                  t              r|j                  nd , c}S c c}w r:   )
isinstancerH   bytes)r=   rr   r@   s      r1   mgetzStringCommandsMixin.mget   s,    OSTZ		59		tCTTTs   /7c                 d    t        dt        |      d      D ]  }||dz      ||   _         t        S Nr   r   r   )r!   r    rH   r   r=   r7   is      r1   msetzStringCommandsMixin.mset   s6    q#d)Q' 	(A QKDGM	(	r?   c                     t        dt        |      d      D ]	  }||   s	 y t        dt        |      d      D ]  }||dz      ||   _         yrx   )r!   r    rH   ry   s      r1   msetnxzStringCommandsMixin.msetnx   s\    q#d)Q' 	AAw	 q#d)Q' 	(A QKDGM	(r?   msc                    |dk  s| j                   j                  dz  |z   dk\  r(t        t        j                  j                  d            ||_        t        | j                   j                  |dz  z         |_        t        S )Nr                 psetex     @@
_dbtimer   rK   INVALID_EXPIRE_MSGformatrH   intexpireatr   )r=   r@   r~   rH   s       r1   r   zStringCommandsMixin.psetex   sg    7dhhmmd*R/58d55<<XFGG	488==2;67	r?   SET)r^   r_   rq   c           	         t        |d      \  \  }}}}}}	}
}}|L|dk  s| j                  j                  |z   dz  dk\  r(t        t        j
                  j                  d            |L|dk  s| j                  j                  dz  |z   dk\  r(t        t        j
                  j                  d            |5|dk  s|dz  dk\  r(t        t        j
                  j                  d            |2|dk  s|dk\  r(t        t        j
                  j                  d            |r|	st        d ||||fD              |
z   dkD  rt        t        j                        |	r*|r(| j                  dk  rt        t        j                        d }|rL|j                  4t        |j                        t        urt        t        j                        |j                  }|	r|r|S |r|s|S |
s||_
        n|j                  |       |||_        |
|d	z  |_        || j                  j                  |z   |_        |!| j                  j                  |d	z  z   |_        |st         S |S )
N)+ex+px+exat+pxatxxnxkeepttlrE   r   r   r   setc              3   $   K   | ]  }|d u 
 y wr:    .0xs     r1   	<genexpr>z+StringCommandsMixin.set_.<locals>.<genexpr>        Kq}K   r   )   r   )r
   r   r   r   rK   r   r   sumSYNTAX_ERROR_MSGversionrH   typeru   WRONGTYPE_MSGrF   r   r   )r=   r@   rH   r7   expxexatpxatr   r   r   rE   r'   	old_values                 r1   set_zStringCommandsMixin.set_   s+   8DP9
52RtRWcA >rQw488==2+=*E*Nd55<<UCDD>rQw$((--$*>*Cu*Ld55<<UCDDdTkU.Bd55<<UCDDdemd55<<UCDD23Kr2tT6JKKgUXYYd3344#$,,-d3344	yy$cii)E!$"4"455		I#cCIJJuCL&=CL>88==2-CL>88==2;6CLr+)+r?   secondsc                    |dk  s| j                   j                  |z   dz  dk\  r(t        t        j                  j                  d            ||_        t        | j                   j                  |z         |_        t        S )Nr   r   r   setexr   )r=   r@   r   rH   s       r1   r   zStringCommandsMixin.setex   sc    a<DHHMMG3t;uDd55<<WEFF	488==723	r?   c                     |ry||_         y)Nr   r   re   )r=   r@   rH   s      r1   setnxzStringCommandsMixin.setnx   s    	r?   offsetc                    |dk  rt        t        j                        |st        |j	                  d            S |t        |      z   t
        kD  rt        t        j                        |j	                  d      }t        |      |k  r|d|t        |      z
  z  z  }|d| |z   ||t        |      z   d  z   }|j                  |       t        |      S )Nr   r?       )r   rK   INVALID_OFFSET_MSGr    rE   r   rL   rF   )r=   r@   r   rH   outs        r1   setrangezStringCommandsMixin.setrange   s    A:d5566swws|$$c%j ?2d6677ggcls8f7fs3x/00C!Fme#c&3u:*=*?&@@

33xr?   c                 6    t        |j                  d            S rJ   )r    rE   rR   s     r1   strlenzStringCommandsMixin.strlen   s    3773<  r?   c                 J   d\  }}}}|t        |      k  r|dz  }t        ||   d      rL|dz   t        |      k  r;t        j                  ||dz            }| j                  j
                  |z   }|dz  }nt        ||   d      rQ|dz   t        |      k  r@t        j                  ||dz            }| j                  j
                  dz  |z   dz  }|dz  }nt        ||   d      r2|dz   t        |      k  r!t        j                  ||dz            }|dz  }ntt        ||   d	      r5|dz   t        |      k  r$t        j                  ||dz            dz  }|dz  }n0t        ||   d
      rd }|dz  }nt        t        j                        |t        |      k  r||dk  s|dz  dk\  s|5|dk  s|dz  dk\  r(t        t        j                  j                  d            |dkD  rt        t        j                        |d n
t        |      |_        |j                  d       S )N)r   r   NNr   s   exr   s   pxr   r   s   exats   pxats   persistr   r   getex)r    r   r   rD   r   r   r   rK   r   r   r   r   r   rE   )r=   r@   r7   rz   count_optionsexpire_timediffs          r1   r   zStringCommandsMixin.getex   s   .>+=+t#d)mQMa%(QUSY->zz$q1u+."hhmmd2Q47E*q1us4y/@zz$q1u+.#xx}}t3d:fDQ47G,QT1B!jja!e5Q47G,QT1B!jja!e5>Q47J/"Q!$"7"788) #d)m* #)9[4=OSX=X$!)td{e/Cd55<<WEFF1d3344*2tK8Hwwt}r?   k1k2c                 \   |j                   xs d}|j                   xs d}t        |d      \  \  }}}}	|r|rt        t        j                        t        ||      \  }
}}|s|s|S |r|
S rndt        t        fd|            }|s|D cg c]  }|d   |d   g }}||
dS c c}w )Nr?   )idxr    z+minmatchlenwithmatchlenr   c                     | d   k\  S )Nr   r   )r   arg_minmatchlens    r1   <lambda>z)StringCommandsMixin.lcs.<locals>.<lambda>1  s    !(? r?   r   )s   matchess   len)rH   r
   r   rK   LCS_CANT_HAVE_BOTH_LEN_AND_IDXr2   listfilter)r=   r   r   r7   r   r   arg_idxarg_lenarg_withmatchlenr'   lcs_lenlcs_valr-   resultsr   r   s                  @r1   lcszStringCommandsMixin.lcs!  s    XX_XX_CO@D
@='?,<q wdAABB$(RL!'wNN-</!v?IJ-45!ad|5G5#W55 6s   B)MSETEXnum_keysc                    |dk  rt        d      t        |      |dz  k  rt        d      t        d|dz  d      D ci c]  }||   ||dz       }}||dz  d  }t        |d      \  \  }}}}}	}
}}|L|dk  s| j                  j
                  |z   dz  dk\  r(t        t        j                  j                  d	            |L|dk  s| j                  j
                  dz  |z   dk\  r(t        t        j                  j                  d	            |5|dk  s|dz  dk\  r(t        t        j                  j                  d	            |2|dk  s|dk\  r(t        t        j                  j                  d	            |	r|
st        d
 ||||fD              |z   dkD  rt        t        j                        d}|D ]X  }t        || j                  | j                  j                  |            }|
r|j                  d} n|	sI|j                  Vd} n |syd }||}||dz  }|| j                  j
                  |z   }|| j                  j
                  |dz  z   }|j                         D ]`  \  }}t        || j                  | j                  j                  |            }|j                  |       |s||_        |j#                          b yc c}w )Nr   zERR invalid numkeys valuer   z#ERR wrong number of key-value pairsr   )r   r   r   r   r   r   r   r   r   msetexc              3   $   K   | ]  }|d u 
 y wr:   r   r   s     r1   r   z-StringCommandsMixin.msetex.<locals>.<genexpr>J  r   r   T)itemFr   )r   r    r!   r
   r   r   rK   INVALID_EXPIRE_MSG_REDIS_8r   r   r   r   rE   rH   itemsrF   r   	writeback)r=   r   r7   rz   mappingr   r   r   r   r   r   r   r'   
should_setkr   r   vs                     r1   r   zStringCommandsMixin.msetex6  s   q=9::t9x!|#CDD16q(Q,1JKA47DQK'KKHqLN#3?I4
0-RtRWq >rQw488==2+=*E*Nd==DDXNOO>rQw$((--$*>*Cu*Ld==DDXNOOdTkU.Bd==DDXNOOdemd==DDXNOO23Kr2tT6JKKgUXYYd3344
 	Aq$((aADdjj,"
djj("
	 Hf}H>xx}}r)H>xx}}rF{2HMMO 	DAqq$((aADKKN (NN	 ] Ls   K),__name__
__module____qualname__r   r   ru   __annotations__floatboolr   r<   r   rG   r   r   r#   rS   r   rV   rE   r[   rc   rf   rh   rj   r   rp   r   r   rv   r   r{   r}   r   r   r   r   r   r   r   r   r   r   __classcell__)r>   s   @r1   r4   r4   J   sB   	
 		  E4=%/00"c "S "T "
;   
 c%j% !+ e   " c%j]% % % % c%j#*+ *s *s *  * c%j]{ u   c%j]+ %  
 :x(US#0FG K    #  %   H 
 CJ&'+ e   (
 CJ$%)+ )s )s ) &) CJ=!$ $ $ "$ CJ&'{ E e  ( CE8SUH-U+ U$x*? U .U ceU^ceU^,# ,  -
 ceU^ceU^,C C  - ceS% !+ 3 u   " %u~uh?), ),E ),% ),C ), @),V ceS% ! s 5 \  " ceU^ U s   c%j#u%&K  U s  ' c%j]!+ !# ! ! c%j]UH%   U  s   & D CJE
+UH=6k 6{ 65 6T%QT*EU 6 >6( (3&%:3s 33 33 3 ;3r?   r4   )#rl   typingr   r   r   r   r   r   	fakeredisr	   rK   fakeredis._command_args_parsingr
   fakeredis._commandsr   r   r   r   r   r   r   r   fakeredis._helpersr   r   r   r   r   fakeredis._typingr   ru   r   objectr2   r4   r   r?   r1   <module>r      sk     = = # 8	 	 	 R Q )31U 31 31%UDf4F(F"G 31l` `r?   