
    [h+                    H   U d Z ddlmZ ddlZddlZddlZddlmZ ddlmZ ddlmZ ddlm	Z	 ddlm
Z
 dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlZddlmZ ddlmZ ej        rddlmZ ddlmZ edef         Zeeeeef         f         Zeeeef         Z edd          Z G d d          Z e
d         Z! ej"        e#          Z$de%d<   	 e
def         Z& ej"        e#          Z'de%d<   	 d4d$Z(d5d*Z)d6d+Z*d7d0Z+d8d1Z, G d2 d3ee                   Z-dS )9aJ  Provides managed registration services on behalf of :func:`.listen`
arguments.

By "managed registration", we mean that event listening functions and
other objects can be added to various collections in such a way that their
membership in all those collections can be revoked at once, based on
an equivalent :class:`._EventKey`.

    )annotationsN)Any)Callable)cast)Deque)Dict)Generic)Iterable)Optional)Tuple)TypeVar)Union   )exc)util   )RefCollection)
dispatcher._ETEventTarget)boundc                  "    e Zd ZU dZdZded<   dS )r   zrepresents an event target, that is, something we can listen on
    either with that target as a class or as an instance.

    Examples include:  Connection, Mapper, Table, Session,
    InstrumentedAttribute, Engine, Pool, Dialect.

     zdispatcher[Any]dispatchN)__name__
__module____qualname____doc__	__slots____annotations__r       h/var/www/api.easyaligner.net/htdocs/venv_linux/lib/python3.11/site-packages/sqlalchemy/event/registry.pyr   r   2   s/           Ir!   )zweakref.ref[RefCollection[Any]]weakref.ref[_ListenerFnType]z6Dict[_EventKeyTupleType, _RefCollectionToListenerType]_key_to_collectionr#   z>Dict[weakref.ref[RefCollection[Any]], _ListenerToEventKeyType]_collection_to_keyrefweakref.ref[Any]returnNonec                :   t           r	| t           vrd S t          d|           } t                               |           }|                                D ]I}|t          v r>t          |         }|                    |            |st                              |           Jd S )Nz'weakref.ref[RefCollection[EventTarget]])r%   r   popvaluesr$   )r&   listener_to_keykeydispatch_regs       r"   _collection_gcedr0   g   s     ,>!>!>
8#
>
>C(,,S11O%%'' , ,$$$-c2LS!!! ,"&&s+++, ,r!   	event_key_EventKey[_ET]ownerRefCollection[_ET]boolc                    | j         }t          |         }|j        }t          j        | j                  }||v rdS |||<   t
          |         }|||<   dS )NFT)_keyr$   r&   weakref
_listen_fnr%   )r1   r3   r.   r/   	owner_ref
listen_refr-   s          r"   _stored_in_collectionr<   x   sa     .C%c*L	IY122JL  u(L(3O"%OJ4r!   c                
   | j         }t          |         }t          j        | j                  }|j        }|                    |d            |st          |= |t          v r%t          |         }|                    |d            d S d S N)r7   r$   r8   r&   r9   r+   r%   )r1   r3   r.   r/   r;   r:   r-   s          r"   _removed_from_collectionr?      s     .C%c*LY122J	IY%%% $s#&&&,Y7
 	J----- '&r!   newowneroldownerelementsIterable[_ListenerFnType]c                <   |sd S |j         }| j         }t          |         }t          |         }|D ]l}t          j         |          }	 ||         }	n# t          $ r Y ,w xY w	 t          |	         }
