
    Ki                        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/ G d de      Z0 G d de      Z1dZ2e3dk(  r; e1d e2f      Z4e4jk                          e4jm                          e4jo                          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    a/home/jay/workspace/scripts/.codegraph-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	                  |       y )Nz<<< : )LOGGERdebugr(   r)   write)selfr   s     r   r/   zWriter.write<   s4    tD//05':;% r   	dump_bulkc                     t         r   )NotImplementedError)r0   r   r1   s      r   dumpzWriter.dump@   s    !!r   F)__name__
__module____qualname__r
   r   int__annotations__r   r   r   r/   r   boolr4    r   r   r'   r'   6   sI    #s(O#))!5 !T !"# "$ "4 "r   r'   c                   "    e Zd ZddededdfdZy)Resp2Writerr   r1   r   Nc                    t        |t              r%| j                  d| dj                                nt        |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          n'| j                  d	|z   dz          nt        |t        t        f      rG| j                  d
t        |       dj                                |D ]  }| j                  |d        n| | j                  dj                                nt        |t              rt        |t              r1| j                  d|j                   d    dj                                n>t#        |      }| j                  d| d|j                   d    dj                                | j$                  j'                          y )N:
   SHUTDOWNT      
   $   
   +*r1   z$-1
-r    )r   r9   r/   r   r   r   r   upperr*   shutdown_requestlenlistsetr4   	Exceptionr   argsr%   r)   flush)r0   r   r1   itemprefixs        r   r4   zResp2Writer.dumpE   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   r5   r6   r7   r8   r   r;   r4   r<   r   r   r>   r>   D   s    # $ 4 r   r>   c                   "    e Zd ZddededdfdZy)Resp3Writerr   r1   r   Nc                    t        |      }|!| j                  dj                                n|t        u s|t        u 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          nz| j                  d|z   dz          na|t        u rXd	|cxk  rd
k  r(n n%| j                  d| dj                                n&| j                  d| dj                                n|t        u r&| j                  d|ddj                                n|t        u rH| j                  dt        |       dj                                |D ]  }| j                  |d        n|t        u rH| j                  dt        |       dj                                |D ]  }| j                  |d        n3|t        u r)| j                  d|rdnd dj                                n|t         u rk| j                  dt        |       dj                                |j#                         D ]+  \  }}| j                  |d       | j                  |d       - nt%        |t&              rt%        |t(              r1| j                  d|j*                  d    dj                                n>t-        |      }| j                  d| d|j*                  d    dj                                | j.                  j1                          y )Nz_
rB   TrC   rD   rE   rF   rG   l         l    r@   rA   (,z.17grH   rI   ~#tf%rJ   r   rK   )typer/   r   r   r   r   rL   r*   rM   rN   r9   floatrO   r4   rP   r;   dictr"   r   rQ   r   rR   r%   r)   rS   )r0   r   r1   
value_typerT   r#   r$   rU   s           r   r4   zResp3Writer.dump`   s   %[
=JJw~~'(3*"5UOE{{}+8<$$5EUNeun

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

4%<'1235-I-

QugT?1134

QugT?11345 JJ5,d+22454JJ3u:,d+2245 0		$$	/03JJ3u:,d+2245 0		$$	/04JJ%3S16==?@4JJ3u:,d+2245 -1		!t	,		!t	,- y)%-

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

Qvha

1d;BBDEr   r5   rV   r<   r   r   rX   rX   _   s    (# ($ (4 (r   rX   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serverFrM   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)rh   r)   client_info)supersetuprfilefileno	HAS_FCNTLfcntlF_GETFLF_SETFLos
O_NONBLOCKr(   rh   clientscurrent_clientrX   wfiler)   r   fake_server)r0   fdfl	__class__s      r   rm   zTCPFakeRequestHandler.setup   s    ZZ R/BKKEMM2+=>$++"5"55"&++"5"5d6I6I"JD%d&9&94::tLDK"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(   rM   rw   can_readread_responser)   r4   rn   readlinetimesleep
get_socketsendallrQ   )r0   responsedatar   s       r   handlezTCPFakeRequestHandler.handle   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)rw   
disconnectr-   r.   r(   rn   closerx   rh   rv   rl   finish)r0   r|   s    r   r   zTCPFakeRequestHandler.finish   sx    &&(tD//23=AB



KK 3 34r   )r   N)
r6   r7   r8   r:   rM   r;   rm   r   r   __classcell__r|   s   @r   rf   rf      s)    "d"K$, r   rf   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 )rg   server_addressbind_and_activateserver_typeserver_versionc                     d| _         d| _        t        |   |t        |       t        ||      | _        t        d      | _        i | _	        y )NT)r   versionr   )
allow_reuse_addressdaemon_threadsrl   __init__rf   r   ry   r   
client_idsrv   )r0   r   r   r   r   r|   s        r   r   zTcpFakeServer.__init__   sI     $( ")>@QR%+~V(24r   )Tredis)   r   )r6   r7   r8   r
   r   r   r   	bytearrayr9   r;   r   r   r   r   r   s   @r   rg   rg      sT     #'")&,5eC	$9:C?@5  5  	5
 $5 5r   rg   i8J  __main__	localhost)8fakeredis._helpersr   rq   rp   ImportErrorloggingrt   r   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"   ra   rc   r   rQ   r   r:   r%   r'   r>   rX   rf   rg   TCP_SERVER_TEST_PORTr6   rh   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  
" 
" 
"& 6)& )X20 2j5& 5   zK)=>?F


OO	 U  I2  "!"/s/   E *E E(EEEEE