
    7Qi+                     v   d dl Z d dlZd dlZd dlmZ d dlmZ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mZmZ dd	lmZ dd
lmZ ddlmZmZ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e      Z# G d dee      Z$y)    N)	getLogger)CallableListOptional	TypedDictUnion      )timeout   )ConnectionErrorInvalidResponse
RedisError)
EncodableT)HIREDIS_AVAILABLE   )AsyncBaseParserAsyncPushNotificationsParser
BaseParserPushNotificationsParser)#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        R/mnt/e/genesis-system/.venv/lib/python3.12/site-packages/redis/_parsers/hiredis.pyr   r   "   s:    SE9,--#	)**smSMr(   r   F)totalc                   H    e Zd 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         st        d      || _        t        |      | _        | j
                  | _        d | _        d | _        d | _	        d | _
        y )NzHiredis is not installed)r   r   socket_read_size	bytearray_bufferhandle_pubsub_push_responsepubsub_push_handler_funcnode_moving_push_handler_funcmaintenance_push_handler_funcinvalidation_push_handler_func_hiredis_PushNotificationType)selfr.   s     r)   __init__z_HiredisParser.__init__,   sT     788 0 !12(,(H(H%-1*-1*.2+-1*r(   c                 D    	 | j                          y # t        $ r Y y w xY wN)on_disconnectr%   r7   s    r)   __del__z_HiredisParser.__del__7   s%    	  		s    	c                 V    t        d      }|j                  dt        |      z          |S Npush_responsezPush response: r   debugr$   r7   responseloggers      r)   r1   z*_HiredisParser.handle_pubsub_push_response=   s'    ?+&X67r(   c                    dd l }|j                  | _        |j                  | _        t        | j
                  |j                  j                  t        d}|j                  j                  r|j                  j                  |d<    |j                  di || _        t        | _        	 |j                  | _        y # t         $ r
 d | _        Y y w xY w)Nr   )r   r   r    notEnoughDatar   r'   )hiredis_socksocket_timeout_socket_timeoutr   parse_errorencoderencoding_errorsNOT_ENOUGH_DATAdecode_responsesr   Reader_reader_next_responsePushNotificationr6   AttributeError)r7   
connectionkwargsrH   s       r)   
on_connectz_HiredisParser.on_connectB   s    %%
)88,** ((88,	
 ..!+!3!3!<!<F:%w~~//-	6181I1ID. 	615D.	6s   &B8 8C
Cc                 6    d | _         d | _        t        | _        y r:   )rI   rR   rO   rS   r<   s    r)   r;   z_HiredisParser.on_disconnectY   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)rR   r   r   rS   rO   getsread_from_socket)r7   r   s     r)   can_readz_HiredisParser.can_read^   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: )rI   r   
settimeout	recv_intor0   r   r   rR   feedrK   socketr   TimeoutErrorr   r   get	__class__errnoargs)r7   r   r[   sockcustom_timeoutbufflenexalloweds           r)   r]   z_HiredisParser.read_from_socketh   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                 T   | j                   st        t              | j                  t        urc| j                  }t        | _        | j
                  >t        || j
                        r(| j                  |      }|r|S | j                  ||      S |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|| j
                  >t        || j
                        r(| j                  |      }|r|S | j                  ||      S t        |t              r|rt        |d   t              r|d   |S )Ndisable_decodingpush_requestFr   )rR   r   r   rS   rO   r6   
isinstancehandle_push_responseread_responser\   r]   listr7   rq   rr   rD   s       r)   ru   z_HiredisParser.read_response   s   ||!"@AA o5**H"1D11=*$<<C  44X>  #O))%5!- *   O||((/H||((*H/)!!#<<,,U3<<,,. /) h0N//;
d88A
 00:H%%!1) &   x&8A;81+r(   NFF)r!   r"   r#   __doc__r8   r=   r1   rX   r;   r^   r   r]   ru   r'   r(   r)   r,   r,   )   s4    0	2
6..
 (0$ 6<8r(   r,   c            
       r     e Zd ZdZdZdef fdZd Zd Zd Z	d Z
d	 Z	 dd
ededeeee   f   fdZ xZS )_AsyncHiredisParserzBAsync implementation of parser class for connections using Hiredis)rR   r.   c                     t         st        d      t        |   |       d | _        | j
                  | _        d | _        d | _        y )NzHiredis is not available.)r.   )	r   r   superr8   rR   r1   r2   r5   r6   )r7   r.   rg   s     r)   r8   z_AsyncHiredisParser.__init__   sH     899*:;(,(H(H%.2+-1*r(   c                 ^   K   t        d      }|j                  dt        |      z          |S wr?   rA   rC   s      r)   r1   z/_AsyncHiredisParser.handle_pubsub_push_response   s+     ?+&X67s   +-c                 |   dd l }|j                  | _        t        | j                  t
        d}|j                  j                  r2|j                  j                  |d<   |j                  j                  |d<    |j                  di || _        d| _        	 t        |dd       | _        y # t        $ r
 d | _        Y y w xY w)Nr   )r   r   rG   r   r    TrT   r'   )rH   rR   _streamr   rL   rO   rM   rP   r   rN   rQ   
_connectedgetattrr6   rU   )r7   rV   rH   rW   s       r)   rX   z_AsyncHiredisParser.on_connect   s    !)),**,&

 ..!+!3!3!<!<F:)11AAF8%w~~//	618+T2D.  	615D.	6s   B( (B;:B;c                     d| _         y )NF)r   r<   s    r)   r;   z!_AsyncHiredisParser.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)
r   r   r   rR   r\   rO   async_timeoutr]   asynciore   r<   s    r)   can_read_destructivez(_AsyncHiredisParser.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)	r   read
_read_sizers   bytesr   r   rR   rc   )r7   buffers     r)   r]   z$_AsyncHiredisParser.read_from_socket   sW     ||((99Z6!"@AtK&!  :s   )A0A.AA0rq   rr   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|| j                  Nt        || j                        r8| j                  |       d {   }|s| j                  ||       d {   S |S t        |t              r|rt        |d   t              r|d   |S 7 7 Q7 6w)NFrp   r   )r   r   r   rR   r\   rO   r]   rs   r6   rt   ru   rv   rw   s       r)   ru   z!_AsyncHiredisParser.read_response  s@     !"@AtK||((/H||((*H/)'')))<<,,U3<<,,. /) h0N//;
d88A
 "66x@@H!//%5L 0     x&8A;81+7 * As>   A0E2E3AE8AE EEE3EEErx   )r!   r"   r#   ry   	__slots__intr8   r1   rX   r;   r   r]   boolr   r   r   ru   __classcell__)rg   s   @r)   r{   r{      sc    LI2 2
60 	 DI* $*<@*	z4
++	,*r(   r{   )%r   rd   sysloggingr   typingr   r   r   r   r   version_infomajorminorr   r   
exceptionsr   r   r   r   utilsr   baser   r   r   r   r   r   r   r   objectrO   r   r,   r{   r'   r(   r)   <module>r      s      
  = =Q3#3#3#9#9R#?06 E E  %   (% UZ!8 Upl/+G lr(   