
    <ie<              
       R   U d Z ddlZddlZ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mZmZmZmZ ddlmZ ddlmZmZmZ ddlmZmZ dZi Zeed	f         ed
<    e             Z!ee         ed<    G d d          Z" G d d          Z# G d d          Z$ G d d          Z% G d de%          Z& G d de&          Z' G d de&          Z( G d de&          Z) G d de%          Z* G d de*          Z+ G d  d!e*          Z,ej-         G d" d#                      Z.ej-         G d$ d%                      Z/ G d& d'e%          Z0 G d( d)e%          Z1 G d* d	          Z2d+efd,Z3d-e$d+e4fd.Z5d/e4d0e4d1e4d+ee4e4f         fd2Z6d/e4d0e4d1e4d+ee4e4f         fd3Z7 G d4 d5e&          Z8dS )6z
Helper classes and methods used in mixins implementing various commands.
Unlike _helpers.py, here the methods should be used only in mixins.
    N)TupleUnionOptionalAnyTypeListCallableSequenceDictSet
Collection   )_msgs)null_terminateSimpleErrorDatabase)VersionType
ServerTypei    	SignatureSUPPORTED_COMMANDSCOMMANDS_WITH_SUBc                   X    e Zd ZdZ e            Zdefdeee                  deddfdZ	dS )Keyz6Marker to indicate that argument in signature is a keyNtype_missing_returnreturnc                 "    || _         || _        d S N)r   r   )selfr   r   s      /Users/kimhansen/Desktop/03 Workspace/ceo-agents/chl-effectiveness/mcp-servers/whoop/.venv/lib/python3.11/site-packages/fakeredis/_commands.py__init__zKey.__init__   s    
,    )
__name__
__module____qualname____doc__objectUNSPECIFIEDr   r   r   r!    r"   r    r   r      sc        @@&((K48P[ - -htCy1 -# -`d - - - - - -r"   r   c                   *    e Zd ZdZddgZdeddfdZdS )ItemzAn item stored in the databasevalueexpireatr   Nc                 "    || _         d | _        d S r   )r,   r-   r   r,   s     r    r!   zItem.__init__%   s    
r"   )r#   r$   r%   r&   	__slots__r   r!   r)   r"   r    r+   r+       sF        ((*%Ic d      r"   r+   c                   *   e Zd ZdZddededed          deddf
dZe	defd	            Z
e
j        d
eddfd            Z
e	dee         fd            Zej        dee         ddfd            ZdedefdZd
eddfdZddZddeddfdZdefdZeZdS )CommandItemzuAn item referenced by a command.

    It wraps an Item but has extra fields to manage updates and notifications.
    Nkeydbitemdefaultr   c                     |  ||| _         d | _        n|j        | _         |j        | _        || _        || _        d| _        d| _        d S NF)_value	_expireatr,   r-   r3   r4   	_modified_expireat_modified)r   r3   r4   r5   r6   s        r    r!   zCommandItem.__init__0   sR    '<!DK!DNN*DK!]DN"'r"   c                     | j         S r   r9   r   s    r    r,   zCommandItem.value=   s
    {r"   	new_valuec                 0    || _         d| _        d | _        d S NT)r9   r;   r-   r   r@   s     r    r,   zCommandItem.valueA   s    r"   c                     | j         S r   )r:   r?   s    r    r-   zCommandItem.expireatG   s
    ~r"   r,   c                 0    || _         d| _        d| _        d S rB   )r:   r<   r;   r/   s     r    r-   zCommandItem.expireatK   s    "&r"   c                     | r| j         n|S r   r>   )r   r6   s     r    getzCommandItem.getQ   s    "/t{{/r"   c                 "    || _         d| _        d S rB   )r9   r;   rC   s     r    updatezCommandItem.updateT   s    r"   c                     d| _         d S rB   )r;   r?   s    r    updatedzCommandItem.updatedX   s    r"   Tremove_empty_valc                    | j         r| j                            | j                   t	          | j        t                    s2| j        	| j        s$|r"| j                            | j        d            d S | j                            | j        t          d                     }| j        |_        | j
        |_
        d S | j        r,| j        | j        v r | j
        | j        | j                 _
        d S d S d S r   )r;   r4   notify_watchr3   
