
    ph+                     t   S SK r S SKrS SKrS SKJr  S SKJrJrJrJ	r	J
r
  \R                  R                  S:  a!  \R                  R                  S:  a  S SK Jr  OS SKJr  SSKJrJrJr  SS	KJr  SS
KJr  SSKJrJrJrJr  SSKJrJrJrJr  \ " 5       r! " S S\	SS9r" " S S\\5      r# " S S\\5      r$g)    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                   b    \ rS rSr% \\/\4   \S'   \\/\4   \S'   \\   \S'   \\   \S'   Sr	g)_HiredisReaderArgs"   protocolError
replyErrorencodingerrors N)
__name__
__module____qualname____firstlineno__r   str	Exception__annotations__r   __static_attributes__r"       P/home/james-whalen/.local/lib/python3.13/site-packages/redis/_parsers/hiredis.pyr   r   "   s:    SE9,--#	)**smSMr+   r   F)totalc                   T    \ rS rSrSrS rS rS rS rS r	S r
\S	4S
 jrSS jrSrg)_HiredisParser)   z*Parser class for connections using Hiredisc                     [         (       d  [        S5      eXl        [        U5      U l        U R
                  U l        S U l        S U l        S U l	        S U l
        g )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)selfr2   s     r,   __init___HiredisParser.__init__,   sU      788 0 !12(,(H(H%-1*-1*.2+-1*r+   c                 F     U R                  5         g ! [         a     g f = fN)on_disconnectr(   r;   s    r,   __del___HiredisParser.__del__7   s%    	  		s    
  c                 V    [        S5      nUR                  S[        U5      -   5        U$ Npush_responsezPush response: r   debugr'   r;   responseloggers      r,   r5   *_HiredisParser.handle_pubsub_push_response=   s'    ?+&X67r+   c                    SS K nUR                  U l        UR                  U l        [        U R
                  UR                  R                  [        S.nUR                  R                  (       a  UR                  R                  US'   UR                  " S0 UD6U l        [        U l         UR                  U l        g ! [          a
    S U l         g f = f)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PushNotificationr:   AttributeError)r;   
connectionkwargsrO   s       r,   
on_connect_HiredisParser.on_connectB   s    %%
)88,** ((88,	
 ..!+!3!3!<!<F:~~//-	6181I1ID. 	615D.	6s   +B= =CCc                 6    S U l         S U l        [        U l        g r?   )rP   rY   rV   rZ   rA   s    r,   r@   _HiredisParser.on_disconnectY   s    
-r+   c                     U R                   (       d  [        [        5      eU R                  [        L aB  U R                   R                  5       U l        U R                  [        L a  U R                  USS9$ g)NF)r   raise_on_timeoutT)rY   r   r   rZ   rV   getsread_from_socket)r;   r   s     r,   can_read_HiredisParser.can_read^   s_    ||!"@AA/1"&,,"3"3"5D""o5,,Wu,UUr+   Tc                 `   U R                   nU[        Ln U(       a  UR                  U5        U R                   R                  U R                  5      nUS:X  a  [        [        5      eU R                  R                  U R                  SU5         U(       a  UR                  U R                  5        gg! [        R                   a8    U(       a  [        S5      e U(       a  UR                  U R                  5        gg[         a}  n[        R                  " UR                   S5      nU(       d8  UR"                  U:X  a(   S nAU(       a  UR                  U R                  5        gg[        SUR$                   35      eS nAff = f! U(       a  UR                  U R                  5        f f = f)Nr   TzTimeout reading from socketFz!Error while reading from socket: )rP   r   
settimeout	recv_intor4   r   r   rY   feedrR   socketr   TimeoutErrorr   r   get	__class__errnoargs)r;   r   rd   sockcustom_timeoutbufflenexalloweds           r,   rf   _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<   A9B4 4&FF ?	F8F  F (F  FF %F-c                    U R                   (       d  [        [        5      eU R                  [        Laj  U R                  n[        U l        U R
                  bD  [        X0R
                  5      (       a*  U R                  U5      nU(       a  U$ U R                  UUS9$ U$ U(       a  U R                   R                  S5      nOU R                   R                  5       nU[        L aX  U R                  5         U(       a  U R                   R                  S5      nOU R                   R                  5       nU[        L a  MX  [        U[        5      (       a  UeU R
                  bD  [        X0R
                  5      (       a*  U R                  U5      nU(       a  U$ U R                  UUS9$ [        U[        5      (       a$  U(       a  [        US   [        5      (       a  US   eU$ )Ndisable_decodingpush_requestFr   )rY   r   r   rZ   rV   r:   
isinstancehandle_push_responseread_responsere   rf   listr;   r|   r}   rJ   s       r,   r   _HiredisParser.read_response   s   ||!"@AA o5**H"1D11=*<<C C  44X>  #O))%5!- *   O||((/H||((*H/)!!#<<,,U3<<,,. /) h00N//;
88A
 A
 00:H%%!1) &   x&&8A;881+r+   )r4   r:   rZ   rY   rP   rR   r9   r8   r7   r6   r2   NFF)r#   r$   r%   r&   __doc__r<   rB   r5   r_   r@   rg   r   rf   r   r*   r"   r+   r,   r/   r/   )   s4    0	2
6..
 (0$ 6<8r+   r/   c            
          ^  \ rS rSrSrSrS\4U 4S jjrS rS r	S r
S	 rS
 r SS\S\S\\\\   4   4S jjrSrU =r$ )_AsyncHiredisParser   zBAsync implementation of parser class for connections using Hiredis)rY   r2   c                    > [         (       d  [        S5      e[        TU ]  US9  S U l        U R
                  U l        S U l        S U l        g )NzHiredis is not available.)r2   )	r   r   superr<   rY   r5   r6   r9   r:   )r;   r2   rq   s     r,   r<   _AsyncHiredisParser.__init__   sK      899*:;(,(H(H%.2+-1*r+   c                 ^   #    [        S5      nUR                  S[        U5      -   5        U$ 7frE   rG   rI   s      r,   r5   /_AsyncHiredisParser.handle_pubsub_push_response   s*     ?+&X67s   +-c                    SS K nUR                  U l        [        U R                  [
        S.nUR                  R                  (       a2  UR                  R                  US'   UR                  R                  US'   UR                  " S0 UD6U l        SU l         [        USS 5      U l        g ! [         a
    S U l         g f = f)Nr   )r   r   rN   r    r!   Tr[   r"   )rO   rY   _streamr   rS   rV   rT   rW   r    rU   rX   
_connectedgetattrr:   r\   )r;   r]   rO   r^   s       r,   r_   _AsyncHiredisParser.on_connect   s    !)),**,&

 ..!+!3!3!<!<F:)11AAF8~~//	618+T2D.  	615D.	6s   B- -C Cc                     SU l         g )NF)r   rA   s    r,   r@   !_AsyncHiredisParser.on_disconnect   s	    r+   c                 ~  #    U R                   (       d  [        [        5      eU R                  R	                  5       [
        La  g [        S5       IS h  vN   U R                  5       I S h  vN sS S S 5      IS h  vN   $  N- N N	! , IS h  vN  (       d  f       g = f! [        R                   a     gf = f7f)NTr   F)
r   r   r   rY   re   rV   async_timeoutrf   asyncioro   rA   s    r,   can_read_destructive(_AsyncHiredisParser.can_read_destructive   s     !"@AA<<o5	$Q''!2244 (''4 ('''## 		s   AB=B# BB# B	-B.B	1B# =B>B# B=B# B	B# 	B BB B# B= B# #B:7B=9B::B=c                    #    U R                   R                  U R                  5      I S h  vN nU(       a  [        U[        5      (       d  [        [        5      S eU R                  R                  U5        g NL7f)NT)	r   read
_read_sizer~   bytesr   r   rY   rm   )r;   buffers     r,   rf   $_AsyncHiredisParser.read_from_socket   sY     ||((99Z66!"@AtK&!  :s   )A:A8AA:r|   r}   returnc                   #    U R                   (       d  [        [        5      S eU(       a  U R                  R	                  S5      nOU R                  R	                  5       nU[
        L a`  U R                  5       I S h  vN   U(       a  U R                  R	                  S5      nOU R                  R	                  5       nU[
        L a  M`  [        U[        5      (       a  UeU R                  bS  [        X0R                  5      (       a9  U R                  U5      I S h  vN nU(       d  U R                  XS9I S h  vN $ U$ [        U[        5      (       a$  U(       a  [        US   [        5      (       a  US   eU$  N Na NE7f)NFr{   r   )r   r   r   rY   re   rV   rf   r~   r:   r   r   r   r   s       r,   r   !_AsyncHiredisParser.read_response  sH     !"@AtK||((/H||((*H/)'')))<<,,U3<<,,. /) h00N//;
88A
 A
 "66x@@H!//%5 0     x&&8A;881+7 * As?   A;F=E<>A
F
AFE>F:F ;AF>F F)r   r:   rY   r   r9   r6   r   )r#   r$   r%   r&   r   	__slots__intr<   r5   r_   r@   r   rf   boolr   r   r   r   r*   __classcell__)rq   s   @r,   r   r      sh    LI2 2
60 	 DI* $*<@*	z4
++	,* *r+   r   )%r   rn   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   objectrV   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+   