
    ng\jC                     t   S SK r S SKrS SKJrJr  S SKJr  S SKJrJ	r	J
r
JrJr  S SKJr  S SKJrJr  S SKJrJr  S SKJrJr   " S	 S
\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S5      r " S S\5      r " S S5      r  " S S\ 5      r! " S S\5      r" " S S5      r# " S S 5      r$ " S! S"5      r% " S# S$5      r& " S% S&5      r' " S' S(\'5      r( " S) S*\5      r) " S+ S,\5      r* " S- S.\5      r+ " S/ S0\5      r, " S1 S2\5      r- " S3 S4\5      r. " S5 S6\5      r/g)7    N)ABCabstractmethod)Enum)DictListOptionalTypeUnion)TokenInterface)CredentialProviderStreamingCredentialProvider)init_connection_countregister_pools_connection_count)check_protocol_versiondeprecated_functionc                   0    \ rS rSrSr\S\4S j5       rSrg)EventListenerInterface   z/
Represents a listener for given event object.
eventc                     g N selfr   s     F/home/edenadmin/noVNC/venv/lib/python3.13/site-packages/redis/event.pylistenEventListenerInterface.listen           r   N	__name__
__module____qualname____firstlineno____doc__r   objectr   __static_attributes__r   r   r   r   r      s"     F  r   r   c                   0    \ rS rSrSr\S\4S j5       rSrg)AsyncEventListenerInterface   z6
Represents an async listener for given event object.
r   c                    #    g 7fr   r   r   s     r   r   "AsyncEventListenerInterface.listen           r   Nr    r   r   r   r)   r)      s"     &  r   r)   c                       \ rS rSrSr\S\4S j5       r\S\4S j5       r\S\	\
\   \\\\4      4   4S j5       r\S\	\
\   \\\\4      4   4S j5       rS	rg
)EventDispatcherInterface$   zZ
Represents a dispatcher that dispatches events to listeners
associated with given event.
r   c                     g r   r   r   s     r   dispatch!EventDispatcherInterface.dispatch*   r   r   c                    #    g 7fr   r   r   s     r   dispatch_async'EventDispatcherInterface.dispatch_async.   r-   r.   mappingsc                     g)zRegister additional listeners.Nr   r   r8   s     r   register_listeners+EventDispatcherInterface.register_listeners2        	r   c                     g)z3Remove previously registered listeners by identity.Nr   r:   s     r   unregister_listeners-EventDispatcherInterface.unregister_listeners=   r=   r   r   N)r!   r"   r#   r$   r%   r   r&   r3   r6   r   r	   r   r
   r   r)   r;   r?   r'   r   r   r   r0   r0   $   s    
 f   &   L-/JJKLN
  L-/JJKLN
 r   r0   c                   8   ^  \ rS rSrSrS\S\4U 4S jjrSrU =r	$ )EventExceptionI   zE
Exception wrapper that adds an event object into exception context.
	exceptionr   c                 <   > Xl         X l        [        TU ]  U5        g r   )rD   r   super__init__)r   rD   r   	__class__s      r   rG   EventException.__init__N   s    "