isinstancer,   bytespop
setdefaultr+   r-   r<   )r   rL   r5   s      r    	writebackzCommandItem.writeback[   s    > 	G  ***dj%00 dj6HQUQ[6H`p6HDHd+++7%%dhT

;;DDJ MDMF" 	7tx47':':)-DGDH&&&	7 	7':':r"   c                 ^    t          | j                  pt          | j        t                    S r   )boolr9   rO   rP   r?   s    r    __bool__zCommandItem.__bool__i   s#    DK  BJt{E$B$BBr"   )NN)r   N)T)r#   r$   r%   r&   rP   r   r   r   r!   propertyr,   setterfloatr-   rG   rI   rK   rU   rS   rV   __nonzero__r)   r"   r    r2   r2   *   s        
( (E (x (x7N (`c (os ( ( ( ( s    X \s t    \
 (5/    X _huo $    _
03 03 0 0 0 0        7 7$ 7$ 7 7 7 7C$ C C C C KKKr"   r2   c                   $    e Zd Zed             ZdS )	RedisTypec                     t           r   )NotImplementedError)clsargskwargss      r    decodezRedisType.decodep   s    !!r"   N)r#   r$   r%   classmethodrb   r)   r"   r    r\   r\   o   s-        " " [" " "r"   r\   c                       e Zd ZdZej        Zej        ZdZ	dZ
ededefd            Zeddedee         defd	            Zededefd
            ZdS )Intz-Argument converter for 64-bit signed integersl         l    r,   r   c                 6    | j         |cxk    o
| j        k    nc S r   )	MIN_VALUE	MAX_VALUEr_   r,   s     r    validz	Int.valid}   s(    }666666666r"   Ndecode_errorc                     	 t          |          }|                     |          r%t          |                                          |k    rt          |S # t          $ r t          |p| j                  w xY wr   )intrj   strencode
ValueErrorr   DECODE_ERROR)r_   r,   rk   outs       r    rb   z
Int.decode   s    	@e**C99S>> !SXX__%6%6%%?%?  J 	@ 	@ 	@l>c.>???	@s   AA !A5c                     |                      |          r!t          |                                          S t          | j                  r   )rj   rn   ro   r   ENCODE_ERRORri   s     r    ro   z
Int.encode   s?    99U 	0u::$$&&&c.///r"   r   )r#   r$   r%   r&   msgsINVALID_INT_MSGrq   OVERFLOW_MSGrt   rg   rh   rc   rm   rU   rj   rP   r   rn   rb   ro   r)   r"   r    re   re   u   s        77'L$LII7# 7$ 7 7 7 [7 @ @5 @ @ @ @ @ [@ 03 05 0 0 0 [0 0 0r"   re   c                   (    e Zd ZdZej        ZdZdZdS )DbIndexz'Argument converter for database indicesr      N)	r#   r$   r%   r&   ru   INVALID_DB_MSGrq   rg   rh   r)   r"   r    ry   ry      s&        11&LIIIIr"   ry   c                   4    e Zd ZdZej        ZdZdez  dz
  Z	dS )	BitOffsetz-Argument converter for unsigned bit positionsr      r   N)
r#   r$   r%   r&   ru   INVALID_BIT_OFFSET_MSGrq   rg   MAX_STRING_SIZErh   r)   r"   r    r}   r}      s0        77.LIO#a'IIIr"   r}   c                   $    e Zd Zej        ZdZdZdS )BitValuer   r   N)r#   r$   r%   ru   INVALID_BIT_VALUE_MSGrq   rg   rh   r)   r"   r    r   r      s         -LIIIIr"   r   c                       e Zd ZdZej        Ze	 	 	 	 	 ddede	de	de	de	d	e
e         d
efd            Zedede	d
efd            ZdS )FloatzArgument converter for floating-point values.

    Redis uses long double for some cases (INCRBYFLOAT, HINCRBYFLOAT)
    and double for others (zset scores), but Python doesn't support
    `long double`.
    FNr,   allow_leading_whitespaceallow_erangeallow_empty	crop_nullrk   r   c                    	 |rt          |          }|r|dk    rd}|s#|d d                                         rt          |dd                                          rt          t          |          }t	          j        |          rt          |s8|t          j        t          j         dfv rt          j        d|          rt          |S # t          $ r t          |p| j
                  w xY w)Nr"   s   0.0r           s   ^[^a-zA-Z]*[1-9])r   isspacerp   rY   mathisnaninfrematchr   rq   )r_   r,   r   r   r   r   rk   rr   s           r    rb   zFloat.decode   s   	@ .&u-- u||+ !bqb	0A0A0C0C !  RSSz!!## !  ,,Cz# !   % 48dhY444BUW\9]9]4$$J 	@ 	@ 	@l>c.>???	@s   CC !C,humanfriendlyc                 <   t          j        |          r!t          |                                          S |r?d                    |          }t          j        dd|          }|                                S d                    |                                          S )Nz{:.17f}z\.?0+$ z{:.17g})r   isinfrn   ro   formatr   sub)r_   r,   r   rr   s       r    ro   zFloat.encode   s    :e 	4u::$$&&& 	4""5))C&B,,C::<<##E**11333r"   )FFFFN)r#   r$   r%   r&   ru   INVALID_FLOAT_MSGrq   rc   rP   rU   r   rn   rY   rb   ro   r)   r"   r    r   r      s          )L */"!&*@ @@ #'@ 	@
 @ @ sm@ 
