
    h*                     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        x/var/www/fastuser/data/www/generator.snapmosaic.io/flask_app/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 | _        y )NzHiredis is not installed)	r   r   socket_read_size	bytearray_bufferhandle_pubsub_push_responsepubsub_push_handler_funcinvalidation_push_handler_func_hiredis_PushNotificationType)selfr.   s     r)   __init__z_HiredisParser.__init__,   sD     788 0 !12(,(H(H%.2+-1*r(   c                 D    	 | j                          y # t        $ r Y y w xY wN)on_disconnectr%   r5   s    r)   __del__z_HiredisParser.__del__5   s%    	  		s    	c                 V    t        d      }|j                  dt        |      z          |S Npush_responsezPush response: r   debugr$   r5   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PushNotificationr4   AttributeError)r5   
connectionkwargsrF   s       r)   
on_connectz_HiredisParser.on_connect@   s    %%
)88,** ((88,	
 ..!+!3!3!<!<F:%w~~//-	6181I1ID. 	615D.	6s   &B8 8C
Cc                 6    d | _         d | _        t        | _        y r8   )rG   rP   rM   rQ   r:   s    r)   r9   z_HiredisParser.on_disconnectW   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)rP   r   r   rQ   rM   getsread_from_socket)r5   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: )rG   r   
settimeout	recv_intor0   r   r   rP   feedrI   socketr   TimeoutErrorr   r   get	__class__errnoargs)r5   r   rY   sockcustom_timeoutbufflenexalloweds           r)   r[   z_HiredisParser.read_from_socketf   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                  |      }|s| j                  ||      S |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                  |      }|s| j                  ||      S |S t        |t              r|rt        |d   t              r|d   |S )Ndisable_decodingpush_requestFr   )rP   r   r   rQ   rM   r4   
isinstancehandle_push_responseread_responserZ   r[   listr5   ro   rp   rB   s       r)   rs   z_HiredisParser.read_response   s   ||!"@AA o5**H"1D11=*$<<C  44X>#--)9 .   $OO||((/H||((*H/)!!#<<,,U3<<,,. /) h0N//;
d88A
 00:H))%5L *    x&8A;81+r(   NFF)r!   r"   r#   __doc__r6   r;   r1   rV   r9   r\   r   r[   rs   r'   r(   r)   r,   r,   )   s4    02
6..
 (0$ 6<4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)rP   r.   c                     t         st        d      t        |   |       d | _        | j
                  | _        d | _        d | _        y )NzHiredis is not available.)r.   )	r   r   superr6   rP   r1   r2   r3   r4   )r5   r.   re   s     r)   r6   z_AsyncHiredisParser.__init__   sH     899*:;(,(H(H%.2+-1*r(   c                 ^   K   t        d      }|j                  dt        |      z          |S wr=   r?   rA   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   rE   r   r    TrR   r'   )rF   rP   _streamr   rJ   rM   rK   rN   r   rL   rO   
_connectedgetattrr4   rS   )r5   rT   rF   rU   s       r)   rV   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)   r9   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   rP   rZ   rM   async_timeoutr[   asynciorc   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_sizerq   bytesr   r   rP   ra   )r5   buffers     r)   r[   z$_AsyncHiredisParser.read_from_socket   sW     ||((99Z6!"@AtK&!  :s   )A0A.AA0ro   rp   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)NFrn   r   )r   r   r   rP   rZ   rM   r[   rq   r4   rr   rs   rt   ru   s       r)   rs   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rv   )r!   r"   r#   rw   	__slots__intr6   r1   rV   r9   r   r[   boolr   r   r   rs   __classcell__)re   s   @r)   ry   ry      sc    LI2 2
60 	 DI* $*<@*	z4
++	,*r(   ry   )%r   rb   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   objectrM   r   r,   ry   r'   r(   r)   <module>r      s      
  = =Q3#3#3#9#9R#?06 E E  %   (% OZ!8 Odl/+G lr(   