
    2i='                       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#m$Z$  G d dejJ                        Z& G d d      Z' G d d      Z( G d deejR                        Z* G d d      Z+ G d de+ejX                        Z-y)    )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lib_versionSelfRaiseErrorTypesc                  x     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 )AsyncFakeSocketc                V    t        |   |i | t        j                         | _        y N)super__init__asyncioQueue	responses)selfargskwargs	__class__s      \/mnt/e/genesis-system/.venvs/voice-bridge/lib/python3.12/site-packages/fakeredis/aioredis.pyr"   zAsyncFakeSocket.__init__   s"    $)&)(/    c                N    t        d      }|j                  |j                        S )Nr   )r   parse_errorvalue)r&   errorparsers      r*   _decode_errorzAsyncFakeSocket._decode_error   s!    q!!!%++..r+   c                T    | j                   sy | j                   j                  |       y r    )r%   
put_nowait)r&   msgs     r*   put_responsezAsyncFakeSocket.put_response   s    ~~!!#&r+   c                h  K   d }	 t        |r|nd       4 d {    	 |j                          d {    |j                          | j                  j                  5   |d      }|| j                  |      }	 d d d        n
	 d d d        nd d d       d {    | j                  j                  5  | j                  j                  |       d d d        | j                  |       | j                          y 7 7 # 1 sw Y   zxY w7 p# 1 d {  7  sw Y   xY w# t        j                  $ r Y w xY w# 1 sw Y   kxY w# | j                  j                  5  | j                  j                  |       d d d        n# 1 sw Y   nxY w| j                  |       | j                          w xY ww)NF)r   waitclear_serverlock_decode_resultr#   TimeoutError_dbremove_change_callbackr5   resume)r&   timeoutfunceventcallbackresultrets          r*   _async_blockingzAsyncFakeSocket._async_blocking#   st     	$WTB 
" 
"**,&&KKM ** ""5k?%)%8%8%=F!	" "*" 
" 
" "" ://9:f%KKM#
"&" "
" 
" 
" 
" ## 		: :"" ://9: : :f%KKMs   F2D  C9D  DC;*DC=:	D	DD  D	D  F23D9*F29D  ;D=D	D	D  DDDD   D63E 5D66E 9E>F2F/F8	F/F
)F//F2c                X   t        j                          |d      }|| j                  r|S t        j                         dfd}| j                  j                  |       | j                          j                  | j                  |||             t        j                         S )NTc                 <    j                   j                         y r    )call_soon_threadsafeset)rB   loops   r*   rC   z+AsyncFakeSocket._blocking.<locals>.callbackJ   s    %%eii0r+   returnNone)r#   get_event_loop_in_transactionEventr=   add_change_callbackpausecreate_taskrF   r   
NoResponse)r&   r@   rA   rE   rC   rB   rK   s        @@r*   	_blockingzAsyncFakeSocket._blocking?   s    
 %%'4j?d22J	1 	$$X.

--gtUHMN""$$r+   )r'   r   r(   r   rM   rN   )r/   r   rM   r   )r4   r   rM   rN   )
r@   Optional[Union[float, int]]rA   zCallable[[bool], Any]rB   zasyncio.EventrC   zCallable[[], None]rM   rN   )r@   rW   rA   zCallable[[bool], None]rM   r   )__name__
__module____qualname__redis_asyncConnectionError_connection_error_classr"   r1   r5   rF   rV   __classcell__r)   s   @r*   r   r      st    )998/'
, $ 	
 % 
8%,% %% 
	%r+   r   c                  $    e Zd ZddZddZddZy)
FakeReaderc                    || _         y r    _socketr&   sockets     r*   r"   zFakeReader.__init__T   s	    r+   c                f   K   | j                   j                  j                          d {   S 7 wr    )rd   r%   get)r&   _s     r*   readzFakeReader.readW   s%     \\++//1111s   (1/1c                    | j                   j                  j                         xr! | j                   j                  j                   S r    )rd   r%   emptyr9   	connectedr&   s    r*   at_eofzFakeReader.at_eofZ   s3    ||%%++-Tdll6J6J6T6T2TTr+   Nrf   r   rM   rN   )ri   intrM   bytes)rM   bool)rX   rY   rZ   r"   rj   ro    r+   r*   ra   ra   S   s    2Ur+   ra   c                  4    e Zd ZddZddZddZddZd	dZy)

