
    1yiP9                         d dl Z d dlZd dlZd dlmZ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mZ d dl m!Z! d dl"m#Z#m$Z$m%Z%  G d	 d
      Z&y)    N)TupleAnyCallableListOptionalUnionSequence)_msgs)extract_args)commandKeyIntDbIndex	BeforeAnyCommandItem	SortFloatdelete_keys)compile_patternSimpleErrorOK	casematchDatabaseSimpleString)VersionType)ZSetHashExpiringMembersSetc                       e Zd ZU eeegef   ed<   eee	   ee	ge
ee	e
e	   f      f   ed<   eegef   ed<   dededdf fdZd	e	d
e	dee	   fdZd	edede	defdZ ed e       f e       f      dedefd       Z ed ed      f      d	edee	   fd       Z ed e       f e       f      defd       Z ed e       ef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de	f      d
e	de
e	   fd       Z ed e       ef      d	ed edefd!       Z ed" e       f      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d' e       efe	f      d	ed(ede	defd)       Z ed* e       f      d	edefd+       Z  ed, e       f      d	edefd-       Z! ed. e       f      d	edefd/       Z" ed0d1      dee	   fd2       Z# ed3 e        e       f      d	ed4edefd5       Z$ ed6 e        e       f      d	ed4edefd7       Z% ed8 e       ee	fe	f      d	ed9ed:e	de	de&f
d;       Z' ed<efe	e	f      de
ee	e
e	   f      fd=       Z( ed> e       fe	f      d	ede	de
e	   fd?       Z) ed@ e       fe	f      d	ede	de
e	   fdA       Z* edB e       f      d	edefdC       Z+ edD e       f      d	edefdE       Z, edF e       f e       f      dedefdG       Z- edH e        e       fe	f      d	ed4ede	defdI       Z. xZ/S )JGenericCommandsMixin_ttl_scan_key_value_typeargskwargsreturnNc                 <    t        t        | 
  |i | |  |  |  |  y N)superr   __init__)selfr#   r$   	__class__s      i/var/www/html/content_weaver/venv/lib/python3.12/site-packages/fakeredis/commands_mixins/generic_mixin.pyr)   zGenericCommandsMixin.__init__   s$    "D2DCFC    keypatternc                    |dk(  r|S |j                  d      }|dk(  ry|d| }||dz   d }|j                  ddd      }|dk7  r||dz   d }|d| }nd}||z   |z   }t        || j                  | j                  j                  |      	      }	|	j                  y|6t        |	j                  t              sy|	j                  j                  |      S t        |	j                  t              sy|	j                  S )
z6Python implementation of lookupKeyByPattern from redis   #   *N   s   ->r      item)findr   _dbgetvalue
isinstancer   bytes)
r*   r.   r/   pprefixsuffixarrowfieldnew_keyr7   s
             r,   _lookup_keyz GenericCommandsMixin._lookup_key#   s    d?JLL7!Q!E1b)B;519;'EFU^FE3,'7DHH488<<3HI::djj$/::>>%((djj%0::r-   	timestampc                    t        |dt        j                        \  \  }}}}}| j                  dk  r7t	        ||||f      r(t        t        j                  j                  d            |||fj                  d      }	|	dkD  s|r|rt        t        j                        |rV|r|j                  H|r|j                  :|r|j                  ||j                  k  s|r|j                  ||j                  kD  ry||_
        y)N)nxxxgtlt)	exception)   expireTr4   r   )r   msgsEXPIRE_UNSUPPORTED_OPTIONversionanyr   WRONG_ARGS_MSG6formatcountNX_XX_GT_LT_ERROR_MSGexpireat)
