
    <iT&                       d dl m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 d dlmZ d dlmZ d dlmZ ddlmZ ddlmZ dd	lmZ dd
lmZmZ ddlmZmZmZmZ ddl m!Z!m"Z"m#Z#  G d dej$                  Z% G d d          Z& G d d          Z' G d deej(                  Z) G d d          Z* G d de*ej+                  Z,dS )    )annotationsN)	UnionOptionalAnyCallableIterableTupleListSetSequence)ResponseError)DefaultParser   )_fakesocket)_helpers)_msgs)SimpleError!convert_args_to_redis_init_kwargs)FakeBaseConnectionMixinVersionType
FakeServer
ServerType)async_timeoutSelfRaiseErrorTypesc                  N     e Zd Zej        Zd fdZdd
ZddZddZ	ddZ
 xZS )AsyncFakeSocketargsr   kwargsreturnNonec                j     t                      j        |i | t          j                    | _        d S N)super__init__asyncioQueue	responses)selfr   r   	__class__s      /Users/kimhansen/Desktop/03 Workspace/ceo-agents/chl-effectiveness/mcp-servers/whoop/.venv/lib/python3.11/site-packages/fakeredis/aioredis.pyr%   zAsyncFakeSocket.__init__   s0    $)&)))(/    errorr   r   c                T    t          d          }|                    |j                  S )Nr   )r   parse_errorvalue)r)   r-   parsers      r+   _decode_errorzAsyncFakeSocket._decode_error   s%    q!!!!%+...r,   msgc                L    | j         sd S | j                             |           d S r#   )r(   
put_nowait)r)   r3   s     r+   put_responsezAsyncFakeSocket.put_response   s-    ~ 	F!!#&&&&&r,   timeoutOptional[Union[float, int]]funcCallable[[bool], Any]eventasyncio.EventcallbackCallable[[], None]c                f  K   d }	 t          |r|nd           4 d {V  	 |                                 d {V  |                                 | j        j        5   |d          }|"|                     |          }	 d d d            n	 d d d            n# 1 swxY w Y   	 d d d           d {V  n# 1 d {V swxY w Y   n# t          j        $ r Y nw xY w| j        j        5  | j        	                    |           d d d            n# 1 swxY w Y   | 
                    |           |                                  d S # | j        j        5  | j        	                    |           d d d            n# 1 swxY w Y   | 
                    |           |                                  w xY w)NTF)r   waitclear_serverlock_decode_resultr&   TimeoutError_dbremove_change_callbackr6   resume)r)   r7   r9   r;   r=   resultrets          r+   _async_blockingzAsyncFakeSocket._async_blocking#   s&      	$%AWWTBB 
" 
" 
" 
" 
" 
" 
" 
"	"**,,&&&&&&&KKMMM * " ""d5kk?%)%8%8%=%=F!	" " " " " " "*" " " " " " " " " " " " " " "	" 	"
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" # 	 	 	D	 " : ://999: : : : : : : : : : : : : : :f%%%KKMMMMM " : ://999: : : : : : : : : : : : : : :f%%%KKMMMMs   C	 <B7$B?B7B7B	B7B	 B7%C	 7
CC	 CC	 E 	CE CE *DDDF0E;/F0;E??F0E?-F0Callable[[bool], None]c                d   t          j                     |d          }|| j        r|S t          j                    dfd}| j                            |           |                                                      |                     |||                     t          j
                    S )NTr    r!   c                 <                          j                   d S r#   )call_soon_threadsafeset)r;   loops   r+   r=   z+AsyncFakeSocket._blocking.<locals>.callbackJ   s    %%ei00000r,   r    r!   )r&   get_event_loop_in_transactionEventrF   add_change_callbackpausecreate_taskrK   r   
NoResponse)r)   r7   r9   rJ   r=   r;   rQ   s        @@r+   	_blockingzAsyncFakeSocket._blocking?   s    
 %''d4jj?d2?J	1 	1 	1 	1 	1 	1 	1 	$$X...

--gtUHMMNNN"$$$r,   )r   r   r   r   r    r!   )r-   r   r    r   )r3   r   r    r!   )
r7   r8   r9   r:   r;   r<   r=   r>   r    r!   )r7   r8   r9   rL   r    r   )__name__
__module____qualname__redis_asyncConnectionError_connection_error_classr%   r2   r6   rK   rZ   __classcell__r*   s   @r+   r   r      s        )98 8 8 8 8 8/ / / /' ' ' '
   8% % % % % % % %r,   r   c                  &    e Zd ZddZdd	ZddZdS )
