
    /
i9                        d dl Z d dlZd dlmZmZ d dlmZ d dlmZm	Z	m
Z
mZmZ d dlmZ d dlmZmZ d dlmZmZ d dlmZ  G d	 d
e          Z G d de          Z G d de          Z G d de          Z G d de          Z G d d          Z G d de          Z G d de          Z G d d          Z  G d d          Z! G d d          Z" G d d           Z# G d! d"          Z$ G d# d$e$          Z% G d% d&e          Z& G d' d(e          Z' G d) d*e          Z( G d+ d,e          Z) G d- d.e          Z* G d/ d0e          Z+ G d1 d2e          Z,dS )3    N)ABCabstractmethod)Enum)DictListOptionalTypeUnion)TokenInterface)CredentialProviderStreamingCredentialProvider)init_connection_countregister_pools_connection_count)check_protocol_versionc                   .    e Zd ZdZedefd            ZdS )EventListenerInterfacez7
    Represents a listener for given event object.
    eventc                     d S N selfr   s     C:\Users\Dell Inspiron 16\Desktop\tws\AgrotaPowerBi\back-agrota-powerbi\mcp-client-agrota\venv\Lib\site-packages\redis/event.pylistenzEventListenerInterface.listen           N__name__
__module____qualname____doc__r   objectr   r   r   r   r   r      sE          F    ^  r   r   c                   .    e Zd ZdZedefd            ZdS )AsyncEventListenerInterfacez>
    Represents an async listener for given event object.
    r   c                 
   K   d S r   r   r   s     r   r   z"AsyncEventListenerInterface.listen         r   Nr   r   r   r   r$   r$      sE          &    ^  r   r$   c                       e Zd ZdZedefd            Zedefd            Zedee	e         e
eeef                  f         fd            ZdS )EventDispatcherInterfacezf
    Represents a dispatcher that dispatches events to listeners
    associated with given event.
    r   c                     d S r   r   r   s     r   dispatchz!EventDispatcherInterface.dispatch*   r   r   c                 
   K   d S r   r   r   s     r   dispatch_asyncz'EventDispatcherInterface.dispatch_async.   r&   r   mappingsc                     dS )zRegister additional listeners.Nr   )r   r-   s     r   register_listenersz+EventDispatcherInterface.register_listeners2   s	     	r   N)r   r   r    r!   r   r"   r*   r,   r   r	   r   r
   r   r$   r/   r   r   r   r(   r(   $   s         
 f    ^ &    ^ L-/JJKLN
   ^  r   r(   c                   ,     e Zd ZdZdedef fdZ xZS )EventExceptionzM
    Exception wrapper that adds an event object into exception context.
    	exceptionr   c                 f    || _         || _        t                                          |           d S r   )r2   r   super__init__)r   r2   r   	__class__s      r   r5   zEventException.__init__C   s/    "
#####r   )r   r   r    r!   	Exceptionr"   r5   __classcell__)r6   s   @r   r1   r1   >   sU         $) $F $ $ $ $ $ $ $ $ $ $r   r1   c                       e Zd Z	 d	deeee         ee         f                  fdZ	defdZ
defdZdeee         eeeef                  f         fdZdS )
EventDispatcherNevent_listenersc                    t           t                      gt          t                      t	                      gt
          t                      gt          t                      gt          t                      gt          t                      gi| _        t          j                    | _        d| _        |r|                     |           dS dS )z]
        Dispatcher that dispatches events to listeners associated with given event.
        N)AfterConnectionReleasedEventReAuthConnectionListener(AfterPooledConnectionsInstantiationEvent"RegisterReAuthForPooledConnections&InitializeConnectionCountObservability'AfterSingleConnectionInstantiationEvent!RegisterReAuthForSingleConnection'AfterPubSubConnectionInstantiationEventRegisterReAuthForPubSub#AfterAsyncClusterInstantiationEvent"RegisterReAuthForAsyncClusterNodes!AsyncAfterConnectionReleasedEventAsyncReAuthConnectionListener_event_listeners_mapping	threadingLock_lock_async_lockr/   )r   r;   s     r   r5   zEventDispatcher.__init__K   s     )(**+ 52446887 41336 46M6O6O5P/2T2V2V1W--//0
 	%( ^%%
 	5##O44444	5 	5r   r   c                     | j         5  | j                            t          |          g           }|D ]}|                    |           	 d d d            d S # 1 swxY w Y   d S r   )rM   rJ   gettyper   r   r   	listenerslisteners       r   r*   zEventDispatcher.dispatchn   s    Z 	' 	'599$u++rJJI% ' '&&&&'	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	's   AAA Ac                 >  K   | j         t          j                    | _         | j         4 d {V  | j                            t          |          g           }|D ]}|                    |           d {V  	 d d d           d {V  d S # 1 d {V swxY w Y   d S r   )rN   asynciorL   rJ   rP   rQ   r   rR   s       r   r,   zEventDispatcher.dispatch_asyncu   s=     #&|~~D# 	- 	- 	- 	- 	- 	- 	- 	-599$u++rJJI% - -ooe,,,,,,,,,,-	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-s   A	B
BBr-   c           	          | j         5  |D ]T}|| j        v r9t          t          | j        |         ||         z                       | j        |<   D||         | j        |<   U	 d d d            d S # 1 swxY w Y   d S r   )rM   rJ   listset)r   r-   
event_types      r   r/   z"EventDispatcher.register_listeners   s    Z 
	U 
	U& 	U 	U
