
    <i                     4   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
Z
d dlmZ d dlmZmZ ddlmZ ddlmZmZmZmZ ddlmZmZmZ dd	lmZ  G d
 dee
j                  Z G d d          Z  G d de e
j!                  Z" G d de e
j#                  Z$dS )    N)TupleAnyListOptionalSetSequenceUnion)
FakeSocket)FakeSelector!convert_args_to_redis_init_kwargs   )_msgs)FakeBaseConnectionMixin
FakeServerVersionType
ServerType)Selflib_versionRaiseErrorTypes)
ClientInfoc                        e Zd ZdededdfdZd fdZdefdZdd	ee	         de
fd
ZdedefdZdedefdZdeeeef                  fdZdee         ddfdZdee         dedee         ddfdZdefdZ xZS )FakeConnectionargskwargsreturnNc                  (    t          j        | i | d S N)r   __init__)r   r   s     /Users/kimhansen/Desktop/03 Workspace/ceo-agents/chl-effectiveness/mcp-servers/whoop/.venv/lib/python3.11/site-packages/fakeredis/_connection.pyr   zFakeConnection.__init__   s    ($9&99999    c                 z    t                                                       t          | j                  | _        d S r   )superconnectr   _sock	_selector)self	__class__s    r   r#   zFakeConnection.connect   s,    1=dj1I1Ir    c                    | j         j        st          j        t          j                  t          | dd          }t          | j         | j        | j	        | j
        t          d.i d| j                                         dddddd	d
dddddddddddddddddddddddddddd dd!dd"dd#d$d%d&d'd(d)d*d+dd,|-          S )/Nprotocol   idaddrz127.0.0.1:57275laddrz127.0.0.1:6379fd   name idler   flagsNdbsubpsubssubmultiqbuf0   	qbuf_freeiA  argv_mem   	multi_memrbsi   rbpoblollomemtot_memi1I  eventsrcmdauthuserdefaultredirresp)client_classr5   lua_modulesclient_info )_server	connectedredisConnectionErrormsgsCONNECTION_ERROR_MSGgetattrr
   _client_classr5   _lua_modulesr   get_next_client_id)r&   r)   s     r   _connectzFakeConnection._connect   s   |% 	C'(ABBB4Q//L+w)"   <22444&& '& 1	
 R Q c 1 A Q Q b R  %   !!" D#$ A%& A'( A)* Q+, -. s/0 F12 Y34 b56 X7"
 "
 "
 "	
