
    iR                         d dl Z d dlZd dlZd dlmZmZmZmZmZ ej                  dk\  rd dl m
Z n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  e       Z G d ded      Z G d de      Z G d de      Zy)    N)CallableListOptional	TypedDictUnion)      r   )timeout   )ConnectionErrorInvalidResponseValkeyError)
EncodableT)LIBVALKEY_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)_LibvalkeyReaderArgsprotocolError
replyErrorencodingerrorsN)__name__
__module____qualname__r   str	Exception__annotations__r        L/root/searxng-venv/lib/python3.12/site-packages/valkey/_parsers/libvalkey.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
)_LibvalkeyParserz,Parser class for connections using libvalkeyc                 T    t         st        d      || _        t        |      | _        y )Nzlibvalkey is not installed)r   r   socket_read_size	bytearray_buffer)selfr+   s     r&   __init__z_LibvalkeyParser.__init__&   s&    ":;; 0 !12r%   c                 D    	 | j                          y # t        $ r Y y w xY wN)on_disconnectr"   r.   s    r&   __del__z_LibvalkeyParser.__del__,   s%    	  		s    	c                 N   dd l }|j                  | _        |j                  | _        t        | j
                  |j                  j                  t        dd}|j                  j                  r|j                  j                  |d<    |j                  di || _        t        | _        y )Nr   T)r   r   r   notEnoughDataconvertSetsToListsr   r$   )	libvalkey_socksocket_timeout_socket_timeoutr   parse_errorencoderencoding_errorsNOT_ENOUGH_DATAdecode_responsesr   Reader_reader_next_response)r.   
connectionkwargsr8   s       r&   
on_connectz_LibvalkeyParser.on_connect2   s    %%
)88,** ((88,"&
 ..!+!3!3!<!<F:'y''1&1-r%   c                 6    d | _         d | _        t        | _        y r1   )r9   rB   r?   rC   r3   s    r&   r2   z_LibvalkeyParser.on_disconnectD   s    
-r%   c                     | j                   st        t              | j                  t        u rD| j                   j                         | _        | j                  t        u r| j                  |d      S y)NF)r
   raise_on_timeoutT)rB   r   r   rC   r?   getsread_from_socket)r.   r
   s     r&   can_readz_LibvalkeyParser.can_readI   s_    ||!"@AA/1"&,,"3"3"5D""o5,,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: )r9   r   
settimeout	recv_intor-   r   r   rB   feedr;   socketr
   TimeoutErrorr   r   get	__class__errnoargs)r.   r
   rI   sockcustom_timeoutbufflenexalloweds           r&   rK   z!_LibvalkeyParser.read_from_socketS   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                  t        ur| j                  }t        | _        |S |r| j                   j                  d      }n| j                   j                         }|t        u rQ| j                          |r| j                   j                  d      }n| j                   j                         }|t        u rQt        |t              r|t        |t              r|rt        |d   t              r|d   |S NFr   )	rB   r   r   rC   r?   rJ   rK   
isinstancelistr.   disable_decodingresponses      r&   read_responsez_LibvalkeyParser.read_responseq   s    ||!"@AA o5**H"1DO||((/H||((*H/)!!#<<,,U3<<,,. /) h0Nx&8A;81+r%   NF)r   r   r    __doc__r/   r4   rF   r2   rL   r   rK   rd   r$   r%   r&   r)   r)   #   s/    2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 )_AsyncLibvalkeyParserzDAsync implementation of parser class for connections using libvalkey)rB   r+   c                 V    t         st        d      t        |   |       d | _        y )Nzlibvalkey is not available.)r+   )r   r   superr/   rB   )r.   r+   rU   s     r&   r/   z_AsyncLibvalkeyParser.__init__   s*    ";<<*:;r%   c                 ,   dd l }|j                  | _        t        | j                  t
        dd}|j                  j                  r2|j                  j                  |d<   |j                  j                  |d<    |j                  di || _        d| _        y )Nr   T)r   r   r6   r7   r   r   r$   )r8   rB   _streamr   r<   r?   r=   r@   r   r>   rA   
_connected)r.   rD   r8   rE   s       r&   rF   z _AsyncLibvalkeyParser.on_connect   s    !)),**,"&	(
 ..!+!3!3!<!<F:)11AAF8'y''1&1r%   c                     d| _         y )NF)rm   r3   s    r&   r2   z#_AsyncLibvalkeyParser.on_disconnect   s	    r%   c                 f  K   | j                   st        t              | j                  j	                         t
        u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)
rm   r   r   rB   rJ   r?   async_timeoutrK   asynciorS   r3   s    r&   can_read_destructivez*_AsyncLibvalkeyParser.can_read_destructive   s     !"@AA<<o5	$Q' 5 5!22445 5 545 5 5 5## 		s   =B1 B A=B B'A?(B+B 7B8B <B1=B ?BB B	B
BB B1B B.+B1-B..B1c                    K   | j                   j                  | j                         d {   }|rt        |t              st        t              d | j                  j                  |       y7 Bw)NT)	rl   read
_read_sizer_   bytesr   r   rB   rQ   )r.   buffers     r&   rK   z&_AsyncLibvalkeyParser.read_from_socket   sW     ||((99Z6!"@AtK&!  :s   )A0A.AA0rb   returnc                   K   | j                   st        t              d |r| j                  j	                  d      }n| j                  j	                         }|t
        u rY| j                          d {    |r| j                  j	                  d      }n| j                  j	                         }|t
        u rYt        |t              r|t        |t              r|rt        |d   t              r|d   |S 7 wr^   )	rm   r   r   rB   rJ   r?   rK   r_   r`   ra   s      r&   rd   z#_AsyncLibvalkeyParser.read_response   s      !"@AtK||((/H||((*H/)'')))<<,,U3<<,,. /) h0Nx&8A;81+# *s   A0C82C63AC88?C8re   )r   r   r    rf   	__slots__intr/   rF   r2   rr   rK   boolr   r   r   rd   __classcell__)rU   s   @r&   rh   rh      sT    NI " 	 (- $	z4
++	,r%   rh   )rq   rR   systypingr   r   r   r   r   version_infor
   rp   
exceptionsr   r   r   r   utilsr   baser   r   r   r   r   r   objectr?   r   r)   rh   r$   r%   r&   <module>r      su      
 = =z!06 F F  ' -  (9E nz nbRO Rr%   