!>>>@D 9*E&z23 A AD1*== AI@TD1*==	U
	U 
	U 
	U 
	U 
	U 
	U 
	U 
	U 
	U 
	U 
	U 
	U 
	U 
	U 
	U 
	U 
	U 
	Us   AA..A25A2r   )r   r   r    r   r   r	   r"   r   r   r5   r*   r,   r
   r$   r/   r   r   r   r:   r:   I   s         	!5 !5!ft$:;;<
!5 !5 !5 !5F'f ' ' ' '-& - - - -UL-/JJKLN
U U U U U Ur   r:   c                   .    e Zd ZdZd Zed             ZdS )r=   zA
    Event that will be fired before each command execution.
    c                     || _         d S r   _connection)r   
connections     r   r5   z%AfterConnectionReleasedEvent.__init__   s    %r   c                     | j         S r   r]   r   s    r   r_   z'AfterConnectionReleasedEvent.connection       r   N)r   r   r    r!   r5   propertyr_   r   r   r   r=   r=      sH         & & &     X     r   r=   c                       e Zd ZdS )rH   Nr   r   r    r   r   r   rH   rH              Dr   rH   c                       e Zd ZdZdZdS )
ClientType)sync)asyncN)r   r   r    SYNCASYNCr   r   r   rh   rh      s        DEEEr   rh   c                       e Zd ZdZ	 ddededee         fdZe	d             Z
e	defd	            Ze	deedf         fd
            ZdS )r?   zQ
    Event that will be fired after pooled connection instances was created.
    Nconnection_poolsclient_typecredential_providerc                 0    || _         || _        || _        d S r   )_connection_pools_client_type_credential_provider)r   rn   ro   rp   s       r   r5   z1AfterPooledConnectionsInstantiationEvent.__init__   s"     "2'$7!!!r   c                     | j         S r   )rr   ra   s    r   rn   z9AfterPooledConnectionsInstantiationEvent.connection_pools   s    %%r   returnc                     | j         S r   rs   ra   s    r   ro   z4AfterPooledConnectionsInstantiationEvent.client_type         r   c                     | j         S r   rt   ra   s    r   rp   z<AfterPooledConnectionsInstantiationEvent.credential_provider       ((r   r   )r   r   r    r!   r   rh   r   r   r5   rc   rn   ro   r
   rp   r   r   r   r?   r?      s          =A	8 88  8 &&89	8 8 8 8 & & X& !Z ! ! ! X! )U+=t+C%D ) ) ) X) ) )r   r?   c                       e Zd ZdZdedeej        ej	        f         fdZ
ed             Zedefd            Zedeej        ej	        f         fd            Zd	S )
rB   z
    Event that will be fired after single connection instances was created.

    :param connection_lock: For sync client thread-lock should be provided,
    for async asyncio.Lock
    ro   connection_lockc                 0    || _         || _        || _        d S r   )r^   rs   _connection_lock)r   r_   ro   r~   s       r   r5   z0AfterSingleConnectionInstantiationEvent.__init__   s"     &' /r   c                     | j         S r   r]   ra   s    r   r_   z2AfterSingleConnectionInstantiationEvent.connection   rb   r   rv   c                     | j         S r   rx   ra   s    r   ro   z3AfterSingleConnectionInstantiationEvent.client_type   ry   r   c                     | j         S r   r   ra   s    r   r~   z7AfterSingleConnectionInstantiationEvent.connection_lock       $$r   N)r   r   r    r!   rh   r
   rK   RLockrV   rL   r5   rc   r_   ro   r~   r   r   r   rB   rB      s         0  0 y<=	0 0 0 0     X  !Z ! ! ! X! %y'D!E % % % X% % %r   rB   c                       e Zd Zdedeej        ej        f         fdZ	e