r    r   timeoutc                     | j         j        sdS | j        s|                                  | j        d uo| j                            |          S )NT)rS   rT   r$   r#   r%   check_can_read)r&   r^   s     r   can_readzFakeConnection.can_read@   sO    |% 	4z 	LLNNN ~T)Tdn.K.KG.T.TTr    responsec                     t          |t                    r fd|D             S t          |t                    r  fd|                                D             S t          |t                    r j                            |          S |S )Nc                 :    g | ]}                     |          S rR   _decode).0itemr&   s     r   
<listcomp>z*FakeConnection._decode.<locals>.<listcomp>N   s%    <<<4DLL&&<<<r    c                 h    i | ].\  }}                     |                               |          /S rR   re   )rg   kvr&   s      r   
<dictcomp>z*FakeConnection._decode.<locals>.<dictcomp>P   s3    RRRADLLOOT\\!__RRRr    )
isinstancelistdictitemsbytesencoderdecode)r&   rb   s   ` r   rf   zFakeConnection._decodeL   s    h%% 	<<<<8<<<<$'' 	RRRRAQAQRRRR%(( 	<&&x000Or    c                    | j         st          j        t          j                  | j        j        s{	 | j         j                                        }ny# t          j
        $ rI |                    dd          r|                                  t          j        t          j                  w xY w| j         j                                        }t          |t                    r||                    dd          r|S |                     |          S )Ndisconnect_on_errorTdisable_decodingF)r$   rU   rV   rW   rX   rS   rT   	responses
get_nowaitqueueEmptyget
disconnectrn   r   rf   )r&   r   rb   s      r   read_responsezFakeConnection.read_responseV   s   z 	C'(ABBB|% 	2G:/::<<; G G G::3T:: &OO%%%+D,EFFFG
 z+//11Hh00 	N::(%00 	*O<<)))s   A AB*c                 p    d| j         fd| j        fg}| j        r|                    d| j        f           |S )Nserverr5   client_name)rS   r5   r   append)r&   piecess     r   repr_pieceszFakeConnection.repr_piecesi   sC    T\*T47O< 	=MM=$*:;<<<r    commandc                     d S r   rR   )r&   r   s     r   _get_from_local_cachez$FakeConnection._get_from_local_cacheo       tr    keysc                     d S r   rR   )r&   r   rb   r   s       r   _add_to_local_cachez"FakeConnection._add_to_local_cacher   r   r    c                     | j         S r   )
server_key)r&   s    r   __str__zFakeConnection.__str__u   s
    r    )r   N)r   )__name__
__module____qualname__r   r   r#   r
   r]   r   floatboolra   rf   r~   r   r   strr   r   r   r   r   __classcell__r'   s   @r   r   r      s       : :s :t : : : :J J J J J J
&
* &
 &
 &
 &
P
U 
U 
U 
U 
U 
U 
U     *c *c * * * *&T%S/2    Xc] t    8C= C tTWy ]a            r    r   c                        e Zd Zddddej        ddedee         dee	e
ef         ded	eee
                  d
eddf fdZeded
edefd            Z xZS )FakeRedisMixinN)   rU   )r   versionserver_typerP   rO   r   r   r   r   rP   r   r   c                *   t          |g|R i ||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           dv rdv rdd<   t          d<    t                      j        di  dS )a  
        :param server: The FakeServer instance to use for this connection.
        :param version: The Redis version to use, as a tuple (major, minor).
        :param server_type: The type of server, e.g., "redis", "valkey".
        :param lua_modules: A set of Lua modules to load.
        :param client_class: The Redis client class to use, e.g., redis.Redis or valkey.Valkey.
        r   connection_poolNcharseterrorsz/"charset" is deprecated. Use "encoding" insteadencodingz5"errors" is deprecated. Use "encoding_errors" insteadencoding_errors>   r5   hostportr   r   passwordr)   usernamerT   r   socket_timeoutr   max_connectionsdecode_responsesretry_on_timeouthealth_check_interval)connection_classr   r   rP   rO   c                 *    i | ]}|v ||         S rR   rR   )rg   argkwdss     r   rm   z+FakeRedisMixin.__init__.<locals>.<dictcomp>   s+    %^%^%^RUY]R]R]c49R]R]R]r    rT   r   r   rP   lib_namer   	fakeredisrR   )r   r|   warningswarnDeprecationWarningr   updaterU   
connectionConnectionPoolpopr   r"   r   )r&   r   r   r   rP   rO   r   r   r   r   conn_pool_argsconnection_kwargsr   r'   s               @r   r   zFakeRedisMixin.__init__z   s   " 1OOOOOOXxx)400 $	[hhy$//GXXh--F"01bccddd#*Z !01hiijjj*0&'  N& %3"** ,! ! $$%^%^%^%^%^%^%^___&+&6&E&Z&ZHY&Z&ZD"#4   d###D!!!%%%%%%-4"7"7*D"-D  4     r    c                     |                     dd           |                     dd           t          j        j        |i |}t          |_         | |d|i|S )Nr   z7.4r   rU   r   )
setdefaultrU   r   from_urlr   r   )clsr   r   pools       r   r   zFakeRedisMixin.from_url   sh    )U+++-111#,d=f== .s$949&999r    )r   r   r   rU   Redisr   r   r   r	   r   r   intr   r   r   classmethodr   r   r   r   s   @r   r   r   y   s         (,04")*.[@! @! @!@! $@! {C,-	@!
  @! c#h'@! @! 
@! @! @! @! @! @!D :S :C :D : : : [: : : : :r    r   c                       e Zd ZdS )FakeStrictRedisNr   r   r   rR   r    r   r   r              Dr    r   c                       e Zd ZdS )	FakeRedisNr   rR   r    r   r   r      r   r    r   )%rz   r   typingr   r   r   r   r   r   r	   rU   fakeredis._fakesocketr
   fakeredis._helpersr   r   r1   r   rW   rS   r   r   r   r   _typingr   r   r   modelr   
Connectionr   r   StrictRedisr   r   r   rR   r    r   <module>r      s     C C C C C C C C C C C C C C C C C C  , , , , , , N N N N N N N N       Q Q Q Q Q Q Q Q Q Q Q Q 7 7 7 7 7 7 7 7 7 7      g g g g g,e.> g g gTJ: J: J: J: J: J: J: J:Z	 	 	 	 	ne&7 	 	 		 	 	 	 	 	 	 	 	 	r    