
    1yi                     0   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
 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 ddlmZmZmZmZ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jD                        Z#y)    N)TupleAnyListOptionalSetSequenceUnionType)
FakeSocket)FakeSelector!convert_args_to_redis_init_kwargs   )_msgs)FakeBaseConnectionMixin
FakeServer)Selflib_versionRaiseErrorTypesVersionType
ServerTypec                        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defdZ xZS )FakeConnectionargskwargsreturnNc                  .    t        j                  | i | y N)r   __init__)r   r   s     W/var/www/html/content_weaver/venv/lib/python3.12/site-packages/fakeredis/_connection.pyr   zFakeConnection.__init__   s    (($9&9    c                 V    t         |           t        | j                        | _        y r   )superconnectr   _sock	_selector)self	__class__s    r   r#   zFakeConnection.connect   s    1=djj1Ir    c                     | j                   j                  s#t        j                  t        j
                        t        | j                   | j                  | j                  | j                  | j                        S )N)client_classdblua_modulesclient_info)_server	connectedredisConnectionErrormsgsCONNECTION_ERROR_MSGr   _client_classr*   _lua_modules_client_infor&   s    r   _connectzFakeConnection._connect   s\    ||%%''(A(ABBLL++ww))))
 	
r    timeoutc                     | j                   j                  sy| j                  s| j                          | j                  d uxr | j                  j                  |      S )NT)r-   r.   r$   r#   r%   check_can_read)r&   r8   s     r   can_readzFakeConnection.can_read"   sG    ||%%zzLLN ~~T)Tdnn.K.KG.TTr    responsec                 t   t        |t              r|D cg c]  }| j                  |       c}S t        |t              rB|j	                         D ci c]&  \  }}| j                  |      | j                  |      ( c}}S t        |t
              r| j                  j                  |      S |S c c}w c c}}w r   )
isinstancelist_decodedictitemsbytesencoderdecode)r&   r<   itemkvs        r   r@   zFakeConnection._decode.   s    h%3;<4DLL&<<$'AIAQRADLLOT\\!_4RR%(<<&&x00O =Rs   B/+B4c                 N   | j                   s#t        j                  t        j                        | j
                  j                  s&	 | j                   j                  j                         }n$| j                   j                  j                         }t        |t              r||j                  dd      r|}|S | j                  |      }|S # t        j                  $ rF |j                  dd      r| j                          t        j                  t        j                        w xY w)Ndisconnect_on_errorTdisable_decodingF)r$   r/   r0   r1   r2   r-   r.   	responses
get_nowaitqueueEmptyget
disconnectr>   r   r@   )r&   r   r<   ress       r   read_responsezFakeConnection.read_response8   s    zz''(A(ABB||%%G:://::< zz++//1Hh0N **%7?h
 FJ\\RZE[
 ;; G::3T:OO%++D,E,EFFGs   $C AD$c                     d| j                   fd| j                  fg}| j                  r|j                  d| j                  f       |S )Nserverr*   client_name)r-   r*   rV   append)r&   piecess     r   repr_pieceszFakeConnection.repr_piecesJ   sB    T\\*T477O<MM=$*:*:;<r    commandc                      y r    )r&   rZ   s     r   _get_from_local_cachez$FakeConnection._get_from_local_cacheP       r    keysc                      y r   r\   )r&   rZ   r<   r_   s       r   _add_to_local_cachez"FakeConnection._add_to_local_cacheS   r^   r    c                 R    | j                   s| j                          | j                   S r   )r$   r#   r6   s    r   
get_socketzFakeConnection.get_socketV   s    zzLLNzzr    c                     | j                   S r   )
server_keyr6   s    r   __str__zFakeConnection.__str__[   s    r    )r   N)r   )__name__
__module____qualname__r   r   r#   r   r7   r   floatboolr;   r@   rS   r   r   strrY   r   r]   ra   rc   rf   __classcell__r'   s   @r   r   r      s    : :s :t :J
	
* 	

U 
U 
U  c c $T%S/2 Xc] t 8C= C tTWy ]a J 
 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ej                     deddf fdZedededefd       Z xZS )FakeRedisMixinN)   r/   )rU   versionserver_typer+   r)   r   rU   rr   rs   r+   r)   r   r   c                   t        |g|i |}||d<   |j                  dd      s|j                  dd      }	|j                  dd      }
|	#t        j                  t	        d             |	|d<   |
#t        j                  t	        d             |
|d	<   h d
}t
        ||||d}|j                  |D ci c]  }||v s|||    c}       t        j                  j                  di ||d<   |j                  dd       |j                  dd       |j                  dd       |j                  dd       |j                  dd       d|v rd|v rd|d<   t        |d<   t        | 4  di | yc c}w )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.
        rU   connection_poolNcharseterrorsz/"charset" is deprecated. Use "encoding" insteadencodingz5"errors" is deprecated. Use "encoding_errors" insteadencoding_errors>   r*   hostportrU   rx   passwordprotocolusernamer.   rV   socket_timeoutry   max_connectionsdecode_responsesretry_on_timeouthealth_check_interval)connection_classrr   rs   r+   r)   r.   rr   rs   r+   lib_namer   	fakeredisr\   )r   rP   warningswarnDeprecationWarningr   updater/   
connectionConnectionPoolpopr   r"   r   )r&   rU   rr   rs   r+   r)   r   r   kwdsrv   rw   conn_pool_argsconnection_kwargsargr'   s                 r   r   zFakeRedisMixin.__init__`   s   " 1OOOXxx)40hhy$/GXXh-F"01bcd#*Z !01hij*0&'N& %3"** ,! $$%^RUY]R]c49n%^_&+&6&6&E&E&ZHY&ZD"#4 d#D!%%-4"7*D"-D 4  &_s   5	E0?E0c                     |j                  dd       |j                  dd       t        j                  j                  |i |}t        |_         | |d|i|S )Nrr   z7.4rs   r/   ru   )
setdefaultr/   r   from_urlr   r   )clsr   r   pools       r   r   zFakeRedisMixin.from_url   sZ    )U+-1##,,d=f= .$949&99r    )rg   rh   ri   r/   Redisr   r   r   r	   r   rl   intr   r   r
   r   classmethodr   r   rm   rn   s   @r   rp   rp   _   s     (,04")*.*/++@!@! $@! {C,-	@!
  @! c#h'@! 5;;'@! @! 
@!D :S :C :D : :r    rp   c                       e Zd Zy)FakeStrictRedisNrg   rh   ri   r\   r    r   r   r          r    r   c                       e Zd Zy)	FakeRedisNr   r\   r    r   r   r      r   r    r   )$rN   r   typingr   r   r   r   r   r   r	   r
   r/   fakeredis._fakesocketr   fakeredis._helpersr   r    r   r1   r-   r   r   _typingr   r   r   r   r   
Connectionr   rp   StrictRedisr   r   r   r\   r    r   <module>r      st      I I I  , N  8 P PN,e.>.> NbJ: J:Z	ne&7&7 		 	r    