d             Ze
d             Ze
defd            Ze
deej        ej        f         fd            Zd	S )
rD   ro   r~   c                 >    || _         || _        || _        || _        d S r   )_pubsub_connection_connection_poolrs   r   )r   pubsub_connectionconnection_poolro   r~   s        r   r5   z0AfterPubSubConnectionInstantiationEvent.__init__   s*     #4 /' /r   c                     | j         S r   )r   ra   s    r   r   z9AfterPubSubConnectionInstantiationEvent.pubsub_connection   s    &&r   c                     | j         S r   )r   ra   s    r   r   z7AfterPubSubConnectionInstantiationEvent.connection_pool   r   r   rv   c                     | j         S r   rx   ra   s    r   ro   z3AfterPubSubConnectionInstantiationEvent.client_type   ry   r   c                     | j         S r   r   ra   s    r   r~   z7AfterPubSubConnectionInstantiationEvent.connection_lock   r   r   N)r   r   r    rh   r
   rK   r   rV   rL   r5   rc   r   r   ro   r~   r   r   r   rD   rD      s        
0  	
0
 y<=
0 
0 
0 
0 ' ' X' % % X% !Z ! ! ! X! %y'D!E % % % X% % %r   rD   c                   z    e Zd ZdZ	 d	dedee         fdZedefd            Z	ede
edf         fd            ZdS )
rF   z
    Event that will be fired after async cluster instance was created.

    Async cluster doesn't use connection pools,
    instead ClusterNode object manages connections.
    Nnodesrp   c                 "    || _         || _        d S r   )_nodesrt   )r   r   rp   s      r   r5   z,AfterAsyncClusterInstantiationEvent.__init__
  s    
 $7!!!r   rv   c                     | j         S r   )r   ra   s    r   r   z)AfterAsyncClusterInstantiationEvent.nodes  s
    {r   c                     | j         S r   r{   ra   s    r   rp   z7AfterAsyncClusterInstantiationEvent.credential_provider  r|   r   r   )r   r   r    r!   dictr   r   r5   rc   r   r
   rp   r   r   r   rF   rF     s          =A8 88 &&898 8 8 8 t    X )U+=t+C%D ) ) ) X) ) )r   rF   c                   Z    e Zd ZdZdedefdZedefd            Zedefd            Z	dS )	OnCommandsFailEventzD
    Event fired whenever a command fails during the execution.
    commandsr2   c                 "    || _         || _        d S r   )	_commands
_exception)r   r   r2   s      r   r5   zOnCommandsFailEvent.__init__   s    
 "#r   rv   c                     | j         S r   )r   ra   s    r   r   zOnCommandsFailEvent.commands(  s
    ~r   c                     | j         S r   )r   ra   s    r   r2   zOnCommandsFailEvent.exception,  s
    r   N)
