
    <i#              
       >   d dl 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 d dlm	Z	m
Z
mZmZmZmZmZmZmZ d dlZ G d d          Z G d de          Z G d d	          Z ed
          Z ed          Z ed          ZdefdZdedefdZdededefdZdede fdZ!dedefdZ"dedej#        fdZ$ G d de          Z%eeee&ee'fZ(eeee&ee'e)e fZ*d&de	dededefdZ+ G d d e,          Z-de
e          fd!Z.d"eej/                 d#e	d$e	dee e	f         fd%Z0dS )'    N)defaultdict)	AnySetCallableDictOptionalIteratorAnyStrTypeMutableMappingc                   J    e Zd ZdeddfdZededefd            ZdefdZdS )SimpleStringvaluereturnNc                 B    t          |t                    sJ || _        d S N)
isinstancebytesr   selfr   s     /Users/kimhansen/Desktop/03 Workspace/ceo-agents/chl-effectiveness/mcp-servers/whoop/.venv/lib/python3.11/site-packages/fakeredis/_helpers.py__init__zSimpleString.__init__   s#    %'''''


    c                     |S r    )clsr   s     r   decodezSimpleString.decode   s    r   c                 0    | j         j         d| j        dS )N())	__class____name__r   r   s    r   __repr__zSimpleString.__repr__   s     .);;DJ;;;;r   )	r"   