FakeWriterc                    || _         y r    rc   re   s     r*   r"   zFakeWriter.__init___   s	    28r+   c                    d | _         y r    rc   rn   s    r*   closezFakeWriter.closeb   s	    r+   c                   K   y wr    rt   rn   s    r*   wait_closedzFakeWriter.wait_closede   	        c                   K   y wr    rt   rn   s    r*   drainzFakeWriter.drainh   r|   r}   c                b    | j                   y |D ]  }| j                   j                  |        y r    )rd   sendall)r&   datachunks      r*   
writelineszFakeWriter.writelinesk   s0    << 	(ELL  '	(r+   Nrp   rL   )r   zIterable[Any]rM   rN   )rX   rY   rZ   r"   ry   r{   r   r   rt   r+   r*   rv   rv   ^   s    9(r+   rv   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 )FakeConnectionc                ^  K   | j                   j                  s#t        j                  t        j
                        t        | j                   | j                  | j                  | j                        | _
        t        | j                        | _        t        | j                        | _        y w)N)client_classlua_modules)r9   rm   r[   r\   msgsCONNECTION_ERROR_MSGr   db_client_class_lua_modules_sockra   _readerrv   _writerrn   s    r*   _connectzFakeConnection._connects   sv     ||%%--d.G.GHH0?LL$''0B0BPTPaPa1

 .8

-C-7

-Cs   B+B-c                .    d | _         d | _        d | _        y r    )r   r   r   rn   s    r*   __del__zFakeConnection.__del__|   s     
r+   c                j   K   d | _         d | _        d | _        t        |   di | d {    y 7 w)Nrt   )r   r   r   r!   
disconnect)r&   nowaitr(   r)   s      r*   r   zFakeConnection.disconnect   s2     
g *6***s   (313c                  K   | j                   s| j                          d {    |dk(  r5| j                  d uxr% | j                  j                  j	                          S t        j                         }|j                         }	 | j                  r%| j                  j                  j	                         syt        j                  d       d {    |j                         }|	|||z   kD  ryj7 7 "w)Nr   Tg{Gz?F)	is_connectedconnectr   r%   rl   r#   rO   timesleep)r&   r@   rK   startnows        r*   can_readzFakeConnection.can_read   s       ,,.  a<::T)N$**2F2F2L2L2N.NN %%'		zz$**"6"6"<"<">--%%%))+C"sUW_'<  ! &s"    C4C0B,C4C2!C42C4c                   K   y wr    rt   )r&   commands     r*   _get_from_local_cachez$FakeConnection._get_from_local_cache   s	     r}   c                     y r    rt   )r&   r   responsekeyss       r*   _add_to_local_cachez"FakeConnection._add_to_local_cache   s    r+   c                    t        |t              r|D cg c]  }| j                  |       c}S t        |t              r| j                  j                  |      S |S c c}w r    )
isinstancelist_decoderr   encoderdecode)r&   r   items      r*   r   zFakeConnection._decode   sO    h%3;<4DLL&<<%(<<&&x00O	 =s   Ac                  K   | j                   s#t        j                  t        j                        | j
                  j                  s&	 | j                   j                  j                         }n^|j                  dd       }| j                  |       d {   }|r/| j                  r#| j                  j!                  d       d {   nd }t#        |t$              r||j                  dd      r|S | j'                  |      S # t        j                  $ rO |j                  dd      r| j                          d {  7   t        j                  t        j                        w xY w7 7 w)Ndisconnect_on_errorTr@   r   disable_decodingF)r   r[   r\   r   r   r9   rm   r%   
get_nowaitr#   
QueueEmptyrh   r   popr   r   rj   r   r   r   )r&   r(   r   r@   r   s        r*   read_responsezFakeConnection.read_response   s!    zz--d.G.GHH||%%M:://::< (.zz)T'BG!]]733H5=$,,T\\..q111TXHh0N::(%0O||H%% %% M::3T://+++!11$2K2KLLM 41sH   AE,	$D -'E,E(0E,E*=E,8E%;D><)E%%E,*E,c                    d| j                   fd| j                  fg}| j                  r|j                  d| j                  f       |S )Nserverr   client_name)r9   r   r   append)r&   piecess     r*   repr_pieceszFakeConnection.repr_pieces   sB    T\\*T477O<MM=$*:*:;<r+   c                    | j                   S r    )
server_keyrn   s    r*   __str__zFakeConnection.__str__   s    r+   rL   )F)r   rs   r(   r   rM   rN   )r   )r@   zOptional[float]rM   rs   )r   Sequence[str]rM   rN   )r   r   r   r   r   z	List[Any]rM   rN   )r   r   rM   r   )r(   r   rM   r   )rM   zList[Tuple[str, Any]])rM   str)rX   rY   rZ   r   r   r   r   r   r   r   r   r   r   r^   r_   s   @r*   r   r   r   s6    D+$&(r+   r   c                  r     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   c                  t        |g|i |}||d<   |j                  dd      |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 )Nr   rm   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protocolusernamerm   r   socket_timeoutr   max_connectionsdecode_responsesretry_on_timeouthealth_check_interval)connection_classr   r   r   r   r   r   r   lib_namer   	fakeredisrt   )r   rh   warningswarnDeprecationWarningr   updater[   
connectionConnectionPoolr   r   r!   r"   )r&   r   r   r   r   r   r'   r(   kwdsr   r   conn_pool_argsconnection_kwargsargr)   s                 r*   r"   zFakeRedisMixin.__init__   s    1OOOX"JJ{D9[xx)40hhy$/GXXh-F"01bcd#*Z !01hij*0&'N& %3"** ,! $$%^RUY]R]c49n%^_&1&<&<&K&K&`N_&`D"#4 d#D!%%-4"7*D"-D 4  &_s   
	FFc                    t        |   |fi |}|j                  }t        |_        |j
                  j                  dd       |j
                  j                  dd       |S )Nr   z7.4r   r   )r!   from_urlr   r   r   r   
setdefault)clsurlr(   r&   poolr)   s        r*   r   zFakeRedisMixin.from_url  s[    "''"23"A&"A## .)))U;))-Ar+   )r'   r   r   zOptional[FakeServer]r   zUnion[VersionType, str, int]r   r   r   zOptional[Set[str]]r(   r   rM   rN   )r   r   r(   r   rM   r   )	rX   rY   rZ   r[   Redisr"   classmethodr   r^   r_   s   @r*   r   r      sx     (,04")*. &&:!:! %:! .	:!
  :! (:! :! 
:!x  r+   r   c                      e Zd Zy)	FakeRedisN)rX   rY   rZ   rt   r+   r*   r   r     s    r+   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   r9   r   r   r   r   _typingr   r   r   r   
FakeSocketr   ra   rv   
Connectionr   r   r   r   rt   r+   r*   <module>r      s    "   W W W #  2    D Q Q F F=%k,, =%@U U( ((S,k.D.D SlD DN	 1 1 	r+   