n# t          $ r Y Kw xY w||
v r|
|         |k    sJ n||
|<   |	||<   md S r>   )r&   r%   r8   KeyErrorr$   )r@   rA   rB   oldowner_refnewowner_refold_listener_to_keynew_listener_to_key	listen_fnr;   r.   r/   s              r"   _stored_in_collection_multirK      s    
  <L<L,\:,\: . .	[++
	%j1CC 	 	 	 H	
	-c2LL 	 	 	H	 <''-;;;;;)3L&*-J'''. .s$   A
AA A..
A;:A;c                    |sd S | j         }t          |         }|D ]K}t          j         |          }||         }t          |         }|                    |d            |st          |= Ld S r>   )r&   r%   r8   r$   r+   )r3   rB   r:   r-   rJ   r;   r.   r/   s           r"   _clearrM      s      	I(3O ( (	[++
j))#.D))) 	("3'( (r!   c                      e Zd ZU dZdZded<   ded<   ded<   d	ed
<   ded<   ded<   	 d/d0dZed1d            Zd2dZ	d3dZ
d4dZd5dZd6dZ	 	 	 	 	 d7d8d&Zed9d'            Zd:d,Zd;d-Zd:d.ZdS )<	_EventKeyz$Represent :func:`.listen` arguments.)target
identifierfnfn_keyfn_wrapdispatch_targetr   rP   strrQ   _ListenerFnTyperR   _ListenerFnKeyTyperS   r   rU   Optional[_ListenerFnType]_fn_wrapNc                   || _         || _        || _        t          |t          j                  r.t          |j                  t          |j                  f| _	        nt          |          | _	        || _
        || _        d S r>   )rP   rQ   rR   
isinstancetypes
MethodTypeid__func____self__rS   rT   rU   )selfrP   rQ   rR   rU   rZ   s         r"   __init__z_EventKey.__init__   sn     $b%*++ 	!R[//2bk??:DKKR&&DK.r!   r(   _EventKeyTupleTypec                D    t          | j                  | j        | j        fS r>   )r_   rP   rQ   rS   rb   s    r"   r7   z_EventKey._key   s    4;$+>>r!   rT   r2   c                h    || j         u r| S t          | j        | j        | j        | j        |          S N)rZ   )r9   rO   rP   rQ   rR   rU   )rb   rT   s     r"   with_wrapperz_EventKey.with_wrapper  sC    do%%K$    r!   c                h    || j         u r| S t          | j        | j        | j        || j                  S rh   )rU   rO   rP   rQ   rR   rT   )rb   rU   s     r"   with_dispatch_targetz_EventKey.with_dispatch_target  sC    d222K   r!   argskwr)   c                x   |                     dd          }|                     dd          }|                     dd          }| j        | j        | j        }}}t	          |j        |          }	|	                    ||          }
|                     |
          } t	          | j        j        j        | j                  }t          |d          r|
                                 |s|r; |                     t          j        | j        |                    j        |i | d S  | j        j        j        | g|R i | d S )NonceF_once_unless_exceptionnamed_sa_warn)retry_on_exception)r+   rU   rQ   r9   getattrr   _adjust_fn_specri   _eventshasattrrr   r   	only_oncelisten_listen)rb   rl   rm   ro   once_unless_exceptionrq   rP   rQ   rR   dispatch_collectionadjusted_fnstub_functions               r"   ry   z_EventKey.listen  sy   vvfe$$ "'? G Gw&&  OO 
 &fozBB)99"eDD  -- )14?
 
 =*-- 	%""$$$ 	E( 	EDO8M    d	" !	" " " " " 2D )1$DDDDDDDDDr!   c           	     h   | j         }|t          vr-t          j        d| j        d| j        d| j        d          t                              |          }|                                D ]E\  }} |            } |            }|*|(|	                    | 
                    |                     Fd S )NzNo listeners found for event z /  )r7   r$   r   InvalidRequestErrorrP   rQ   rR   r+   itemsremoveri   )rb   r.   r/   collection_reflistener_ref
collectionlistener_fns          r"   r   z_EventKey.remove<  s    i((());;;:  
 *--c22,8,>,>,@,@ 	B 	B(NL'))J&,..K%+*A!!$"3"3K"@"@AAA		B 	Br!   r5   c                    | j         t          v S )z6Return True if this event key is registered to listen.)r7   r$   rf   s    r"   containsz_EventKey.containsM  s    y...r!   F	propagateinsertrq   retvalOptional[bool]asyncioc                   | j         | j        }}t          |j        |          }|                    |j                  }	|r|	                                 |r|	                    | |           d S |	                    | |           d S r>   )rU   rQ   rt   r   
for_modify_set_asyncior   append)
rb   r   r   rq   r   r   rP   rQ   r|   r   s
             r"   base_listenz_EventKey.base_listenQ  s     "14?
%fozBB(33FODD
 	&##%%% 	/dI.....dI.....r!   c                    | j         p| j        S r>   )rT   rR   rf   s    r"   r9   z_EventKey._listen_fnf  s    |&tw&r!   r3   r4   list_Deque[_ListenerFnType]c                ^    t          | |          r|                    | j                   dS dS NTF)r<   r   r9   rb   r3   r   s      r"   append_to_listz_EventKey.append_to_listj  s4    
 !u-- 	LL)))45r!   c                Z    t          | |           |                    | j                   d S r>   )r?   r   r9   r   s      r"   remove_from_listz_EventKey.remove_from_listu  s.    
 	!u---T_%%%%%r!   c                ^    t          | |          r|                    | j                   dS dS r   )r<   
appendleftr9   r   s      r"   prepend_to_listz_EventKey.prepend_to_list}  s6    
 !u-- 	T_---45r!   r>   )
rP   r   rQ   rV   rR   rW   rU   r   rZ   rY   )r(   rd   )rT   rW   r(   r2   )rU   r   r(   r2   )rl   r   rm   r   r(   r)   )r(   r)   )r(   r5   )FFFNF)r   r5   r   r5   rq   r5   r   r   r   r5   r(   r)   )r(   rW   )r3   r4   r   r   r(   r5   )r3   r4   r   r   r(   r)   )r   r   r   r   r   r    rc   propertyr7   ri   rk   ry   r   r   r   r9   r   r   r   r   r!   r"   rO   rO      s        ..I KKKOOO'''' /3/ / / / /$ ? ? ? X?
 
 
 

 
 
 
E E E E@B B B B"/ / / /  !%/ / / / /* ' ' ' X'	 	 	 	& & & &	 	 	 	 	 	r!   rO   )r&   r'   r(   r)   )r1   r2   r3   r4   r(   r5   )r1   r2   r3   r4   r(   r)   )r@   r4   rA   r4   rB   rC   r(   r)   )r3   r4   rB   rC   r(   r)   ).r   
__future__r   collectionsr]   typingr   r   r   r   r   r	   r
   r   r   r   r   r8    r   r   TYPE_CHECKINGattrr   baser   rW   intrX   rV   rd   r   r   _RefCollectionToListenerTypedefaultdictdictr$   r    _ListenerToEventKeyTyper%   r0   r<   r?   rK   rM   rO   r   r!   r"   <module>r      s     # " " " " "                                                                                     	 !######      38$3c3h/0 3%778  ge=)))         $$   KD!!     	 "  KD!!  " " " "	, , , ,"   *. . . ..!. !. !. !.H( ( ( (&k k k k k k k k k kr!   