r   r   r    r!   tupler7   r5   rc   r   r2   r   r   r   r   r     s         $$ $ $ $ $ %    X 9    X  r   r   c                       e Zd ZdS )AsyncOnCommandsFailEventNre   r   r   r   r   r   1  rf   r   r   c                       e Zd ZdZdefdZdS )r>   zG
    Listener that performs re-authentication of given connection.
    r   c                 8    |j                                          d S r   r_   re_authr   s     r   r   zReAuthConnectionListener.listen:  s      """""r   N)r   r   r    r!   r=   r   r   r   r   r>   r>   5  s:         #8 # # # # # #r   r>   c                       e Zd ZdZdefdZdS )rI   zM
    Async listener that performs re-authentication of given connection.
    r   c                 H   K   |j                                          d {V  d S r   r   r   s     r   r   z$AsyncReAuthConnectionListener.listenC  s3      &&(((((((((((r   N)r   r   r    r!   rH   r   r   r   r   rI   rI   >  s:         )"C ) ) ) ) ) )r   rI   c                   H    e Zd ZdZd ZdefdZd Zd Zde	fdZ
de	fd	Zd
S )r@   z
    Listener that registers a re-authentication callback for pooled connections.
    Required by :class:`StreamingCredentialProvider`.
    c                     d | _         d S r   _eventra   s    r   r5   z+RegisterReAuthForPooledConnections.__init__M      r   r   c                 r   t          |j        t                    r|| _        |j        t
          j        k    r@|j                            | j                   |j        	                    | j
                   d S |j                            | j                   |j        	                    | j                   d S d S r   )
isinstancerp   r   r   ro   rh   rk   on_next_re_authon_error_raise_on_error_re_auth_async_raise_on_error_asyncr   s     r   r   z)RegisterReAuthForPooledConnections.listenP  s    e/1LMM 	ODK JO33)11$-@@@)2243GHHHHH)11$2EFFF)2243MNNNNN	O 	Or   c                 N    | j         j        D ]}|                    |           d S r   r   rn   re_auth_callbackr   tokenpools      r   r   z+RegisterReAuthForPooledConnections._re_auth[  s7    K0 	) 	)D!!%((((	) 	)r   c                 ^   K   | j         j        D ]}|                    |           d {V  d S r   r   r   s      r   r   z1RegisterReAuthForPooledConnections._re_auth_async_  sM      K0 	/ 	/D''..........	/ 	/r   errorc                 ,    t          || j                  r   r1   r   r   r   s     r   r   z2RegisterReAuthForPooledConnections._raise_on_errorc      UDK000r   c                 0   K   t          || j                  r   r   r   s     r   r   z8RegisterReAuthForPooledConnections._raise_on_error_asyncf        UDK000r   N)r   r   r    r!   r5   r?   r   r   r   r7   r   r   r   r   r   r@   r@   G  s         
  	OD 	O 	O 	O 	O) ) )/ / /1Y 1 1 1 11 1 1 1 1 1 1r   r@   c                   H    e Zd ZdZd ZdefdZd Zd Zde	fdZ
de	fd	Zd
S )rC   z
    Listener that registers a re-authentication callback for single connection.
    Required by :class:`StreamingCredentialProvider`.
    c                     d | _         d S r   r   ra   s    r   r5   z*RegisterReAuthForSingleConnection.__init__p  r   r   r   c                    t          |j        j        t                    r|| _        |j        t          j        k    rJ|j        j                            | j	                   |j        j        
                    | j                   d S |j        j                            | j                   |j        j        
                    | j                   d S d S r   )r   r_   rp   r   r   ro   rh   rk   r   r   r   r   r   r   r   s     r   r   z(RegisterReAuthForSingleConnection.listens  s    02M
 
 	  DK JO33 4<<T]KKK 4==d>RSSSSS 4<<T=PQQQ 4==.    	 	r   c                    | j         j        5  | j         j                            d|                    d          |                                           | j         j                                         d d d            d S # 1 swxY w Y   d S NAUTHoidr   r~   r_   send_commandtry_get	get_valueread_responser   r   s     r   r   z*RegisterReAuthForSingleConnection._re_auth  s    [( 	3 	3K"//e,,eoo.?.?   K"00222		3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3s   A%A??BBc                 X  K   | j         j        4 d {V  | j         j                            d|                    d          |                                           d {V  | j         j                                         d {V  d d d           d {V  d S # 1 d {V swxY w Y   d S r   r   r   s     r   r   z0RegisterReAuthForSingleConnection._re_auth_async  sR     ;. 	9 	9 	9 	9 	9 	9 	9 	9+(55e,,eoo.?.?         +(66888888888		9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9s   A1B
B#&B#r   c                 ,    t          || j                  r   r   r   s     r   r   z1RegisterReAuthForSingleConnection._raise_on_error  r   r   c                 0   K   t          || j                  r   r   r   s     r   r   z7RegisterReAuthForSingleConnection._raise_on_error_async  r   r   N)r   r   r    r!   r5   rB   r   r   r   r7   r   r   r   r   r   rC   rC   j  s         
  C    3 3 39 9 91Y 1 1 1 11 1 1 1 1 1 1r   rC   c                   8    e Zd Zd ZdefdZdefdZdefdZ	dS )	rG   c                     d | _         d S r   r   ra   s    r   r5   z+RegisterReAuthForAsyncClusterNodes.__init__  r   r   r   c                     t          |j        t                    rG|| _        |j                            | j                   |j                            | j                   d S d S r   )r   rp   r   r   r   r   r   r   r   s     r   r   z)RegisterReAuthForAsyncClusterNodes.listen  se    e/1LMM 	EDK%--dm<<<%..t/CDDDDD	E 	Er   r   c                 ~   K   | j         j        D ]-}| j         j        |                             |           d {V  .d S r   )r   r   r   )r   r   keys      r   r   z+RegisterReAuthForAsyncClusterNodes._re_auth  s[      ;$ 	A 	AC+#C(99%@@@@@@@@@@	A 	Ar   r   c                 0   K   t          || j                  r   r   r   s     r   r   z2RegisterReAuthForAsyncClusterNodes._raise_on_error  r   r   N)
r   r   r    r5   rF   r   r   r   r7   r   r   r   r   rG   rG     s          E? E E E EAN A A A A19 1 1 1 1 1 1r   rG   c                   P    e Zd Zd ZdefdZdefdZdefdZde	fdZ
de	fd	Zd
S )rE   c                 L    d | _         d | _        d | _        d | _        d | _        d S r   )r^   r   rs   r   r   ra   s    r   r5   z RegisterReAuthForPubSub.__init__  s-     $  $r   r   c                 X   t          |j        j        t                    rt	          |j                                        d          r|| _        |j        | _        |j        | _	        |j
        | _        |j        | _        | j        t          j        k    rJ| j        j                            | j                   | j        j                            | j                   d S | j        j                            | j                   | j        j                            | j                   d S d S d S )N   )r   r   rp   r   r   get_protocolr   r^   r   r   ro   rs   r~   r   rh   rk   r   r   r   r   r   r   r   s     r   r   zRegisterReAuthForPubSub.listen  s$   #79T
 
 	$U%<%I%I%K%KQOO	  DK$6D$)$9D! % 1D$)$9D! JO33 4<<T]KKK 4==d>RSSSSS 4<<T=PQQQ 4==.    	 	 	 	r   r   c                 ,   | j         5  | j                            d|                    d          |                                           | j                                         d d d            n# 1 swxY w Y   | j                            |           d S r   r   r^   r   r   r   r   r   r   r   s     r   r   z RegisterReAuthForPubSub._re_auth  s    " 	- 	-))e,,eoo.?.?   **,,,		- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	..u55555s   AA//A36A3c                 x  K   | j         4 d {V  | j                            d|                    d          |                                           d {V  | j                                         d {V  d d d           d {V  n# 1 d {V swxY w Y   | j                            |           d {V  d S r   r   r   s     r   r   z&RegisterReAuthForPubSub._re_auth_async  sn     ( 	3 	3 	3 	3 	3 	3 	3 	3"//e,,eoo.?.?         "00222222222		3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 #44U;;;;;;;;;;;s   A'B		
BBr   c                 ,    t          || j                  r   r   r   s     r   r   z'RegisterReAuthForPubSub._raise_on_error  r   r   c                 0   K   t          || j                  r   r   r   s     r   r   z-RegisterReAuthForPubSub._raise_on_error_async  r   r   N)r   r   r    r5   rD   r   r   r   r   r7   r   r   r   r   r   rE   rE     s          C    &6n 6 6 6 6<. < < < <1Y 1 1 1 11 1 1 1 1 1 1r   rE   c                       e Zd ZdZdefdZdS )rA   zC
    Listener that initializes connection count observability.
    r   c                 J    t                       t          |j                   d S r   )r   r   rn   r   s     r   r   z-InitializeConnectionCountObservability.listen  s'     	((>?????r   N)r   r   r    r!   r?   r   r   r   r   rA   rA     sA         @D @ @ @ @ @ @r   rA   )-rV   rK   abcr   r   enumr   typingr   r   r   r	   r
   redis.auth.tokenr   redis.credentialsr   r   redis.observability.recorderr   r   redis.utilsr   r   r$   r(   r7   r1   r:   r=   rH   rh   r?   rB   rD   rF   r   r   r>   rI   r@   rC   rG   rE   rA   r   r   r   <module>r      sl        # # # # # # # #       4 4 4 4 4 4 4 4 4 4 4 4 4 4 + + + + + + M M M M M M M M        / . . . . .    S       #       s   4$ $ $ $ $Y $ $ $GU GU GU GU GU. GU GU GUT
  
  
  
  
  
  
  
 	 	 	 	 	(D 	 	 	       
) ) ) ) ) ) ) )8% % % % % % % %>% % % % % % % %<) ) ) ) ) ) ) )2       ,	 	 	 	 	2 	 	 	# # # # #5 # # #) ) ) ) )$? ) ) ) 1  1  1  1  1)?  1  1  1F*1 *1 *1 *1 *1(> *1 *1 *1Z1 1 1 1 1)? 1 1 1$11 11 11 11 114 11 11 11h
@ 
@ 
@ 
@ 
@-C 
@ 
@ 
@ 
@ 
@r   