
    +h                     X   d dl Z d dlZd dlZd dlmZmZmZmZ ej                  j                  dk\  r ej                  j                  dk\  rd dl mZ nd dlmZ d dlmZ ddlmZmZ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  G d ded      Z G d de      Z G d de      Zy)    N)CallableListOptionalUnion      )timeout)	TypedDict   )ConnectionErrorInvalidResponse
RedisError)
EncodableT)HIREDIS_AVAILABLE   )AsyncBaseParser
BaseParser)#NONBLOCKING_EXCEPTION_ERROR_NUMBERSNONBLOCKING_EXCEPTIONSSENTINELSERVER_CLOSED_CONNECTION_ERRORc                   Z    e Zd ZU eegef   ed<   eegef   ed<   ee   ed<   ee   ed<   y)_HiredisReaderArgsprotocolError
replyErrorencodingerrorsN)__name__
__module____qualname__r   str	Exception__annotations__r        I/var/www/html/venv/lib/python3.12/site-packages/redis/_parsers/hiredis.pyr   r      s:    SE9,--#	)**smSMr%   r   F)totalc                   B    e Zd ZdZd Zd Zd Zd Zd Ze	dfdZ
dd	Zy
)_HiredisParserz*Parser class for connections using Hiredisc                 T    t         st        d      || _        t        |      | _        y )NzHiredis is not installed)r   r   socket_read_size	bytearray_buffer)selfr+   s     r&   __init__z_HiredisParser.__init__#   s&     788 0 !12r%   c                 D    	 | j                          y # t        $ r Y y w xY w)N)on_disconnectr"   r.   s    r&   __del__z_HiredisParser.__del__)   s%    	  		s    	c                 :   dd l }|j                  | _        |j                  | _        t        | j
                  |j                  j                  d}|j                  j                  r|j                  j                  |d<    |j                  di || _        d| _        y )Nr   )r   r   r   r   Fr$   )hiredis_socksocket_timeout_socket_timeoutr   parse_errorencoderencoding_errorsdecode_responsesr   Reader_reader_next_response)r.   
connectionkwargsr5   s       r&   
on_connectz_HiredisParser.on_connect/   s    %%
)88,** ((88
 ..!+!3!3!<!<F:%w~~//#r%   c                 .    d | _         d | _        d| _        y NF)r6   r>   r?   r2   s    r&   r1   z_HiredisParser.on_disconnect?   s    
#r%   c                     | j                   st        t              | j                  du r@| j                   j	                         | _        | j                  du r| j                  |d      S y)NF)r	   raise_on_timeoutT)r>   r   r   r?   getsread_from_socket)r.   r	   s     r&   can_readz_HiredisParser.can_readD   s_    ||!"@AA%'"&,,"3"3"5D""e+,,Wu,UUr%   Tc                    | j                   }|t        u}	 |r|j                  |       | j                   j                  | j                        }|dk(  rt        t              | j                  j                  | j                  d|       	 |r|j                  | j                         yy# t        j                  $ r. |rt        d      Y |r|j                  | j                         yyt        $ rq}t        j                  |j                   d      }|s2|j"                  |k(  r#Y d }~|r|j                  | j                         yyt        d|j$                         d }~ww xY w# |r|j                  | j                         w w xY w)Nr   TzTimeout reading from socketFz!Error while reading from socket: )r6   r   
settimeout	recv_intor-   r   r   r>   feedr8   socketr	   TimeoutErrorr   r   get	__class__errnoargs)r.   r	   rF   sockcustom_timeoutbufflenexalloweds           r&   rH   z_HiredisParser.read_from_socketN   sZ   zz 0	6(jj**4<<8G!|%&DEELLdllAw7   4 45  ~~ 	"#@AA  4 45  & 	Q
 :==bllBOG#G(;  4 45  "$EbggY"OPP	Q  4 45 s<   A3B) ) E"	E% )E"11E"E% EE""E% % Fc                    | j                   st        t              | j                  dur| j                  }d| _        |S |r| j                   j	                  d      }n| j                   j	                         }|du rM| j                          |r| j                   j	                  d      }n| j                   j	                         }|du rMt        |t              r|t        |t              r|rt        |d   t              r|d   |S NFr   )r>   r   r   r?   rG   rH   
isinstancelistr.   disable_decodingresponses      r&   read_responsez_HiredisParser.read_responsel   s    ||!"@AA e+**H"'DO||((/H||((*H%!!#<<,,U3<<,,. % h0Nx&8A;81+r%   NF)r   r   r    __doc__r/   r3   rB   r1   rI   r   rH   ra   r$   r%   r&   r)   r)       s/    03$ $
 (0$ 6< r%   r)   c                   h     e Zd ZdZdZdef fdZd Zd Zd Z	d Z
	 dd	ed
eeee   f   fdZ xZS )_AsyncHiredisParserzBAsync implementation of parser class for connections using Hiredis)r>   r+   c                 V    t         st        d      t        |   |       d | _        y )NzHiredis is not available.)r+   )r   r   superr/   r>   )r.   r+   rR   s     r&   r/   z_AsyncHiredisParser.__init__   s*     899*:;r%   c                     dd l }|j                  | _        t        | j                  d}|j
                  j                  r2|j
                  j                  |d<   |j
                  j                  |d<    |j                  di || _        d| _
        y )Nr   )r   r   r   r   Tr$   )r5   r>   _streamr   r9   r:   r<   r   r;   r=   