@ @ @ [@B 	45 	4 	4% 	4 	4 	4 [	4 	4 	4r"   r   c                   $    e Zd ZdZej        ZdZdS )TimeoutzArgument converter for timeoutsr   N)r#   r$   r%   r&   ru   TIMEOUT_NEGATIVE_MSGrq   rg   r)   r"   r    r   r      s!        )),LIIIr"   r   c                   r     e Zd Zej        Ze	 	 	 	 	 ddededededed	e	e
         d
ef fd            Z xZS )	SortFloatTFNr,   r   r   r   r   rk   r   c                 N    t                                          |ddd          S )NT)r   r   r   )superrb   )r_   r,   r   r   r   r   rk   	__class__s          r    rb   zSortFloat.decode   s%     ww~~edPT`d~eeer"   )TFTTN)r#   r$   r%   ru   INVALID_SORT_FLOAT_MSGrq   rc   rP   rU   r   rn   rY   rb   __classcell__r   s   @r    r   r      s        .L *." &*	f 	f	f #'	f 		f
 	f 	f sm	f 
	f 	f 	f 	f 	f [	f 	f 	f 	f 	fr"   r   c                   :    e Zd ZdedefdZdedefdZdefdZdS )	BeforeAnyotherr   c                     dS r8   r)   r   r   s     r    __gt__zBeforeAny.__gt__       ur"   c                 ,    t          |t                    S r   )rO   r   r   s     r    __eq__zBeforeAny.__eq__   s    %+++r"   c                     dS Nr   r)   r?   s    r    __hash__zBeforeAny.__hash__      qr"   N)	r#   r$   r%   r   rU   r   r   rm   r   r)   r"   r    r   r      ss        C D    ,C ,D , , , ,#      r"   r   c                   :    e Zd ZdedefdZdedefdZdefdZdS )AfterAnyr   r   c                     dS r8   r)   r   s     r    __lt__zAfterAny.__lt__  r   r"   c                 ,    t          |t                    S r   )rO   r   r   s     r    r   zAfterAny.__eq__
  s    %***r"   c                     dS r   r)   r?   s    r    r   zAfterAny.__hash__  r   r"   N)	r#   r$   r%   r   rU   r   r   rm   r   r)   r"   r    r   r     ss        C D    +C +D + + + +#      r"   r   c                       e Zd ZdZddededee         fdZe	dedd fd	            Z
defd
Zedeeeeef         f         fd            Zedeeeeef         f         fd            ZdS )	ScoreTestz2Argument converter for sorted set score endpoints.FNr,   	exclusive	bytes_valc                 0    || _         || _        || _        d S r   )r,   r   r   )r   r,   r   r   s       r    r!   zScoreTest.__init__  s    
""r"   r   c                     	 |}d}|d d         dk    rd}|dd          }t                               |dddd          } | |||          S # t          $ r t          t          j                  w xY w)NFr      (T)r   r   r   r   )r   rb   r   ru   INVALID_MIN_MAX_FLOAT_MSG)r_   r,   original_valuer   fvalues        r    rb   zScoreTest.decode  s    	>"NIRaRyD   	abb	\\)-!  "  F 3vy.999 	> 	> 	>d<===	>s   A	A $A0c                 l    | j         rd                    | j                  S t          | j                  S )Nz({!r})r   r   r,   reprr?   s    r    __str__zScoreTest.__str__,  s0    > 	$>>$*---
###r"   c                 V    | j         | j        rt                      nt                      fS r   )r,   r   r   r   r?   s    r    lower_boundzScoreTest.lower_bound2  s"    zH8:::Y[[HHr"   c                 V    | j         | j        rt                      nt                      fS r   )r,   r   r   r   r?   s    r    upper_boundzScoreTest.upper_bound6  s"    z$.H9;;;hjjHHr"   )FN)r#   r$   r%   r&   rY   rU   r   rP   r!   rc   rb   rn   r   rW   r   r   r   r   r   r   r)   r"   r    r   r     s       <<# #e # #RW # # # #
 >5 >[ > > > [>$$ $ $ $ $ IU5%)0C*D#DE I I I XI IU5%)0C*D#DE I I I XI I Ir"   r   c                   T    e Zd ZdZdeeeef         defdZ	e
dedd fd            ZdS )
StringTestz0Argument converter for sorted set LEX endpoints.r,   r   c                 "    || _         || _        d S r   )r,   r   )r   r,   r   s      r    r!   zStringTest.__init__>  s    
"r"   r   c                 4   |dk    r | t                      d          S |dk    r | t                      d          S |d d         dk    r | |dd          d          S |d d         dk    r | |dd          d          S t          t          j                  )N   -T   +r   r      [F)r   r   r   ru   INVALID_MIN_MAX_STR_MSGri   s     r    rb   zStringTest.decodeB  s    D==3y{{D)))d]]3xzz4(((2A2Y$3uQRRy$'''2A2Y$3uQRRy%(((d:;;;r"   N)r#   r$   r%   r&   r   rP   r   r   rU   r!   rc   rb   r)   r"   r    r   r   ;  sv        ::#eE9h$>? #D # # # # 
<5 
<\ 
< 
< 
< [
< 
< 
<r"   r   c                   ,   e Zd Z	 	 	 	 ddededeeeeef                           deeeeef                           dee         d	ed
e	e
         fdZdee         deddfdZdee         dededeee         eee         ee         f         f         fdZdS )r   r)   r   redisvalkey	dragonflyname	func_namefixedrepeatr`   flagsserver_typesc                     || _         || _        || _        || _        t	          |          | _        || _        t	          |          | _        d S r   )r   r   r   r   setr   command_argsr   )r   r   r   r   r   r`   r   r   s           r    r!   zSignature.__init__Y  sK     	"
ZZ
 -0->->r"   versionr   Nc                    t          |          t          | j                  k    rd S t          |          t          | j                  z
  }|dk     s| j        s3t          j                            | j                  }t          |          |t          | j                  z  dk    rE|dk    rt          j        n#t          j                            | j                  }t          |          d S )Nr   )   )	lenr   r   ru   WRONG_ARGS_MSG6r   r   r   WRONG_ARGS_MSG7)r   r`   r   deltamsgs        r    check_arityzSignature.check_arityo  s    t99DJ''FD		C
