
    AHj/                     "   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
 ddlmZmZmZmZ ddlmZ ddlmZmZmZ dd	lmZmZmZmZ dd
lmZmZmZ  e       Z ee d      Z de!de"fd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   )ConnectionErrorInvalidResponse
RedisErrorTimeoutError)
EncodableT)HIREDIS_AVAILABLESENTINELdeprecated_function   )AsyncBaseParserAsyncPushNotificationsParser
BaseParserPushNotificationsParser)#NONBLOCKING_EXCEPTION_ERROR_NUMBERSNONBLOCKING_EXCEPTIONSSERVER_CLOSED_CONNECTION_ERRORpolltimeoutreturnc                    t        | d      r| j                         ryt        rWt        j                         }|j                  | t        j                         |d n|dz  }t        |j	                  |            S t        j                         5 }|j                  | t        j                         t        |j                  |            cd d d        S # 1 sw Y   y xY w)NpendingTi  )hasattrr   	_HAS_POLLselectr   registerPOLLINbool	selectorsDefaultSelector
EVENT_READ)sockr   pollerpoll_timeoutselectors        N/root/tools/cai/cai_env/lib/python3.12/site-packages/redis/_parsers/hiredis.py_socket_can_readr-      s    tYDLLN 
 fmm,  'tGdNFKK-..		"	"	$ .$	 4 45HOOG,-. . .s   :CCc                   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,   r/   r/   7   s:    SE9,--#	)**smSMr;   r/   F)totalc                   j    e Zd ZdZd Zd Zd Zd Zd Zdde	de
fd	Zed
fdZddefdee	ef   fdZy)_HiredisParserz*Parser class for connections using Hiredisc                     t         st        d      || _        t        |      | _        | j
                  | _        d | _        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#oss_cluster_maint_push_handler_funcinvalidation_push_handler_func_hiredis_PushNotificationType)selfr@   s     r,   __init__z_HiredisParser.__init__A   s\     788 0 !12(,(H(H%-1*-1*370.2+-1*r;   c                 D    	 | j                          y # t        $ r Y y w xY wN)on_disconnectr8   rJ   s    r,   __del__z_HiredisParser.__del__M   s%    	  		s    	c                 V    t        d      }|j                  dt        |      z          |S Npush_responsezPush response: r   debugr7   rJ   responseloggers      r,   rC   z*_HiredisParser.handle_pubsub_push_responseS   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 || _        	 |j                  | _        y # t        $ r
 d | _        Y y w xY w)Nr   )r0   r1   r3   notEnoughDatar2   r:   )hiredis_socksocket_timeout_socket_timeoutr   parse_errorencoderencoding_errorsNOT_ENOUGH_DATAdecode_responsesr2   Reader_readerPushNotificationrI   AttributeError)rJ   
connectionkwargsr[   s       r,   
on_connectz_HiredisParser.on_connectX   s    %%
)88,** ((88,	
 ..!+!3!3!<!<F:%w~~//	6181I1ID. 	615D.	6s   B- -C ?C c                      d | _         d | _        y rM   )r\   re   rO   s    r,   rN   z_HiredisParser.on_disconnectn   s    
r;   r   r   c                     | j                   st        t              | j                   j                         ryt	        | j
                  |      S NT)re   r
   r   has_datar-   r\   )rJ   r   s     r,   can_readz_HiredisParser.can_readr   s;     ||!"@AA<<  "

