
    )Jf                     H   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dS )    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                   t    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<   dS )_HiredisReaderArgsprotocolError
replyErrorencodingerrorsN)__name__
__module____qualname__r   str	Exception__annotations__r        Y/home/alex/cs2snipeproduction/venv/lib/python3.11/site-packages/redis/_parsers/hiredis.pyr   r      sb         SE9,----#	)****smSMr%   r   F)totalc                   D    e Zd ZdZd Zd Zd Zd Zd Ze	dfdZ
dd
ZdS )_HiredisParserz*Parser class for connections using Hiredisc                 h    t           st          d          || _        t          |          | _        d S )NzHiredis is not installed)r   r   socket_read_size	bytearray_buffer)selfr+   s     r&   __init__z_HiredisParser.__init__#   s5      	97888 0 !122r%   c                 R    	 |                                   d S # t          $ r Y d S w xY w)N)on_disconnectr"   r.   s    r&   __del__z_HiredisParser.__del__)   sA    	      	 	 	DD	s    
&&c                     dd l }|j        | _        |j        | _        t          | j        |j        j        d}|j        j        r|j        j	        |d<    |j
        di || _        d| _        d S )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
 
 . 	=!+!3!<F:%w~////#r%   c                 0    d | _         d | _        d| _        d S 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        du r|                     |d          S dS )NF)r	   raise_on_timeoutT)r>   r   r   r?   getsread_from_socket)r.   r	   s     r&   can_readz_HiredisParser.can_readD   sl    | 	B!"@AAA%''"&,"3"3"5"5D"e++,,Wu,UUUtr%   Tc                    | j         }|t          u}	 |r|                    |           | j                             | j                  }|dk    rt          t                    | j                            | j        d|           	 |r|                    | j	                   dS dS # t          j        $ r3 |rt          d          Y |r|                    | j	                   dS dS t          $ rg}t          j        |j        d          }|s/|j        |k    r$Y d }~|r|                    | j	                   dS dS t          d|j                   d }~ww xY w# |r|                    | 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   s   z 0	6 )(((j**4<88G!||%&DEEELdlAw777   6 4555556 6 ~ 	 	 	 B"#@AAA  6 4555556 6 & 	Q 	Q 	Q
 :=blBOOG# G(;(;uuu  6 4555556 6 ""Obg"O"OPPP	Q  6 455556s<   A1B$ $ EE %	E.'EE 9EEE E7Fc                     | j         st          t                    | j        dur| j        }d| _        |S |r| j                             d          }n| j                                         }|du rN|                                  |r| j                             d          }n| j                                         }|du Nt          |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+   | 	B!"@AAA e++*H"'DO 	+|((//HH|((**H%!!### /<,,U33<,,.. % h00 	Nx&&		 8A;88	
 1+r%   NF)r   r   r    __doc__r/   r3   rB   r1   rI   r   rH   ra   r$   r%   r&   r)   r)       s        003 3 3  $ $ $ $ $ $
   (0$ 6 6 6 6<           r%   r)   c                   t     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                     t           st          d          t                                          |           d | _        d S )NzHiredis is not available.)r+   )r   r   superr/   r>   )r.   r+   rR   s     r&   r/   z_AsyncHiredisParser.__init__   sA      	:8999*:;;;r%   c                     dd l }|j        | _        t          | j        d}|j        j        r|j        j        |d<   |j        j        |d<    |j	        di || _        d| _
        d S )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    !),*&
 &
 . 	B!+!3!<F:)1AF8%w~////r%   c                     d| _         d S rD   )rj   r2   s    r&   r1   z!_AsyncHiredisParser.on_disconnect   s    r%   c                 J  K   | j         st          t                    | j                                        rdS 	 t          d          4 d {V  |                                  d {V cd d d           d {V  S # 1 d {V swxY w Y   d S # t          j        $ r Y dS w xY w)NTr   F)	rj   r   r   r>   rG   async_timeoutrH   asynciorP   r2   s    r&   can_read_destructivez(_AsyncHiredisParser.can_read_destructive   sR      	B!"@AAA< 	4	$Q'' 5 5 5 5 5 5 5 5!22444444445 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5# 	 	 	55	s5   B A<)B <
BB 	B
B B"!B"c                    K   | j                             | j                   d {V }|rt          |t                    st          t                    d | j                            |           dS )NT)	ri   read
_read_sizer\   bytesr   r   r>   rN   )r.   buffers     r&   rH   z$_AsyncHiredisParser.read_from_socket   sx      |((99999999 	LZ66 	L!"@AAtK&!!! tr%   Fr_   returnc                   K   | j         st          t                    d | j                                        }|du r7|                                  d {V  | j                                        }|du 7t          |t                    r|t          |t                    r%|r#t          |d         t                    r|d         |S r[   )rj   r   r   r>   rG   rH   r\   r]   r^   s      r&   ra   z!_AsyncHiredisParser.read_response   s        	L!"@AAtK<$$&&%'')))))))))|((**H % h00 	Nx&&		 8A;88	
 1+r%   rb   )r   r   r    rc   	__slots__intr/   rB   r1   ro   rH   boolr   r   r   ra   __classcell__)rR   s   @r&   re   re      s        L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 2 2 2 2 2 2 2 2 2 2Q3#3#9R#?#?0000000666666 " " " " " " E E E E E E E E E E       % % % % % % - - - - - - - -               %    l l l l lZ l l l^J J J J J/ J J J J Jr%   