r*   r.   rE   r#   rG   rH   rI   rJ   _counters
             r,   	_expireatzGenericCommandsMixin._expireat?   s      44	
	
 <<$3BB'7#8d2299(CDDr2,$$T*aKRBd8899s||+s||/s||/I4Ls||/I4L r-   DEL)namefixedrepeatkeysc                     t        | S r'   r   r*   r^   s     r,   del_zGenericCommandsMixin.del_b       D!!r-   DUMP)missing_return)r[   r\   c                     t        j                  |j                        }t        j                  |      j                         }||z   S r'   )pickledumpsr;   hashlibsha1digest)r*   r.   r;   checksums       r,   dumpzGenericCommandsMixin.dumpf   s6    SYY'<<&--/%r-   EXISTSc                 (    d}|D ]
  }|s|dz  } |S Nr   r4    )r*   r^   retr.   s       r,   existszGenericCommandsMixin.existsl   s)     	Cq	 
r-   EXPIREsecondsc                 \     | j                   || j                  j                  |z   g| }|S r'   rY   r9   time)r*   r.   ru   r#   ress        r,   rM   zGenericCommandsMixin.expiret   s+    dnnS$((--'"9ADA
r-   EXPIREATc                 <     | j                   |t        |      g| S r'   )rY   float)r*   r.   rE   r#   s       r,   rV   zGenericCommandsMixin.expireaty   s    t~~c5#3;d;;r-   KEYSc                     |dk(  rt        | j                        S t        |      }| j                  D cg c]  }|j                  |      s| c}S c c}w )Nr2   )listr9   r   match)r*   r/   regexr.   s       r,   r^   zGenericCommandsMixin.keys}   sD    d?>!#G,E#'88@Cu{{3/?C@@@s   AAMOVEdbc                 Z   || j                   k(  rt        t        j                        |r%|j                  | j
                  j                  |   v ry| j
                  j                  | j                      |j                     | j
                  j                  |   |j                  <   d |_        yrp   )_db_numr   rN   SRC_DST_SAME_MSGr.   _serverdbsr;   )r*   r.   r   s      r,   movezGenericCommandsMixin.move   s    d3344cgg!1!1"!55(,(8(8(Fsww(OSWW%	r-   PERSISTc                 ,    |j                   yd |_         yrp   )rV   r*   r.   s     r,   persistzGenericCommandsMixin.persist   s    <<r-   PEXPIREmsc                 ^     | j                   || j                  j                  |dz  z   g| S N     @@rw   )r*   r.   r   r#   s       r,   pexpirezGenericCommandsMixin.pexpire   s+    t~~c488==2;#>FFFr-   	PEXPIREATms_timestampc                 0     | j                   ||dz  g| S r   )rY   )r*   r.   r   r#   s       r,   	pexpireatzGenericCommandsMixin.pexpireat   s    t~~c<&#8@4@@r-   PTTLc                 &    | j                  |d      S r   r    r   s     r,   pttlzGenericCommandsMixin.pttl   s    yyf%%r-   
EXPIRETIMEc                 `    |j                   y|j                  yt        |j                        S )Nr3   r;   rV   intr   s     r,   
expiretimezGenericCommandsMixin.expiretime   s+    99<<3<<  r-   PEXPIRETIMEc                 f    |j                   y|j                  yt        |j                  dz        S )Nr   r3   i  r   r   s     r,   pexpiretimez GenericCommandsMixin.pexpiretime   s0    99<<3<<$&''r-   	RANDOMKEYrq   c                 x    t        | j                  j                               }|sy t        j                  |      S r'   )r   r9   r^   randomchoicera   s     r,   	randomkeyzGenericCommandsMixin.randomkey   s+    DHHMMO$}}T""r-   RENAMEnewkeyc                     |st        t        j                        |j                  |j                  k7  r)|j                  |_        |j
                  |_        d |_        t        S r'   )r   rN   
NO_KEY_MSGr.   r;   rV   r   r*   r.   r   s      r,   renamezGenericCommandsMixin.rename   sF    doo..:: 99FL!llFOCI	r-   RENAMENXc                 d    |st        t        j                        |ry| j                  ||       yrp   )r   rN   r   r   r   s      r,   renamenxzGenericCommandsMixin.renamenx   s+    doo..C r-   RESTOREttlr;   c                    t        |d      \  \  }}|r|st        t        j                        |d d |dd  }}t	        j
                  |      j                         |k7  rt        t        j                        |dk  rt        t        j                        |dk(  rd }n| j                  j                  |dz  z   }t        j                  |      |_        ||_        t        S )N)replace   r   r   )r   r   rN   RESTORE_KEY_EXISTSri   rj   rk   RESTORE_INVALID_CHECKSUM_MSGRESTORE_INVALID_TTL_MSGr9   rx   rg   loadsr;   rV   r   )	r*   r.   r   r;   r#   r   rW   rl   rV   s	            r,   restorezGenericCommandsMixin.restore   s    $T<8
Awd5566*eBCj%<<%%'83d??@@7d::;;!8Hxx}}sV|3HLL'		r-   SCANc                 P     | j                   t        | j                        |g| S r'   )r!   r   r9   )r*   cursorr#   s      r,   scanzGenericCommandsMixin.scan   s"    tzz$txx.&8488r-   SORTc                 ,    |j                   >t        |j                   t        t        t        f      st        t        j                        t        |ddd      \  \  }}}}\  }}}	|xs d}|dn|}d uxr dv}
d}g }|t        |	      k  ret        |	|   d      r.|dz   t        |	      k  r|j                  |	|dz             |d	z  }nt        t        j                        |t        |	      k  re|j                   t        |j                         ng }t        |d      }|dk  rt        |      n||z   }|t        |      k\  rt        |      dz
  x}}t        |t        |            }|s|j                  d
       d
|
sMdt        dt        f fd}dt        dt         t"        t        f   f fd}|r|n|}|j%                  ||       n0t        |j                   t        t        f      r|j'                          g }||| D ]2  }|D ]+  } j)                  ||      }||d}|j                  |       - 4 |St+        | j,                   j,                  j/                  |            }||_         |j1                          t        |      S |S )N)ascdescalphaz*store*by++limitFerror_on_unexpectedleft_from_first_unexpectedr   r3   r2      getr4   r5   r1   valr%   c                 D    j                  |       }|
t               }|S r'   rD   r   r   byvalr*   sortbys     r,   sort_keyz+GenericCommandsMixin.sort.<locals>.sort_key  &    ((f5=%KEr-   c                 b    j                  |       }|t        j                  |      nd}|| fS Ng        rD   r   decoder   r   scorer*   r   s      r,   sort_key_scorez1GenericCommandsMixin.sort.<locals>.sort_key_score  6    ((f5383D	((/#cz!r-   r.   reverser-   r6   )r;   r<   r   r   r   r   rN   WRONGTYPE_MSGr   lenr   appendSYNTAX_ERROR_MSGmaxminr=   r   r|   sortr   rD   r   r9   r:   	writeback)r*   r.   r#   r   r   r   storelimit_startlimit_count	left_argsdontsortir:   itemsstartendr   r   	sort_funcoutrowgvr7   r   s   `                       @r,   r   zGenericCommandsMixin.sort   s   99 CII@RTXZ^?_)`d0011 @ %',	

	
*k "&Q'/b[%<$f*<#i. 1v.1q53y>3I

9QU+,Q!$"7"788 #i.  $'99#8SYYb K#'!Oc%j1DCJe*q.(EC#s5z"JJt>Fe  "E "eE5L.A "
 %*~IJJ9dJ3		D$<0MMOs# 	C $$S!,$A

1		 udhhTXX\\%5HIDDJNNs8OJr-   SORT_ROc                     |j                   >t        |j                   t        t        t        f      st        t        j                        t        |ddd      \  \  }}}\  }}}|xs d}|dn|}d uxr dv}	d}
g }|
t        |      k  ret        ||
   d      r.|
dz   t        |      k  r|j                  ||
dz             |
d	z  }
nt        t        j                        |
t        |      k  re|j                   t        |j                         ng }t        |d      }|dk  rt        |      n||z   }|t        |      k\  rt        |      dz
  x}}t        |t        |            }|s|j                  d
       d
|	sZdt        dt         t        t"        f   f fd}dt        dt$        t&        t        f   f fd}|r|n|}|j)                  ||       n0t        |j                   t        t        f      r|j+                          g }||| D ],  }|D ]%  } j-                  ||      }|j                  |       ' . |S )N)r   r   r   r   r   Fr   r   r3   r2   r   r4   r5   r1   r   r%   c                 D    j                  |       }|
t               }|S r'   r   r   s     r,   r   z.GenericCommandsMixin.sort_ro.<locals>.sort_keyk  r   r-   c                 b    j                  |       }|t        j                  |      nd}|| fS r   r   r   s      r,   r   z4GenericCommandsMixin.sort_ro.<locals>.sort_key_scorer  r   r-   r   )r;   r<   setr   r   r   rN   r   r   r   r   r   r   r   r   r=   r   r   r   r|   r   r   rD   )r*   r.   r#   r   r   r   r   r   r   r   r   r:   r   r   r   r   r   r   r   r   r   r   r   s   `                     @r,   sort_rozGenericCommandsMixin.sort_ro8  sI   99 CIIT4?P)Qd0011 6 %',	
		