#r   )r   rD   )
r!   r"   r#   r$   r%   	Exceptionr&   rG   r'   __classcell__)rH   s   @r   rB   rB   I   s     $) $F $ $r   rB   c                       \ rS rSr SS\\\\   \\	   4      4S jjr
S\4S jrS\4S jrS\\\   \\\	\4      4   4S	 jrS\\\   \\\	\4      4   4S
 jrSrg)EventDispatcherT   Nevent_listenersc                 :   [         [        5       /[        [        5       /[        [        5       /[        [        5       /[        [        5       /[        [        5       /0U l        [        R                  " 5       U l        SU l        U(       a  U R#                  U5        gg)zM
Dispatcher that dispatches events to listeners associated with given event.
N)AfterConnectionReleasedEventReAuthConnectionListener(AfterPooledConnectionsInstantiationEvent"RegisterReAuthForPooledConnections'AfterSingleConnectionInstantiationEvent!RegisterReAuthForSingleConnection'AfterPubSubConnectionInstantiationEventRegisterReAuthForPubSub#AfterAsyncClusterInstantiationEvent"RegisterReAuthForAsyncClusterNodes!AsyncAfterConnectionReleasedEventAsyncReAuthConnectionListener_event_listeners_mapping	threadingRLock_lock_async_lockr;   )r   rO   s     r   rG   EventDispatcher.__init__V   s     )(*+ 5247 4136 46M6O5P/2T2V1W--/0
 	%. __&
##O4 r   r   c                     U R                      [        U R                  R                  [	        U5      / 5      5      nS S S 5        W H  nUR                  U5        M     g ! , (       d  f       N)= fr   )r`   listr]   gettyper   r   r   	listenerslisteners       r   r3   EventDispatcher.dispatch|   sO    
 ZZT::>>tE{BOPI !HOOE" " Zs   /A
A-c                   #    U R                   c  [        R                  " 5       U l         U R                    IS h  vN   [        U R                  R                  [        U5      / 5      5      nS S S 5      IS h  vN   W H  nUR                  U5      I S h  vN   M     g  Ne N)! , IS h  vN  (       d  f       N>= f N'7fr   )ra   asyncioLockrd   r]   re   rf   r   rg   s       r   r6   EventDispatcher.dispatch_async   s     #&||~D
 ###T::>>tE{BOPI $#!H//%((( " $### )sP   8C B C /B$-C 8B"9C B>
C "C $B;*B-+B;7C r8   c           	         U R                      U HX  nX R                  ;   a5  [        [        U R                  U   X   -   5      5      U R                  U'   MG  X   U R                  U'   MZ     S S S 5        g ! , (       d  f       g = fr   )r`   r]   rd   set)r   r8   
event_types      r   r;   "EventDispatcher.register_listeners   sy     ZZ&
!>!>>@D 99*E&23AD11*= AI@TD11*= ' ZZs   AA55
Bc           	      P  ^ U R                      UR                  5        Hf  u  p#U R                  R                  U5      nU(       d  M)  U V^s/ s H!  m[	        U4S jU 5       5      (       d  M  TPM#     snU R                  U'   Mh     S S S 5        g s  snf ! , (       d  f       g = f)Nc              3   ,   >#    U  H	  nTULv   M     g 7fr   r   ).0targetri   s     r   	<genexpr>7EventDispatcher.unregister_listeners.<locals>.<genexpr>   s     J	f861	s   )r`   itemsr]   re   all)r   r8   rq   	to_removecurrentri   s        `r   r?   $EventDispatcher.unregister_listeners   s     ZZ)1)9%
77;;JG
 %,=$+J	JJ $+=--j9 *: Z= Zs#   ?BB/B5BB
B%)ra   r]   r`   r   )r!   r"   r#   r$   r   r   r	   r&   r   r   rG   r3   r6   r
   r)   r;   r?   r'   r   r   r   rM   rM   T   s     	$5!ft$:;;<
$5L#f #
)& 
)UL-/JJKLN
U&L-/JJKLN
r   rM   c                   .    \ rS rSrSrS r\S 5       rSrg)rQ      z9
Event that will be fired before each command execution.
c                     Xl         g r   _connection)r   
connections     r   rG   %AfterConnectionReleasedEvent.__init__   s    %r   c                     U R                   $ r   r   r   s    r   r   'AfterConnectionReleasedEvent.connection       r   r   N)	r!   r"   r#   r$   r%   rG   propertyr   r'   r   r   r   rQ   rQ      s     &    r   rQ   c                       \ rS rSrSrg)r[      r   Nr!   r"   r#   r$   r'   r   r   r   r[   r[          r   r[   c                       \ rS rSrSrSrg)AfterSlotsCacheRefreshEvent   a  
Event fired after NodesManager's slots cache is refreshed, either via a
full re-initialization or a MOVED-driven slot re-mapping. Signal-only;
carries no payload. Listeners typically reconcile per-node bookkeeping
(e.g. ClusterPubSub shard subscriptions).
r   N)r!   r"   r#   r$   r%   r'   r   r   r   r   r      s     	r   r   c                       \ rS rSrSrg) AsyncAfterSlotsCacheRefreshEvent   r   Nr   r   r   r   r   r      r   r   r   c                       \ rS rSrSrSrSrg)
ClientType   )sync)asyncr   N)r!   r"   r#   r$   SYNCASYNCr'   r   r   r   r   r      s    DEr   r   c                       \ rS rSrSr SS\S\S\\   4S jjr	\
S 5       r\
S	\4S
 j5       r\
S	\\S4   4S j5       rSrg)rS      zI
Event that will be fired after pooled connection instances was created.
Nconnection_poolsclient_typecredential_providerc                 (    Xl         X l        X0l        g r   )_connection_pools_client_type_credential_provider)r   r   r   r   s       r   rG   1AfterPooledConnectionsInstantiationEvent.__init__   s     "2'$7!r   c                     U R                   $ r   )r   r   s    r   r   9AfterPooledConnectionsInstantiationEvent.connection_pools   s    %%%r   returnc                     U R                   $ r   r   r   s    r   r   4AfterPooledConnectionsInstantiationEvent.client_type          r   c                     U R                   $ r   r   r   s    r   r   <AfterPooledConnectionsInstantiationEvent.credential_provider       (((r   )r   r   r   r   )r!   r"   r#   r$   r%   r   r   r   r   rG   r   r   r   r
   r   r'   r   r   r   rS   rS      s     =A	88  8 &&89	8 & & !Z ! ! )U+=t+C%D ) )r   rS   c                       \ rS rSrSrS\S\\R                  \	R                  4   4S jr\S 5       r\S\4S j5       r\S\\R                  \	R                  4   4S	 j5       rS
rg)rU      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
r   connection_lockc                 (    Xl         X l        X0l        g r   )r   r   _connection_lock)r   r   r   r   s       r   rG   0AfterSingleConnectionInstantiationEvent.__init__  s     &' /r   c                     U R                   $ r   r   r   s    r   r   2AfterSingleConnectionInstantiationEvent.connection  r   r   r   c                     U R                   $ r   r   r   s    r   r   3AfterSingleConnectionInstantiationEvent.client_type  r   r   c                     U R                   $ r   r   r   s    r   r   7AfterSingleConnectionInstantiationEvent.connection_lock      $$$r   )r   r   r   N)r!   r"   r#   r$   r%   r   r
   r^   r_   rl   rm   rG   r   r   r   r   r'   r   r   r   rU   rU      s    0  0 y<=	0     !Z ! ! %y'D!E % %r   rU   c                       \ rS rSrS\S\\R                  \R                  4   4S jr
\S 5       r\S 5       r\S\4S j5       r\S\\R                  \R                  4   4S	 j5       rS
rg)rW   i  r   r   c                 4    Xl         X l        X0l        X@l        g r   )_pubsub_connection_connection_poolr   r   )r   pubsub_connectionconnection_poolr   r   s        r   rG   0AfterPubSubConnectionInstantiationEvent.__init__  s     #4 /' /r   c                     U R                   $ r   )r   r   s    r   r   9AfterPubSubConnectionInstantiationEvent.pubsub_connection'  s    &&&r   c                     U R                   $ r   )r   r   s    r   r   7AfterPubSubConnectionInstantiationEvent.connection_pool+  r   r   r   c                     U R                   $ r   r   r   s    r   r   3AfterPubSubConnectionInstantiationEvent.client_type/  r   r   c                     U R                   $ r   r   r   s    r   r   7AfterPubSubConnectionInstantiationEvent.connection_lock3  r   r   )r   r   r   r   N)r!   r"   r#   r$   r   r
   r^   r_   rl   rm   rG   r   r   r   r   r   r'   r   r   r   rW   rW     s    
0  	
0
 y<=
0 ' ' % % !Z ! ! %y'D!E % %r   rW   c                   p    \ rS rSrSr SS\S\\   4S jjr\	S\4S j5       r
\	S\\S4   4S	 j5       rS
rg)rY   i8  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nodesr   c                     Xl         X l        g r   )_nodesr   )r   r   r   s      r   rG   ,AfterAsyncClusterInstantiationEvent.__init__@  s    
 $7!r   r   c                     U R                   $ r   )r   r   s    r   r   )AfterAsyncClusterInstantiationEvent.nodesH  s    {{r   c                     U R                   $ r   r   r   s    r   r   7AfterAsyncClusterInstantiationEvent.credential_providerL  r   r   )r   r   r   )r!   r"   r#   r$   r%   dictr   r   rG   r   r   r
   r   r'   r   r   r   rY   rY   8  sk     =A88 &&898 t   )U+=t+C%D ) )r   rY   c                   Z    \ rS rSrSrS\S\4S jr\S\4S j5       r	\S\4S j5       r
S	rg
)OnCommandsFailEventiQ  z<
Event fired whenever a command fails during the execution.
commandsrD   c                     Xl         X l        g r   	_commands
_exception)r   r   rD   s      r   rG   OnCommandsFailEvent.__init__V  s    
 "#r   r   c                     U R                   $ r   )r   r   s    r   r   OnCommandsFailEvent.commands^  s    ~~r   c                     U R                   $ r   )r   r   s    r   rD   OnCommandsFailEvent.exceptionb  s    r   r   N)r!   r"   r#   r$   r%   tuplerJ   rG   r   r   rD   r'   r   r   r   r   r   Q  sT    $$ $ %   9  r   r   c                       \ rS rSrSrg)AsyncOnCommandsFailEventig  r   Nr   r   r   r   r   r   g  r   r   r   c                   &    \ rS rSrSrS\4S jrSrg)rR   ik  z?
Listener that performs re-authentication of given connection.
r   c                 8    UR                   R                  5         g r   r   re_authr   s     r   r   ReAuthConnectionListener.listenp  s      "r   r   N)r!   r"   r#   r$   r%   rQ   r   r'   r   r   r   rR   rR   k  s    #8 #r   rR   c                   &    \ rS rSrSrS\4S jrSrg)r\   it  zE
Async listener that performs re-authentication of given connection.
r   c                 T   #    UR                   R                  5       I S h  vN   g  N7fr   r   r   s     r   r   $AsyncReAuthConnectionListener.listeny  s     &&(((s   (&(r   N)r!   r"   r#   r$   r%   r[   r   r'   r   r   r   r\   r\   t  s    )"C )r   r\   c                   T    \ rS rSrSrS rS\4S jrS rS r	S\
4S	 jrS\
4S
 jrSrg)rT   i}  z
Listener that registers a re-authentication callback for pooled connections.
Required by :class:`StreamingCredentialProvider`.
c                     S U l         g r   _eventr   s    r   rG   +RegisterReAuthForPooledConnections.__init__  	    r   r   c                    [        UR                  [        5      (       a  Xl        UR                  [
        R                  :X  aK  UR                  R                  U R                  5        UR                  R                  U R                  5        g UR                  R                  U R                  5        UR                  R                  U R                  5        g g r   )
isinstancer   r   r   r   r   r   on_next_re_authon_error_raise_on_error_re_auth_async_raise_on_error_asyncr   s     r   r   )RegisterReAuthForPooledConnections.listen  s    e//1LMMK  JOO3))11$--@))2243G3GH))11$2E2EF))2243M3MN Nr   c                 `    U R                   R                   H  nUR                  U5        M     g r   r   r   re_auth_callbackr   tokenpools      r   r   +RegisterReAuthForPooledConnections._re_auth  s$    KK00D!!%( 1r   c                 |   #    U R                   R                   H  nUR                  U5      I S h  vN   M     g  N	7fr   r   r   s      r   r   1RegisterReAuthForPooledConnections._re_auth_async  s0     KK00D''... 1.s   .<:
<errorc                 ,    [        XR                  5      er   rB   r   r   r  s     r   r   2RegisterReAuthForPooledConnections._raise_on_error      UKK00r   c                 4   #    [        XR                  5      e7fr   r  r	  s     r   r   8RegisterReAuthForPooledConnections._raise_on_error_async       UKK00   r   N)r!   r"   r#   r$   r%   rG   rS   r   r   r   rJ   r   r   r'   r   r   r   rT   rT   }  s=    
	OD 	O)/1Y 11 1r   rT   c                   T    \ rS rSrSrS rS\4S jrS rS r	S\
4S	 jrS\
4S
 jrSrg)rV   i  z
Listener that registers a re-authentication callback for single connection.
Required by :class:`StreamingCredentialProvider`.
c                     S U l         g r   r   r   s    r   rG   *RegisterReAuthForSingleConnection.__init__  r   r   r   c                    [        UR                  R                  [        5      (       a  Xl        UR
                  [        R                  :X  a_  UR                  R                  R                  U R                  5        UR                  R                  R                  U R                  5        g UR                  R                  R                  U R                  5        UR                  R                  R                  U R                  5        g g r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   s     r   r   (RegisterReAuthForSingleConnection.listen  s    002M
 
  K  JOO3  44<<T]]K  44==d>R>RS  44<<T=P=PQ  44==..
r   c                 4   U R                   R                     U R                   R                  R                  SUR	                  S5      UR                  5       5        U R                   R                  R                  5         S S S 5        g ! , (       d  f       g = fNAUTHoidr   r   r   send_commandtry_get	get_valueread_responser   r  s     r   r   *RegisterReAuthForSingleConnection._re_auth  sb    [[((KK""//e,eoo.? KK""002	 )((s   A)B		
Bc                   #    U R                   R                   IS h  vN   U R                   R                  R                  SUR	                  S5      UR                  5       5      I S h  vN   U R                   R                  R                  5       I S h  vN   S S S 5      IS h  vN   g  N NC N N! , IS h  vN  (       d  f       g = f7fr  r  r  s     r   r   0RegisterReAuthForSingleConnection._re_auth_async  s     ;;...++((55e,eoo.?   ++((66888	 /.. 9	 /...si   CB+CAB3)B-*+B3B/B3C%B1&C-B3/B31C3C
9B<:C
Cr  c                 ,    [        XR                  5      er   r  r	  s     r   r   1RegisterReAuthForSingleConnection._raise_on_error  r  r   c                 4   #    [        XR                  5      e7fr   r  r	  s     r   r   7RegisterReAuthForSingleConnection._raise_on_error_async  r  r  r   N)r!   r"   r#   r$   r%   rG   rU   r   r   r   rJ   r   r   r'   r   r   r   rV   rV     s;    
C 391Y 11 1r   rV   c                   D    \ rS rSrS rS\4S jrS\4S jrS\	4S jr
S	rg
)rZ   i  c                     S U l         g r   r   r   s    r   rG   +RegisterReAuthForAsyncClusterNodes.__init__  r   r   r   c                     [        UR                  [        5      (       aQ  Xl        UR                  R	                  U R
                  5        UR                  R                  U R                  5        g g r   )r   r   r   r   r   r   r   r   r   s     r   r   )RegisterReAuthForAsyncClusterNodes.listen  sS    e//1LMMK%%--dmm<%%..t/C/CD Nr   r  c                    #    U R                   R                   H3  nU R                   R                  U   R                  U5      I S h  vN   M5     g  N	7fr   )r   r   r   )r   r  keys      r   r   +RegisterReAuthForAsyncClusterNodes._re_auth  s?     ;;$$C++##C(99%@@@ %@s   AAA
Ar  c                 4   #    [        XR                  5      e7fr   r  r	  s     r   r   2RegisterReAuthForAsyncClusterNodes._raise_on_error  r  r  r   N)r!   r"   r#   r$   rG   rY   r   r   r   rJ   r   r'   r   r   r   rZ   rZ     s0    E? EAN A19 1r   rZ   c                   `    \ rS rSrS rS\4S jrS\4S jrS\4S jr	S\
4S	 jrS\
4S
 jrSrg)rX   i  c                 J    S U l         S U l        S U l        S U l        S U l        g r   )r   r   r   r   r   r   s    r   rG    RegisterReAuthForPubSub.__init__  s)     $  $r   r   c                    [        UR                  R                  [        5      (       GaQ  [	        UR                  R                  5       S5      (       Ga&  Xl        UR                  U l        UR                  U l	        UR                  U l        UR                  U l        U R                  [        R                  :X  a_  U R                  R                  R!                  U R"                  5        U R                  R                  R%                  U R&                  5        g U R                  R                  R!                  U R(                  5        U R                  R                  R%                  U R*                  5        g g g )N   )r   r   r   r   r   get_protocolr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   s     r   r   RegisterReAuthForPubSub.listen  s   ##779T
 
$U%<%<%I%I%KQOOK$66D$)$9$9D! % 1 1D$)$9$9D!  JOO3  44<<T]]K  44==d>R>RS  44<<T=P=PQ  44==.. P
r   r  c                 .   U R                      U R                  R                  SUR                  S5      UR	                  5       5        U R                  R                  5         S S S 5        U R                  R                  U5        g ! , (       d  f       N*= fr  r   r   r  r  r  r  r   r   r  s     r   r    RegisterReAuthForPubSub._re_auth  sn    ""))e,eoo.? **,	 # 	..u5 #"s   AB
Bc                   #    U R                    IS h  vN   U R                  R                  SUR                  S5      UR	                  5       5      I S h  vN   U R                  R                  5       I S h  vN   S S S 5      IS h  vN   U R                  R                  U5      I S h  vN   g  N N\ N< N.! , IS h  vN  (       d  f       NC= f N'7fr  r8  r  s     r   r   &RegisterReAuthForPubSub._re_auth_async  s     (((""//e,eoo.?   ""00222	 )( ##44U;;; ) 3	 )((( 	<st   CB0C>B8B2!B87B48B8<CB6"C*C+C2B84B86C8C>C?CCr  c                 ,    [        XR                  5      er   r  r	  s     r   r   'RegisterReAuthForPubSub._raise_on_error  r  r   c                 4   #    [        XR                  5      e7fr   r  r	  s     r   r   -RegisterReAuthForPubSub._raise_on_error_async  r  r  )r   r   r   r   r   N)r!   r"   r#   r$   rG   rW   r   r   r   r   rJ   r   r   r'   r   r   r   rX   rX     sD    C &6n 6<. <1Y 11 1r   rX   c                   :    \ rS rSrSr\" SSS9S\4S j5       rSrg	)
&InitializeConnectionCountObservabilityi  z;
Listener that initializes connection count observability.
z{Connection count is now tracked via record_connection_count(). This functionality will be removed in the next major versionz7.4.0)reasonversionr   c                 B    [        5         [        UR                  5        g r   )r   r   r   r   s     r   r   -InitializeConnectionCountObservability.listen  s     	 	((>(>?r   r   N)	r!   r"   r#   r$   r%   r   rS   r   r'   r   r   r   rA  rA    s4     G
@D @
@r   rA  )0rl   r^   abcr   r   enumr   typingr   r   r   r	   r
   redis.auth.tokenr   redis.credentialsr   r   redis.observability.recorderr   r   redis.utilsr   r   r   r)   r0   rJ   rB   rM   rQ   r[   r   r   r   rS   rU   rW   rY   r   r   rR   r\   rT   rV   rZ   rX   rA  r   r   r   <module>rM     sB     #  4 4 + M DS # "s "J$Y $c. cL
  
 	(D 		 		'B 	 
) )8% %>% %<) )2 ,	2 	#5 #)$? ) 1)?  1F*1(> *1Z1)? 1$114 11h@-C @r   