_connected)r.   r@   r5   rA   s       r&   rB   z_AsyncHiredisParser.on_connect   s~    !)),**&
 ..!+!3!3!<!<F:)11AAF8%w~~//r%   c                     d| _         y rD   )rj   r2   s    r&   r1   z!_AsyncHiredisParser.on_disconnect   s	    r%   c                 Z  K   | j                   st        t              | j                  j	                         ry	 t        d      4 d {    | j                          d {   cd d d       d {    S 7 -7 7 	# 1 d {  7  sw Y   y xY w# t        j                  $ r Y yw xY ww)NTr   F)	rj   r   r   r>   rG   async_timeoutrH   asynciorP   r2   s    r&   can_read_destructivez(_AsyncHiredisParser.can_read_destructive   s     !"@AA<<	$Q' 5 5!22445 5 545 5 5 5## 		s   7B+B 	A7
B A=!A9"A=%B 1A;2B 6B+7B 9A=;B =BBBB B+B B(%B+'B((B+c                    K   | j                   j                  | j                         d {   }|rt        |t              st        t              d | j                  j                  |       y7 Bw)NT)	ri   read
_read_sizer\   bytesr   r   r>   rN   )r.   buffers     r&   rH   z$_AsyncHiredisParser.read_from_socket   sW     ||((99Z6!"@AtK&!  :s   )A0A.AA0r_   returnc                 l  K   | j                   st        t              d | j                  j	                         }|du r7| j                          d {    | j                  j	                         }|du r7t        |t              r|t        |t              r|rt        |d   t              r|d   |S 7 awr[   )rj   r   r   r>   rG   rH   r\   r]   r^   s      r&   ra   z!_AsyncHiredisParser.read_response   s      !"@AtK<<$$&%'')))||((*H % h0Nx&8A;81+ *s   AB4B2"B44?B4rb   )r   r   r    rc   	__slots__intr/   rB   r1   ro   rH   boolr   r   r   ra   __classcell__)rR   s   @r&   re   re      sT    LI  	 (- $	z4
++	,r%   re   ) rn   rO   systypingr   r   r   r   version_infomajorminorr	   rm   redis.compatr
   
exceptionsr   r   r   r   utilsr   baser   r   r   r   r   r   r   r)   re   r$   r%   r&   <module>r      s      
 2 2Q3#3#3#9#9R#?06 " E E  % - % lZ l^J/ Jr%   