FakeReadersocketr   r    r!   c                    || _         d S r#   _socketr)   re   s     r+   r%   zFakeReader.__init__T   s    r,   _intbytesc                N   K   | j         j                                         d {V S r#   )rh   r(   get)r)   rj   s     r+   readzFakeReader.readW   s/      \+//111111111r,   boolc                b    | j         j                                        o| j         j        j         S r#   )rh   r(   emptyrB   	connectedr)   s    r+   at_eofzFakeReader.at_eofZ   s)    |%++--Tdl6J6T2TTr,   Nre   r   r    r!   )rj   rk   r    rl   )r    rp   )r[   r\   r]   r%   ro   ru    r,   r+   rd   rd   S   sV           2 2 2 2U U U U U Ur,   rd   c                  6    e Zd ZddZddZddZddZddZdS )
FakeWriterre   r   r    r!   c                    || _         d S r#   rg   ri   s     r+   r%   zFakeWriter.__init___   s    28r,   c                    d | _         d S r#   rg   rt   s    r+   closezFakeWriter.closeb   s    r,   c                
   K   d S r#   rw   rt   s    r+   wait_closedzFakeWriter.wait_closede         r,   c                
   K   d S r#   rw   rt   s    r+   drainzFakeWriter.drainh   r   r,   dataIterable[Any]c                V    | j         d S |D ]}| j                             |           d S r#   )rh   sendall)r)   r   chunks      r+   
