
    1yi                        U d dl mZ 	 d dlZdZd dlZd dlZd dl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 d dlmZmZ d dlmZmZ  ej<                  d      Z	 d dl Z dZ!dede"fdZ#ejH                  jK                         D  ci c]  \  } } e&|      e'us||  c}} Z(ee)e*f   e+d<   de)de*fdZ,e	 G d d             Z- G d de      Z. G d de      Z/dZ0e1dk(  r; e/de0f      Z2e2jg                          e2ji                          e2jk                          yy# e$ r dZY &w xY w# e$ r dZ!Y w xY wc c}} w )    )SimpleErrorNTF)	dataclass)BufferedIOBase)count)ThreadingTCPServerStreamRequestHandler)DictTupleAnyUnion)DefaultParser)
FakeServerFakeConnection)VersionType
ServerType	fakeredisvaluereturnc                 X    t        | t              r| S t        |       j                         S )N)
isinstancebytesstrencode)r   s    W/var/www/html/content_weaver/venv/lib/python3.12/site-packages/fakeredis/_tcp_server.pyto_bytesr   $   s$    %u:    _EXCEPTION_PREFIX_MAPec                 \    t         j                         D ]  \  }}t        | |      s|c S  y)NERR)r   itemsr   )r   kvs      r   _get_exception_prefixr$   /   s2    %++- 1aH r   c                   \    e Zd ZU eeef   ed<   eed<   eed<   de	ddfdZ
d
dededdfd	Zy)Writerclient_addresswriterrequest_handlerr   r   Nc                     t         j                  d| j                   d|        | j                  j	                  |       | j                  j                          y )Nz<<< : )LOGGERdebugr'   r(   writeflush)selfr   s     r   r.   zWriter.write<   sD    tD//05':;% r   	dump_bulkc                    t        |t              r$| j                  d| dj                                y t        |t        t
        f      rt        |      }|j                         dk(  rd| j                  _	        |sd|v sd|v r>| j                  dt	        t        |            j                         z   dz   |z   dz          y | j                  d	|z   dz          y t        |t        t        f      rG| j                  d
t        |       dj                                |D ]  }| j                  |d        y | | j                  dj                                y t        |t              rt        |t              r1| j                  d|j                   d    dj                                y t#        |      }| j                  d| d|j                   d    dj                                y y )N:z
s   SHUTDOWNT      
   $s   
   +*)r1   z$-1
-r    )r   intr.   r   r   r   r   upperr)   shutdown_requestlenlistsetdump	Exceptionr   argsr$   )r0   r   r1   itemprefixs        r   rA   zWriter.dumpA   s   eS!JJ5'--/0U|,UOE{{}+8<$$5EUNeun

4#c%j/"8"8"::WDuLwVW

4%<'12c{+JJ3u:,d+2245 0		$$	/0]JJy'')*y)%-

Quzz!}oT299;<.u5

Qvha

1d;BBDE *r   )F)__name__
__module____qualname__r
   r   r;   __annotations__r   r   r   r.   r   boolrA    r   r   r&   r&   6   sM    #s(O#))5 T 
F# F$ F4 Fr   r&   c                   N     e Zd ZU ded<   dZeed<   d fdZddZd fdZ xZ	S )	TCPFakeRequestHandlerTcpFakeServerserverFr=   c                    t         |           | j                  j                         }t        rZt        j
                  |t
        j                        }t        j
                  |t
        j                  |t        j                  z         | j                  | j                  j                  v r)| j                  j                  | j                     | _        y t        | j                  | j                  |       | _        t#        | j                  j$                  | j                   d| j                  i      | _        | j                  | j                  j                  | j                  <   y )Nraddr)rO   r(   client_info)supersetuprfilefileno	HAS_FCNTLfcntlF_GETFLF_SETFLos
O_NONBLOCKr'   rO   clientscurrent_clientr&   wfiler(   r   fake_server)r0   fdfl	__class__s      r   rT   zTCPFakeRequestHandler.setup^   s    ZZ R/BKKEMM2+=>$++"5"55"&++"5"5d6I6I"JD !4!4djj$GDK"0{{..{{$d&9&9:#D 8<7J7JDKK 3 34r   c                 |   t         j                  d| j                  d    d       	 	 | j                  ry | j                  j                         r6| j                  j                         }| j                  j                  |       _| j                  j                         }|dk(  rt        j                  d       n)| j                  j                         j                  |       # t        $ rM}t         j                  d| j                  d    d|        | j                  j                  |       Y d }~y d }~ww xY w)Nz+++ r   z
 connectedr   z!!! r+   )r,   r-   r'   r=   r^   can_readread_responser(   rA   rU   readlinetimesleep
get_socketsendallrB   )r0   responsedatar   s       r   handlezTCPFakeRequestHandler.handlep   s   tD//23:>?((&&//1#22@@BHKK$$X.zz**,3;JJqM''224<<TB   tD$7$7$:#;2aSAB  #s%   C% AC% AC% %	D;.AD66D;c                 L   | j                   j                          t        j                  d| j                  d    d       | j
                  j                          | j                  j                          | j                  j                  | j                  = t        | -          y )Nz--- r   z disconnected)r^   
disconnectr,   r-   r'   rU   closer_   rO   r]   rS   finish)r0   rc   s    r   rr   zTCPFakeRequestHandler.finish   sx    &&(tD//23=AB



KK 3 34r   )r   N)
rF   rG   rH   rI   r=   rJ   rT   rn   rr   __classcell__rc   s   @r   rM   rM   Z   s)    "d"K$, r   rM   c            	       N     e Zd Z	 	 	 ddeeeeef   ef   de	de
def fdZ xZS )rN   server_addressbind_and_activateserver_typeserver_versionc                     d| _         d| _        t        |   |t        |       t        ||      | _        t        d      | _        i | _	        y )NT)rx   versionr   )
allow_reuse_addressdaemon_threadsrS   __init__rM   r   r`   r   
client_idsr]   )r0   rv   rw   rx   ry   rc   s        r   r~   zTcpFakeServer.__init__   sI     $( ")>@QR%+~V(24r   )Tredis)   r   )rF   rG   rH   r
   r   r   r   	bytearrayr;   rJ   r   r   r~   rs   rt   s   @r   rN   rN      sT     #'")&,5eC	$9:C?@5  5  	5
 $5 5r   rN   i8J  __main__	localhost)6fakeredis._helpersr   rX   rW   ImportErrorloggingr[   rh   dataclassesr   ior   	itertoolsr   socketserverr   r   typingr	   r
   r   r   redis.connectionr   r   r   r   fakeredis._typingr   r   	getLoggerr,   lupalua_scripts_supportedr   r   EXCEPTION_CLASSESr!   typedictr   rB   r   rI   r$   r&   rM   rN   TCP_SERVER_TEST_PORTrF   rO   serve_foreverserver_closeshutdown)r"   r#   s   00r   <module>r      s{   *I  	  !   A * * * 0 5			;	'
" 
C E  #44::</QQt@SAqD/ tIsN+ 
Y 3   F  F  FF20 2j5& 5   zK)=>?F


OO	 s  I2  "!"/s/   D+ *D9 E(E+D65D69EE