__module____qualname__r   r   classmethodr   strr$   r   r   r   r   r      s        e      5 U    [<# < < < < < <r   r   c                   "    e Zd ZdZdeddfdZdS )SimpleErrorzAException that will be turned into a frontend-specific exception.r   r   Nc                 B    t          |t                    sJ || _        d S r   )r   r(   r   r   s     r   r   zSimpleError.__init__   s#    %%%%%%


r   )r"   r%   r&   __doc__r(   r   r   r   r   r*   r*      s<        KKc d      r   r*   c                       e Zd ZdZdS )
NoResponsezLReturned by pub/sub commands to indicate that no response should be returnedN)r"   r%   r&   r,   r   r   r   r.   r.   "   s        VVDr   r.   s   OKs   QUEUEDs   Background saving startedr   c                  H    t          t          j                    dz            S )zReturn current_time in msi  )inttimer   r   r   current_timer2   -   s    ty{{T!"""r   sc                     |                      d          }|dk    r| d |                                         S |                                 S )N    )findlower)r3   inds     r   null_terminater:   2   s@     &&--C
Rxx#w}}7799r   abc                 B    t          |           t          |          k    S r   )r:   )r;   r<   s     r   	casematchr>   ;   s    !q 1 111r   c                 T    |                      dd                                          S )Nutf-8replace)encodingerrors)r   r8   )r3   s    r   decode_command_bytesrD   ?   s$    88WY877==???r   r   c                 Z    t          | t                    r|                     d          S | S )Nr@   )r   r(   encode)r   s    r   asbytesrG   C   s+    % %||G$$$Lr   pattern_bytesc                 ,   |                      d          }dg}d}t          |          }||k     r||         }|dz  }|dk    r|                    d           nW|dk    r|                    d           n:|d	k    r?||k    r|dz  }|                    t          j        ||                              |dz  }n|d
k    r|                    d
           ||k     r&||         dk    r|dz  }|                    d           t          |          }||k     r||         d	k    r<|dz   |k     r3|dz  }|                    t          j        ||                              n||         dk    r|dz  }n|dz   |k     rq||dz            dk    rb||         }||dz            }||k    r||}}|                    t          j        |          dz   t          j        |          z              |dz  }n-|                    t          j        ||                              |dz  }||k     t          |          |k    r:|d         d
k    rd|d<   ne|d         dk    sJ |                                 d|d<   n=|                    d           n'|                    t          j        |                     ||k     |                    d           d                    |                              d          }	t          j        |	t          j	                  S )af  Compile a glob pattern (e.g., for keys) to a `bytes` regex.

    `fnmatch.fnmatchcase` doesn't work for this because it uses different
    escaping rules to redis, uses ! instead of ^ to negate a character set,
    and handles invalid cases (such as a [ without a ]) differently. This
    implementation was written by studying the redis implementation.
    zlatin-1^r      ?.*z.*\[]   -r6   z(?:$.)z\Z )flags)
r   lenappendreescapepopjoinrF   compileS)
rH   patternpartsipattern_lenc	parts_lenstartendregexs
             r   compile_patternrg   I   s/    !'' G EE	Ag,,K
k//AJ	Q88LL#XXLL$YYKQLL71:..///FAA#XXLL;71:#4#4QS!!!E

Ik//1:%%!a%+*=*=FALL71:!6!67777QZ3&&FAU[((WQU^s-B-B#AJE!!a%.Cs{{%(%sLL5!1!1C!7")C..!HIIIFAALL71:!6!6777Q! k//" 5zzY&&9## (E"II !9++++IIKKK #E"IIS!!!!LL1&&&_ k//` 
LL775>>((33E:e24((((r   c                   ^    e Zd Zdeej                 dededdfdZddZd	e	ddfd
Z
d	e	deddfdZd	e	deddfdZdeg df         ddfdZdeg df         ddfdZddZdedefdZddZd	e	defdZd	e	deddfdZd	e	ddfdZdee	         fdZdefdZdef fdZdedef fdZ xZS )Databaselockargskwargsr   Nc                     t          |i || _        d| _        t          t          j                  | _        t          j        |          | _	        t                      | _        d S )Ng        )dict_dictr1   r   weakrefWeakSet_watches	threading	Condition	conditionset_change_callbacks)r   rj   rk   rl   s       r   r   zDatabase.__init__   sR    '+T'<V'<'<
	;Fw;W;W",T22:=%%r   otherc                 j    |j         | j         c| _         |_         |j        | j        c| _        |_        d S r   )ro   r1   )r   rx   s     r   swapzDatabase.swap   s.    "'+tz
EK %
DI	5:::r   keyc                     | j                             |t                                D ]}|                                 | j                                         | j        D ]} |             d S r   )rr   getrv   notify_watchru   
notify_allrw   )r   r{   sockcallbacks       r   r~   zDatabase.notify_watch   sy    M%%c35511 	  	 D!!###. 	 	HHJJJJ	 	r   r   c                 F    | j         |                             |           d S r   )rr   add)r   r{   r   s      r   	add_watchzDatabase.add_watch   s#    ct$$$$$r   c                 b    | j         |         }|                    |           |s
| j         |= d S d S r   )rr   discard)r   r{   r   watchess       r   remove_watchzDatabase.remove_watch   sB    -$ 	#c"""	# 	#r   r   c                 :    | j                             |           d S r   )rw   r   r   r   s     r   add_change_callbackzDatabase.add_change_callback   s    ""8,,,,,r   c                 :    | j                             |           d S r   )rw   remover   s     r   remove_change_callbackzDatabase.remove_change_callback   s    %%h/////r   c                 l    | D ]}|                      |           | j                                         d S r   )r~   ro   clearr   r{   s     r   r   zDatabase.clear   sB     	# 	#Cc""""
r   itemc                 4    |j         d uo|j         | j        k     S r   )expireatr1   )r   r   s     r   expiredzDatabase.expired   s    }D(FT]TY-FFr   c                     t          | j                  D ],}| j        |         }|                     |          r| j        |= -d S r   )listro   r   r   r{   r   s      r   _remove_expiredzDatabase._remove_expired   sN    
## 	$ 	$C:c?D||D!! $JsO	$ 	$r   c                 x    | j         |         }|                     |          r| j         |= t          |          |S r   )ro   r   KeyErrorr   s      r   __getitem__zDatabase.__getitem__   s;    z#<< 	 
33--r   r   c                     || j         |<   d S r   ro   )r   r{   r   s      r   __setitem__zDatabase.__setitem__   s    
3r   c                     | j         |= d S r   r   r   s     r   __delitem__zDatabase.__delitem__   s    JsOOOr   c                 R    |                                   t          | j                  S r   )r   iterro   r#   s    r   __iter__zDatabase.__iter__   s$    DJr   c                 R    |                                   t          | j                  S r   )r   rV   ro   r#   s    r   __len__zDatabase.__len__   s"    4:r   c                 H    t          t          t          |                     S r   )hashsuperobject)r   r!   s    r   __hash__zDatabase.__hash__   s    E&$''(((r   c                 6    t          t          |           |k    S r   )r   r   )r   rx   r!   s     r   __eq__zDatabase.__eq__   s    VT""e++r   )rx   ri   r   N)r   N)r"   r%   r&   r   rs   Lockr   r   rz   r   r~   r   r   r   r   r   r   boolr   r   r   r   r   r	   r   r0   r   r   r   r   __classcell__)r!   s   @r   ri   ri      s       @Xin5 @c @S @UY @ @ @ @6 6 6 6 $    %U %# %$ % % % %# #S #T # # # #-HRX,> -4 - - - -0xD/A 0d 0 0 0 0   
GC GD G G G G$ $ $ $u      u  S  T        u      (5/            )# ) ) ) ) ) ),F ,t , , , , , , , , , ,r   ri   Fprotocol_versionnestedc                     t          | t                    r|sdS dk    rt          nt          }| t          | |          sdS t          | t                    rt          fd| D                       rdS dS )NTrR   Fc              3   <   K   | ]}t          |d            V  dS )TN)valid_response_type).0r   r   s     r   	<genexpr>z&valid_response_type.<locals>.<genexpr>   s4      WW&t-=tDDDWWWWWWr   )r   r.   _VALID_RESPONSE_TYPES_RESP2_VALID_RESPONSE_TYPES_RESP3r   any)r   r   r   allowed_typess    `  r   r   r      s    %$$ V t3Cq3H3H//NiME=!A!Au% WWWWQVWWWWW 	54r   c                   V    e Zd ZdefdZdee         defdZe	dedefd            Z
dS )	FakeSelectorr   c                     || _         d S r   )r   )r   r   s     r   r   zFakeSelector.__init__   s    			r   timeoutr   c                 (   | j         j                                        rdS ||dk    rdS t          j                    }	 | j         j                                        rdS t          j        d           t          j                    }||||z   k    rdS U)NTr   Fg{Gz?)r   	responsesqsizer1   sleep)r   r   rd   nows       r   check_can_readzFakeSelector.check_can_read   s    9$$&& 	47a<<5 		y"((** tJt)++C"sUW_'<'<u	r   _c                     dS )NTr   )r   s    r   check_is_ready_for_commandz'FakeSelector.check_is_ready_for_command   s    tr   N)r"   r%   r&   r   r   r   floatr   r   staticmethodr   r   r   r   r   r      s        S    huo $    " c d    \  r   r   c                      t           j        j        j        } | t	                      S | D ]B}|j        }t          |t                    r$t          |          dk    rt	          |          c S Ct	                      S )Nr   )	redisRedisr   __closure__rv   cell_contentsr   r   rV   )closurecellr   s      r   _get_args_to_warnr     sp    k".Guu  "eT"" 	s5zzA~~u::55Lr   redis_classrk   rl   c                    t          t          j        | j                  j                                                  dd         t                                          fdt          t                              D                        
                    dt          j                    j                   fdt                    D             }|S )zWInterpret the positional and keyword arguments according to the version of redis in userK   Nc                 8    i | ]}|         j         |         S r   )name)r   r`   rk   
parameterss     r   
<dictcomp>z5convert_args_to_redis_init_kwargs.<locals>.<dictcomp>  s&    III1:a=%tAwIIIr   hostc                     i | ]W\  }}|j         t          j        j        k    |j        vs	|j        v 1|j                            |j        |j                   XS r   )defaultinspect	Parameteremptyr   r}   )r   r9   pargs_to_warnrl   s      r   r   z5convert_args_to_redis_init_kwargs.<locals>.<dictcomp>  sk       C9)///QV<5O5OSTSY]cScSc 	


1619--ScScScr   )r   r   	signaturer   r   valuesr   updaterangerV   
setdefaultuuiduuid4hex	enumerate)r   rk   rl   kwdsr   r   s    `` @@r   !convert_args_to_redis_init_kwargsr     s    g'(<==HOOQQRRSTSUSUVJ$&&L
MMIIIIIc$ii8H8HIIIJJJ
fdjll.///    
++  D
 Kr   )F)1r   rX   rs   r1   r   rp   collectionsr   typingr   r   r   r   r   r	   r
   r   r   r   r   	Exceptionr*   r.   OKQUEUEDBGSAVE_STARTEDr0   r2   r   r:   r   r>   r(   rD   rG   Patternrg   ri   r   r   r   rn   r   r   r   r   r   r   r   r   r   r   <module>r      sO    				        # # # # # # ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] 
< 
< 
< 
< 
< 
< 
< 
<    )   	 	 	 	 	 	 	 	 \%	i	 	 :;;#c # # # #
e     2 25 2T 2 2 2 2@E @c @ @ @ @6 e    B)5 B)RZ B) B) B) B)JJ, J, J, J, J,~ J, J, J,Z  %lKTR $lKTSWY\] 	 	s 	c 	4 	TX 	 	 	 	    6   43s8    43D S \_ dhilnqiqdr      r   