*k "&Q'/b[%<$f*<#i. 1v.1q53y>3I

9QU+,Q!$"7"788 #i.  $'99#8SYYb K#'!Oc%j1DCJe*q.(EC#s5z"JJt>Fe eY.>(? "E "eE5L.A "
 %*~IJJ9dJ3		D$<0MMOs# 	C $$S!,

1	 
r-   TTLc                 &    | j                  |d      S )Ng      ?r   r   s     r,   r   zGenericCommandsMixin.ttl  s    yyc""r-   TYPEc                 $    | j                  |      S r'   )r"   r   s     r,   type_cmdzGenericCommandsMixin.type_cmd  s    ##C((r-   UNLINKc                     t        | S r'   r`   ra   s     r,   unlinkzGenericCommandsMixin.unlink  rc   r-   COPYc                 D   t        |d      \  \  }}}|xs | j                  }|j                  |j                  k(  r(|| j                  k(  rt        t        j
                        |j                  | j                  j                  |   v r|r/|j                  | j                  j                  | j                     vry|j                  |_        |j                  |_	        || j                  j                  |   |j                  <   | j                  j                  |   |_
        y)N)z+dbr   r   r4   )r   r   r.   r   rN   r   r   r   r;   rV   r   )r*   r.   r   r#   db_numr   rW   s          r,   copyzGenericCommandsMixin.copy  s    +D2DE1'4<<77fjj Vt||%;d3344JJ$,,**6227W[WcWcWgWghlhthtWuHuyy,,/2 ,LL$$V,	r-   )0__name__
__module____qualname__r   r   r|   r   __annotations__r	   r=   r   r   r   r   r)   r   rD   rY   r   r   rb   rm   rs   r   rM   rV   r^   r   r   r   r   r   r   r   r   r   r   r   strr   r   r   r   r   r   r  r  __classcell__)r+   s   @r,   r   r      s   
K',
--Xe_c514eT%[>P8Q3RRSS{m\9::c S T u u % 8![ !U !5 !S !F %x9"+ "# " :" &D!9 ;<      = 
 (35(CE8<s  = (35#,x@+  E c  A *SUCL%B<K <C < <# < C< &)AE Ad5k A *A & 01    2 )CE8,; 3  - )CE3<AG; GC G G# G BG +ceS\5(CA[ A AE Ac A DA &)& & & *& ,suh/!k !c ! 0! -x0({ (s ( 1( +R(#8E? # )# (35#%.1+ { |  2 *SUCEN3K    4 )CE3#6xH; S  u QT  I" &u~>9T%tE{0B*C%D 9 ?9 &%:Q QE Qd5k Q ;Qf )CE8UH=H; Hu He H >HT %x(#{ #s # )# &))K )L ) *) (35(CE8<"K "C " =" &x@ [  3  Ar-   r   )'ri   rg   r   typingr   r   r   r   r   r   r	   	fakeredisr
   rN   fakeredis._command_args_parsingr   fakeredis._commandsr   r   r   r   r   r   r   r   fakeredis._helpersr   r   r   r   r   r   fakeredis._typingr   fakeredis.modelr   r   r   r   rq   r-   r,   <module>r     sJ       H H H # 8	 	 	 c b ) : :E Er-   