OO+199DK9&--di88Cc"""3t{###q((*1T//$&&t?S?Z?Z[_[d?e?eCc""" )(r"   r4   c           	                                ||           t           j                  }|                     fdt	          t          |          t          |          z
            D                        t          |          }t          t          ||                    D ]f\  }\  }}t          |t                    r"|j
        t          j        ur||vr
|j
        fc S ?|t          ur|                    ||                   ||<   gg }	t          t          ||                    D ]\  }\  }}t          |t                    r|                    |          }
d}|j        6|
4t!          |
j                  |j        urt%          t&          j                  t&          j         j        vr+|j        $|
"|j        t          ur|                                }t/          |||
|          ||<   |	                    ||                    ||	fS )zReturns a tuple, which is either:
        - transformed args and a dict of CommandItems; or
        - a single containing a short-circuit return value
        c                 T    g | ]$}j         |t          j                   z           %S r)   )r   r   ).0ir   s     r    
<listcomp>z#Signature.apply.<locals>.<listcomp>  s/    ___Adk!c$+&6&6"67___r"   N)r6   )r   listr   extendranger   	enumerateziprO   r   r   r(   rP   rb   rG   r   typer,   r   ru   WRONGTYPE_MSGFLAG_DO_NOT_CREATEr   r2   append)r   r`   r4   r   types	args_listr   argr   command_itemsr5   r6   s   `           r    applyzSignature.applyz  s
    	w'''TZ  ____s4yySVW\S]S]G]A^A^___```JJ	(Y)>)>?? 	 	OA|U%%% 's>>3b==!02222e##$||aL   	!
 ,.(Y)>)>?? 	3 	3OA|U%%% 3vvc{{;*t/?DDTDT\a\gDgDg%d&8999+4:==/500#kkmmG*3D'JJJ	!$$Yq\222-''r"   )r)   r)   r   r   )r#   r$   r%   rn   r   r   r   r\   rP   r   r   r!   r
   r   r   r   r   r   r2   r   r)   r"   r    r   r   X  s8        8:0
? ?? ? T%	5 0123	?
 d5E!1234? Cj? ? !,? ? ? ?,	# 	# 	# 	# 	# 	# 	#)(SM)('/)(:E)(	uSz5cD,=!=>>	?)( )( )( )( )( )(r"   r   c                       dt           dt          f         dt          dd f fddt           dt          f         dt           dt          f         ffd}|S )Nfunc.cmd_namer   c                     d|v r3t                               |                    d          d                    t          || j        gR i t
          |<   d S )N r   )r   addsplitr   r#   r   )r   r   r`   ra   s     r    create_signaturez!command.<locals>.create_signature  s_    (??!!(.."5"5a"8999'04='Z4'Z'Z'ZSY'Z'Z8$$$r"   c                 6                        d| j                  }t          |t                    r$|D ] } | |                                           !nCt          |t
                    r | |                                           nt          d          | S )Nr   z2command name should be a string or list of strings)rQ   r#   rO   r   lowerrn   rp   )r   	cmd_namesr   r  ra   s      r    	decoratorzcommand.<locals>.decorator  s    JJvt}55	i&& 	S% 9 9  x~~'7'788889	3'' 	ST9??#4#45555QRRRr"   )r	   r   rn   )r`   ra   r  r  s   `` @r    commandr    s    [xS1 [S [T [ [ [ [ [ [ [
	c* 	xS/A 	 	 	 	 	 	 	 r"   keysc                      d}t                      }| D ]3}|r/|j        |vr&d |_        |                    |j                   |dz  }4|S )Nr   r   )r   r3   r,   r   )r  ansdoner3   s       r    delete_keysr    s]    
C55D   	37$&&CIHHSW1HCJr"   startendlengthc                     | dk     rt          d| |z             } |dk     r||z  }| |k    s| |k    rdS t          ||dz
            }| |dz   fS Nr   )r   r   r   maxminr  r  r  s      r    	fix_ranger    sg    qyyAuv~&&
Qwwvs{{evoov
c6A:

C#'>r"   c                     d| cxk    r|k    rn n|dk     rdS | dk     rt          d| |z             } |dk     rt          d||z             }t          ||dz
            }| |dz   fS r  r  r  s      r    fix_range_stringr    s    53377vqyyAuv~&&
Qww!S6\""
c6A:

C#'>r"   c                   N     e Zd ZdZeddedee         def fd            Z	 xZ
S )	Timestampz!Argument converter for timestampsNr,   rk   r   c                     |dk    r#t          t          j                    dz            S |dk    rdS |dk    rt          j        S t	                                          |t          j                  S )N   *i  r   r   r   )rk   )rm   timesysmaxsizer   rb   ru   INVALID_EXPIRE_MSG)r_   r,   rk   r   s      r    rb   zTimestamp.decode  sa    D==ty{{T)***D==2D==;ww~~e$2I~JJJr"   r   )r#   r$   r%   r&   rc   rP   r   rn   rm   rb   r   r   s   @r    r  r    sy        ++K K5 K K K K K K K [K K K K Kr"   r  )9r&   	functoolsr   r   r  r  typingr   r   r   r   r   r   r	   r
   r   r   r   r   r   ru   _helpersr   r   r   _typingr   r   r   r   rn   __annotations__r   r   r   r+   r2   r\   re   ry   r}   r   r   r   r   total_orderingr   r   r   r   r   r  rm   r  r  r  r  r)   r"   r    <module>r'     s    
      				 



  e e e e e e e e e e e e e e e e e e e e e e e e e e       ; ; ; ; ; ; ; ; ; ; , , , , , , , ,#-/ Dk)* / / /!cee 3s8 # # #- - - - - - - -       B B B B B B B BJ" " " " " " " "0 0 0 0 0) 0 0 0<    c   ( ( ( ( ( ( ( (    s   64 64 64 64 64I 64 64 64r    e   f f f f f f f f                 'I 'I 'I 'I 'I	 'I 'I 'IT< < < < < < < <:K( K( K( K( K( K( K( K(\    ({ s    	S 	s 	C 	E#s(O 	 	 	 		C 	c 	3 	5c? 	 	 	 	K K K K K K K K K Kr"   