writelineszFakeWriter.writelinesk   sA    <F 	( 	(EL  ''''	( 	(r,   Nrv   rR   )r   r   r    r!   )r[   r\   r]   r%   r|   r~   r   r   rw   r,   r+   ry   ry   ^   sx        9 9 9 9         ( ( ( ( ( (r,   ry   c                  j     e Zd ZddZd Zdd fd
Zdd dZd!dZd"dZd#dZ	d$dZ
d%dZd&dZ xZS )'FakeConnectionr    r!   c                  K   | j         j        st          j        t          j                  t          | j         | j        | j        | j	                  | _
        t          | j
                  | _        t          | j
                  | _        d S )N)client_classlua_modules)rB   rs   r^   r_   msgsCONNECTION_ERROR_MSGr   db_client_class_lua_modules_sockrd   _readerry   _writerrt   s    r+   _connectzFakeConnection._connects   sz      |% 	I-d.GHHH0?L$'0BPTPa1
 1
 1

 .8
-C-C-7
-C-Cr,   c                0    d | _         d | _        d | _        d S r#   )r   r   r   rt   s    r+   __del__zFakeConnection.__del__|   s     


r,   Fnowaitrp   r   r   c                t   K   d | _         d | _        d | _         t                      j        di | d {V  d S )Nrw   )r   r   r   r$   
disconnect)r)   r   r   r*   s      r+   r   zFakeConnection.disconnect   sQ      
 egg **6***********r,   r   r7   Optional[float]c                  K   | j         s|                                  d {V  |dk    r(| j        d uo| j        j                                         S t          j                    }|                                }	 | j        r | j        j                                        sdS t          j        d           d {V  |                                }||||z   k    rdS c)Nr   Tg{Gz?F)	is_connectedconnectr   r(   rr   r&   rS   timesleep)r)   r7   rQ   startnows        r+   can_readzFakeConnection.can_read   s        	!,,..       a<<:T)N$*2F2L2L2N2N.NN %''			z $*"6"<"<">"> t-%%%%%%%%%))++C"sUW_'<'<u	r,   commandSequence[str]c                
   K   d S r#   rw   )r)   r   s     r+   _get_from_local_cachez$FakeConnection._get_from_local_cache   s      tr,   responsekeys	List[Any]c                    d S r#   rw   )r)   r   r   r   s       r+   _add_to_local_cachez"FakeConnection._add_to_local_cache   s    tr,   c                     t          |t                    r fd|D             S t          |t                    r j                            |          S |S )Nc                :    g | ]}                     |          S rw   )_decode).0itemr)   s     r+   
<listcomp>z*FakeConnection._decode.<locals>.<listcomp>   s%    <<<4DLL&&<<<r,   )
isinstancelistrl   encoderdecode)r)   r   s   ` r+   r   zFakeConnection._decode   s\    h%% 	<<<<8<<<<%(( 	<&&x000Or,   c                  K   | j         st          j        t          j                  | j        j        s	 | j         j                                        }n# t          j
        $ rO |                    dd          r|                                  d {V  t          j        t          j                  w xY w|                    dd           }|                     |           d {V }|r'| j        r | j                            d           d {V nd }t#          |t$                    r||                    dd          r|S |                     |          S )Ndisconnect_on_errorTr7   r   disable_decodingF)r   r^   r_   r   r   rB   rs   r(   
get_nowaitr&   
QueueEmptyrn   r   popr   r   ro   r   r   r   )r)   r   r   r7   r   s        r+   read_responsezFakeConnection.read_response   sv     z 	I-d.GHHH|% 
	YM:/::<<% M M M::3T:: ,//+++++++++!1$2KLLLM
 (.zz)T'B'BG!]]733333333H5=X$,XT\..q111111111TXHh00 	N::(%00 	O||H%%%s   A AB2List[Tuple[str, Any]]c                p    d| j         fd| j        fg}| j        r|                    d| j        f           |S )Nserverr   client_name)rB   r   r   append)r)   piecess     r+   repr_pieceszFakeConnection.repr_pieces   sC    T\*T47O< 	=MM=$*:;<<<r,   strc                    | j         S r#   )
server_keyrt   s    r+   __str__zFakeConnection.__str__   s
    r,   rR   )F)r   rp   r   r   r    r!   )r   )r7   r   r    rp   )r   r   r    r!   )r   r   r   r   r   r   r    r!   )r   r   r    r   )r   r   r    r   )r    r   )r    r   )r[   r\   r]   r   r   r   r   r   r   r   r   r   r   ra   rb   s   @r+   r   r   r   s        D D D D  + + + + + + +    $         & & & &(          r,   r   c                  T     e Zd Zddddej        dd fdZed fd            Z xZS )FakeRedisMixinN)   redis)r   versionserver_typer   r   r   r   r   Optional[FakeServer]r   Union[VersionType, str, int]r   r   r   Optional[Set[str]]r   r    r!   c               ,   t          |g|R i ||d<   |                    dd          d<                       dd           sƉ                    dd           }                    dd           }	|&t          j        t	          d                     |d<   |	&t          j        t	          d	                     |	d
<   h d}
t
          |||d}|                    fd|
D                        t          j        j	        di |d<   
                    dd            
                    dd            
                    dd            
                    dd            
                    dd             t                      j        di  d S )Nr   rs   Tconnection_poolcharseterrorsz/"charset" is deprecated. Use "encoding" insteadencodingz5"errors" is deprecated. Use "encoding_errors" insteadencoding_errors>   r   hostportr   r   passwordusernamers   r   socket_timeoutr   max_connectionsdecode_responsesretry_on_timeouthealth_check_interval)connection_classr   r   r   c                *    i | ]}|v ||         S rw   rw   )r   argkwdss     r+   
<dictcomp>z+FakeRedisMixin.__init__.<locals>.<dictcomp>   s+    %^%^%^RUY]R]R]c49R]R]R]r,   r   r   r   rw   )r   rn   warningswarnDeprecationWarningr   updater^   
connectionConnectionPoolr   r$   r%   )r)   r   r   r   r   r   r   r   r   r   conn_pool_argsconnection_kwargsr   r*   s               @r+   r%   zFakeRedisMixin.__init__   s    1OOOOOOX"JJ{D99[xx)400 "	ahhy$//GXXh--F"01bccddd#*Z !01hiijjj*0&'  N$ %3"**	! ! $$%^%^%^%^%^%^%^___&1&<&K&`&`N_&`&`D"#4   d###D!!!%%%%%%  4     r,   urlr   r   c                     t                      j        |fi |}|j        }t          |_        |j                            dd           |j                            dd           |S )Nr   z7.4r   r   )r$   from_urlr   r   r   r   
setdefault)clsr   r   r)   poolr*   s        r+   r   zFakeRedisMixin.from_url   sh    "2%''"23"A"A&"A"A# .)))U;;;))-AAAr,   )r   r   r   r   r   r   r   r   r   r   r   r   r    r!   )r   r   r   r   r    r   )	r[   r\   r]   r^   Redisr%   classmethodr   ra   rb   s   @r+   r   r      s         (,04")*. &5! 5! 5! 5! 5! 5! 5! 5!n      [    r,   r   c                      e Zd ZdS )	FakeRedisN)r[   r\   r]   rw   r,   r+   r   r   
  s        Dr,   r   )-
__future__r   r&   r   typingr   r   r   r   r   r	   r
   r   r   redis.asyncior^   r   r   redis.asyncio.connectionr    r   r   r   r   r   r   rB   r   r   r   r   _typingr   r   r   
FakeSocketr   rd   ry   
Connectionr   r   r   r   rw   r,   r+   <module>r      sR   " " " " " "   W W W W W W W W W W W W W W W W W W W W W W # # # # # #       2 2 2 2 2 2                   D D D D D D D D Q Q Q Q Q Q Q Q Q Q Q Q 9 9 9 9 9 9 9 9 9 9=% =% =% =% =%k, =% =% =%@U U U U U U U U( ( ( ( ( ( ( ((S S S S S,k.D S S Sl? ? ? ? ? ? ? ?D	 	 	 	 	 1 	 	 	 	 	r,   