
    <i>9                         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&dS )    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                 X     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/generic_mixin.pyr)   zGenericCommandsMixin.__init__   sD    2"D))2DCFCCC!    keypatternc                    |dk    r|S |                     d          }|dk    rdS |d|         }||dz   d         }|                     ddd          }|dk    r||dz   d         }|d|         }nd}||z   |z   }t          || j        | j                            |          	          }	|	j        dS |6t          |	j        t                    sdS |	j                            |          S t          |	j        t                    sdS |	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774!Q!E1b))B;;519;;'EFUF^FFE3,'7DH48<<3H3HIII:4dj$// t:>>%(((dj%00 t:r-   	timestampc                    t          |dt          j                  \  \  }}}}}| j        dk     r?t	          ||||f          r,t          t          j                            d                    |||f                    d          }	|	dk    s|r|rt          t          j	                  |r:|r|j
        1|r|j
        (|r|j
        ||j
        k     s|r|j
        ||j
        k    rdS ||_
        dS )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?   s0     4	
 	
 	
	
 <$3BB'7#8#8d299(CCDDDr2,$$T**aKKRKBKd8999		|+ ,|/ 0|/I4L4L 5M|/I4L4L1 qr-   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        |                                          }||z   S r'   )pickledumpsr;   hashlibsha1digest)r*   r.   r;   checksums       r,   dumpzGenericCommandsMixin.dumpf   s9    SY''<&&--//%r-   EXISTSc                 "    d}|D ]	}|r|dz  }
|S Nr   r4    )r*   r^   retr.   s       r,   existszGenericCommandsMixin.existsl   s-     	 	C q
r-   EXPIREsecondsc                 >     | j         || j        j        |z   g|R  }|S r'   rY   r9   time)r*   r.   ru   r#   ress        r,   rM   zGenericCommandsMixin.expiret   s+    dnS$(-'"9ADAAA
r-   EXPIREATc                 :     | j         |t          |          g|R  S r'   )rY   float)r*   r.   rE   r#   s       r,   rV   zGenericCommandsMixin.expireaty   s&    t~c5#3#3;d;;;;r-   KEYSc                 |    |dk    rt          | j                  S t          |          fd| j        D             S )Nr2   c                 >    g | ]}                     |          |S rq   )match).0r.   regexs     r,   
<listcomp>z-GenericCommandsMixin.keys.<locals>.<listcomp>   s*    @@@Cu{{3/?/?@C@@@r-   )listr9   r   )r*   r/   r   s     @r,   r^   zGenericCommandsMixin.keys}   sC    d??>>!#G,,E@@@@48@@@@r-   MOVEdbc                 
   || j         k    rt          t          j                  |r|j        | j        j        |         v rdS | j        j        | j                  |j                 | j        j        |         |j        <   d |_        dS rp   )_db_numr   rN   SRC_DST_SAME_MSGr.   _serverdbsr;   )r*   r.   r   s      r,   movezGenericCommandsMixin.move   sx    d3444 	cg!1"!5551(,(8(Fsw(OSW%	qr-   PERSISTc                 &    |j         dS d |_         dS rp   )rV   r*   r.   s     r,   persistzGenericCommandsMixin.persist   s    <1qr-   PEXPIREmsc                 @     | j         || j        j        |dz  z   g|R  S N     @@rw   )r*   r.   r   r#   s       r,   pexpirezGenericCommandsMixin.pexpire   s+    t~c48=2;#>FFFFFr-   	PEXPIREATms_timestampc                 &     | j         ||dz  g|R  S r   )rY   )r*   r.   r   r#   s       r,   	pexpireatzGenericCommandsMixin.pexpireat   s#    t~c<&#8@4@@@@r-   PTTLc                 .    |                      |d          S r   r    r   s     r,   pttlzGenericCommandsMixin.pttl   s    yyf%%%r-   