G44r;   Tc                 0   | 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        $ r}t        j                  |j                   d      }|j"                  |k(  r5|s#Y d }~|r|j                  | j                         yy|dk(  rt        d      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: )r\   r   
settimeout	recv_intorB   r
   r   re   feedr^   socketr   r   r   r   get	__class__errnoargs)rJ   r   raise_on_timeoutr(   custom_timeoutbufflenexalloweds           r,   read_from_socketz_HiredisParser.read_from_socket|   sn   zz 0	6(jj**4<<8G!|%&DEELLdllAw7 $  4 45 # ~~ 	"#@AA  4 45  & 	Q
 :==bllBOGxx7"' 
  4 45 	 a<&'DEE!$EbggY"OPP	Q  4 45 s<   A3B) ) E2	E5 )E211E-"E5 (E--E22E5 5 FFc                 p   | j                   st        t              |r| j                   j                  d      }n| j                   j                         }|t        u rS| j                  |       |r| j                   j                  d      }n| j                   j                         }|t        u rSt        |t              r|| j                  ?t        || j                        r)| j                  |      }|r|S | j                  |||      S t        |t              r|rt        |d   t              r|d   |S )NF)r   )disable_decodingpush_requestr   r   )re   r
   r   getsrb   r   
isinstancerI   handle_push_responseread_responselist)rJ   r   r   r   rW   s        r,   r   z_HiredisParser.read_response   s#    ||!"@AA||((/H||((*H/)!!'!2<<,,U3<<,,. /) h0N//;
d88A
 00:H%%!1) &   x&8A;81+r;   N)r   )r4   r5   r6   __doc__rK   rP   rC   rj   rN   floatr$   ro   r   r   r   objectr   r:   r;   r,   r>   r>   >   sa    0
2
6,5 5d 5 (0$ 6F (0	+ uf}%	+r;   r>   c            
            e Zd ZdZdZdef fdZd Zd Zd Z	 e
dd	d
      defd       Zdef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)re   r@   c                     t         st        d      t        |   |       d | _        | j
                  | _        d | _        d | _        y )NzHiredis is not available.)r@   )	r   r   superrK   re   rC   rD   rH   rI   )rJ   r@   rw   s     r,   rK   z_AsyncHiredisParser.__init__   sH     899*:;(,(H(H%.2+-1*r;   c                 ^   K   t        d      }|j                  dt        |      z          |S wrR   rT   rV   s      r,   rC   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   )r0   r1   rZ   r2   r3   Trf   r:   )r[   re   _streamr   r_   rb   r`   rc   r2   ra   rd   
_connectedgetattrrI   rg   )rJ   rh   r[   ri   s       r,   rj   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   rO   s    r,   rN   z!_AsyncHiredisParser.on_disconnect   s	    r;   z8.0.0zUse can_read() insteadcan_read_destructive)versionreasonnamer   c                 >   K   | j                          d {   S 7 wrM   )ro   rO   s    r,   r   z(_AsyncHiredisParser.can_read_destructive   s      ]]_$$$s   c                    K   | j                   st        d      | j                  j                         s| j                  j                         ryt        | j                  j                        S w)NzBuffer is closed.T)r   OSErrorre   rn   r   at_eofr$   rB   rO   s    r,   ro   z_AsyncHiredisParser.can_read   sT      -..<<  "dll&9&9&; DLL(())s   A,A.c                    K   | j                   j                  | j                         d {   }|rt        |t              st        t              d | j                  j                  |       y7 Bwrm   )	r   read
_read_sizer   bytesr
   r   re   rt   )rJ   buffers     r,   r   z$_AsyncHiredisParser.read_from_socket  sW     ||((99Z6!"@AtK&!  :s   )A0A.AA0r   r   c                   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)NF)r   r   r   )r   r
   r   re   r   rb   r   r   rI   r   r   r   )rJ   r   r   rW   s       r,   r   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)FF)r4   r5   r6   r   	__slots__intrK   rC   rj   rN   r   r$   r   ro   r   r   r   r   r   __classcell__)rw   s   @r,   r   r      s    LI2 2
60   8?U%D %%* * DI* $*<@*	z4
++	,*r;   r   )'r!   r%   ru   loggingr   typingr   r   r   r   r   
exceptionsr
   r   r   r   r   utilsr   r   r   baser   r   r   r   r   r   r   r   rb   r   r    r   r$   r-   r/   r>   r   r:   r;   r,   <module>r      s        = = S S  D D   ( FF#	.E .d .0% JZ!8 JZt/+G tr;   