EXPIRETIMEc                 N    |j         dS |j        dS t          |j                  S )Nr3   r;   rV   intr   s     r,   
expiretimezGenericCommandsMixin.expiretime   s,    92<23<   r-   PEXPIRETIMEc                 T    |j         dS |j        dS t          |j        dz            S )Nr   r3   i  r   r   s     r,   pexpiretimez GenericCommandsMixin.pexpiretime   s1    92<23<$&'''r-   	RANDOMKEYrq   c                 ~    t          | j                                                  }|sd S t          j        |          S r'   )r   r9   r^   randomchoicera   s     r,   	randomkeyzGenericCommandsMixin.randomkey   s6    DHMMOO$$ 	4}T"""r-   RENAMEnewkeyc                     |st          t          j                  |j        |j        k    r|j        |_        |j        |_        d |_        t          S r'   )r   rN   
NO_KEY_MSGr.   r;   rV   r   r*   r.   r   s      r,   renamezGenericCommandsMixin.rename   sG     	/do...:  9FL!lFOCI	r-   RENAMENXc                 p    |st          t          j                  |rdS |                     ||           dS rp   )r   rN   r   r   r   s      r,   renamenxzGenericCommandsMixin.renamenx   s@     	/do... 	1C   qr-   RESTOREttlr;   c                    t          |d          \  \  }}|r|st          t          j                  |d d         |dd          }}t	          j        |                                          |k    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8
A 	7w 	7d5666*eBCCj%<%%''833d?@@@77d:;;;!88HHx}sV|3HL''		r-   SCANc                 D     | j         t          | j                  |g|R  S r'   )r!   r   r9   )r*   cursorr#   s      r,   scanzGenericCommandsMixin.scan   s&    tz$tx..&848888r-   SORTc                     |j         @t          |j         t          t          t          f          st          t          j                  t          |ddd          \  \  }}}}\  }}}	|pd}|dn|}d uodv}
d}g }|t          |	          k     r|t          |	|         d          r:|dz   t          |	          k     r$|                    |	|dz                       |d	z  }nt          t          j                  |t          |	          k     ||j         t          |j                   ng }t          |d          }|dk     rt          |          n||z   }|t          |          k    rt          |          dz
  x}}t          |t          |                    }|s|                    d
           d
|
sZdt          dt          f fd}dt          dt           t"          t          f         f fd}|r|n|}|                    ||           n5t          |j         t          t          f          r|                                 g }|||         D ]8}|D ]3}                     ||          }||d}|                    |           49|Yt+          | j         j                            |                    }||_         |                                 t          |          S |S )N)ascdescalphaz*store*by++limitFerror_on_unexpectedleft_from_first_unexpectedr   r3   r2      getr4   r5   r1   valr%   c                 T                         |           }|t                      }|S r'   rD   r   r   byvalr*   sortbys     r,   sort_keyz+GenericCommandsMixin.sort.<locals>.sort_key  +    ((f55=%KKEr-   c                 h                         |           }|t          j        |          nd}|| fS Ng        rD   r   decoder   r   scorer*   r   s      r,   sort_key_scorez1GenericCommandsMixin.sort.<locals>.sort_key_score  <    ((f5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   sW   9 CI@RTXZ^?_)`)` d0111 @ %',	
 
 

	
*k "&Q'/bb[%<$f*<#i..  1v.. 91q53y>>3I3I

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

1	
 udhTX\\%5H5HIIIDDJNNs88OJr-   SORT_ROc                     |j         @t          |j         t          t          t          f          st          t          j                  t          |ddd          \  \  }}}\  }}}|pd}|dn|}d uodv}	d}
g }|
t          |          k     r|t          ||
         d          r:|
dz   t          |          k     r$|                    ||
dz                       |
d	z  }
nt          t          j                  |
t          |          k     ||j         t          |j                   ng }t          |d          }|dk     rt          |          n||z   }|t          |          k    rt          |          dz
  x}}t          |t          |                    }|s|                    d
           d
|	sZdt          dt          f fd}dt          dt           t"          t          f         f fd}|r|n|}|                    ||           n5t          |j         t          t          f          r|                                 g }|||         D ]2}|D ]-}                     ||          }|                    |           .3|S )N)r   r   r   r   r   Fr   r   r3   r2   r   r4   r5   r1   r   r%   c                 T                         |           }|t                      }|S r'   r   r   s     r,   r   z.GenericCommandsMixin.sort_ro.<locals>.sort_keyk  r   r-   c                 h                         |           }|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   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  s   9 CIT4?P)Q)Q d0111 6 %',	
 
 
		
*k "&Q'/bb[%<$f*<#i..  1v.. 91q53y>>3I3I

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

1 
r-   TTLc                 .    |                      |d          S )Ng      ?r   r   s     r,   r   zGenericCommandsMixin.ttl  s    yyc"""r-   TYPEc                 ,    |                      |          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                    t          |d          \  \  }}}|p| j        }|j        |j        k    r$|| j        k    rt          t          j                  |j        | j        j        |         v r|r|j        | j        j        | j                 vrdS |j        |_        |j	        |_	        || j        j        |         |j        <   | j        j        |         |_
        dS )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E1'4<7fj  Vt|%;%;d3444J$,*622272W[WcWghlhtWuHuHu1y,/2 ,L$V,	qr-   )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SS{m\9::::c S T      u u %    8![ !U !5 !S ! ! ! !F W%x999"+ "# " " " :9" W&D!9!9!9 ;<<<          =< 
 W(3355(CCEE8<<<s    =< W(3355#,x@@@+  E c    A@ W*SSUUCL%BBB<K <C < <# < < < CB< W&)))AE Ad5k A A A *)A W& 0111      21 W)CCEE8,,,; 3    -, W)CCEE3<AAAG; GC G G# G G G BAG W+cceeS\5(CCCA[ A AE Ac A A A DCA W&)))& & & & & *)& W,ssuuh///!k !c ! ! ! 0/! W-x000({ (s ( ( ( 10( W+R(((#8E? # # # )(# W(3355##%%.111+ { |    21 W*SSUUCCEEN333K      43 W)CCEE3#6xHHH; S  u QT    IH" W&u~>>>9T%tE{0B*C%D 9 9 9 ?>9 W&%:::Q QE Qd5k Q Q Q ;:Qf W)CCEE8UH===H; Hu He H H H >=HT W%x(((#{ #s # # # )(# W&))))K )L ) ) ) *)) W(3355(CCEE8<<<"K "C " " " =<" W&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     s}      H H H H H H H H H H H H H H H H H H # # # # # # 8 8 8 8 8 8	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 c b b b b b b b b b b b b b b b ) ) ) ) ) ) : : : : : : : : : :E E E E E E E E E Er-   