
    &i:!                         d dl mZ d dlmZ d dlmZmZmZmZm	Z	m
Z
mZmZmZmZmZ eZ G d de          Z G d de          Z ede	          Z G d
 d          ZdS )    )OrderedDict)Lock)AnyCallableDictListMappingOptionaloverloadSetTupleTypeVarUnionc                       e Zd ZdZdS )PyeeExceptionz@An exception internal to pyee. Deprecated in favor of PyeeError.N__name__
__module____qualname____doc__     I/var/www/html/auto_sub_bot/venv/lib/python3.11/site-packages/pyee/base.pyr   r      s        JJJJr   r   c                       e Zd ZdZdS )	PyeeErrorzAn error internal to pyee.Nr   r   r   r   r   r      s        $$$$r   r   Handler)boundc                      e Zd ZdZdeddfdZdedeeef         fdZ	dedeeef         ddfdZ
eded	edeegef         fd
            Zeded	ededefd            Z	 d!ded	edee         deeeegef         f         fdZded	edeegef         fdZded	ededefdZded	ededefdZdededeedf         deeef         ddf
dZdedee         fdZded	ededdfdZded	edeedf         deeef         def
dZded	edededef
dZ	 d!ded	edee         defdZded	ededdfdZded	ededdfdZd!ded	ee         ddfdZ ded	ede!e         fd Z"dS )"EventEmittera  The base event emitter class. All other event emitters inherit from
    this class.

    Most events are registered with an emitter via the `on` and `once`
    methods, and fired with the `emit` method. However, pyee event emitters
    have two *special* events:

    - `new_listener`: Fires whenever a new listener is created. Listeners for
      this event do not fire upon their own creation.

    - `error`: When emitted raises an Exception by default, behavior can be
      overridden by attaching callback to the event.

      For example:

    ```py
    @ee.on('error')
    def on_error(message):
        logging.err(message)

    ee.emit('error', Exception('something blew up'))
    ```

    All callbacks are handled in a synchronous, blocking manner. As in node.js,
    raised exceptions are not automatically handled for you---you must catch
    your own exceptions, and treat them accordingly.
    selfreturnNc                 R    t                      | _        t                      | _        d S N)dict_eventsr   _lockr    s    r   __init__zEventEmitter.__init__>   s#     FF 	  66


r   c                 >    | j                                         }|d= |S )Nr&   )__dict__copyr    states     r   __getstate__zEventEmitter.__getstate__E   s!    ""$$'Nr   r-   c                 `    | j                             |           t                      | _        d S r#   )r*   updater   r&   r,   s     r   __setstate__zEventEmitter.__setstate__J   s'    U###VV


r   eventc                     d S r#   r   r    r2   s     r   onzEventEmitter.onN   s    DGCr   fc                     d S r#   r   r    r2   r6   s      r   r5   zEventEmitter.onP   s    ;>3r   c                 \    ||                      |          S |                     ||          S )au  Registers the function `f` to the event name `event`, if provided.

        If `f` isn't provided, this method calls `EventEmitter#listens_to`, and
        otherwise calls `EventEmitter#add_listener`. In other words, you may either
        use it as a decorator:

        ```py
        @ee.on('data')
        def data_handler(data):
            print(data)
        ```

        Or directly:

        ```py
        ee.on('data', data_handler)
        ```

        In both the decorated and undecorated forms, the event handler is
        returned. The upshot of this is that you can call decorated handlers
        directly, as well as use them in remove_listener calls.

        Note that this method's return type is a union type. If you are using
        mypy or pyright, you will probably want to use either
        `EventEmitter#listens_to` or `EventEmitter#add_listener`.
        )
listens_toadd_listenerr8   s      r   r5   zEventEmitter.onS   s1    : 9??5)))$$UA...r   c                 4     dt           dt           f fd}|S )aV  Returns a decorator which will register the decorated function to
        the event name `event`:

        ```py
        @ee.listens_to("event")
        def data_handler(data):
            print(data)
        ```

        By only supporting the decorator use case, this method has improved
        type safety over `EventEmitter#on`.
        r6   r!   c                 6                         | |            | S r#   _add_event_handler)r6   r2   r    s    r   r5   z#EventEmitter.listens_to.<locals>.on   s     ##E1a000Hr   )r   )r    r2   r5   s   `` r   r:   zEventEmitter.listens_tou   s<    	' 	g 	 	 	 	 	 	 	 	r   c                 4    |                      |||           |S )a:  Register the function `f` to the event name `event`:

        ```
        def data_handler(data):
            print(data)

        h = ee.add_listener("event", data_handler)
        ```

        By not supporting the decorator use case, this method has improved
        type safety over `EventEmitter#on`.
        r>   r8   s      r   r;   zEventEmitter.add_listener   s!     	q!,,,r   kvc                     |                      d||           | j        5  || j        vrt                      | j        |<   || j        |         |<   d d d            d S # 1 swxY w Y   d S )Nnew_listener)emitr&   r%   r   )r    r2   rA   rB   s       r   r?   zEventEmitter._add_event_handler   s    		.%+++ Z 	' 	'DL((&1mmU#%&DL"	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	's   0AA #A args.kwargsc                      ||i | d S r#   r   )r    r6   rF   rG   s       r   	_emit_runzEventEmitter._emit_run   s     	
46r   c                 N    t          | j                                                  S )z6Get a set of events that this emitter is listening to.)setr%   keysr'   s    r   event_nameszEventEmitter.event_names   s    4<$$&&'''r   errorc                 d    |dk    r)t          |t                    r|t          d|           d S )NrN   z%Uncaught, unspecified 'error' event: )
isinstance	Exceptionr   )r    r2   rN   s      r   _emit_handle_potential_errorz)EventEmitter._emit_handle_potential_error   sD    G%++ Q O O OPPP	 r   c                    d}| j         5  t          | j                            |t	                                                                          }d d d            n# 1 swxY w Y   |D ]}|                     |||           d}|S )NFT)r&   listr%   getr   valuesrI   )r    r2   rF   rG   handledfuncsr6   s          r   _call_handlerszEventEmitter._call_handlers   s     Z 	J 	J))%??FFHHIIE	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	 	ANN1dF+++GGs   AAA!$A!c                 x    |                      |||          }|s |                     ||r|d         nd           |S )ac  Emit `event`, passing `*args` and `**kwargs` to each attached
        function. Returns `True` if any functions are attached to `event`;
        otherwise returns `False`.

        Example:

        ```py
        ee.emit('data', '00101001')
        ```

        Assuming `data` is an attached function, this will call
        `data('00101001')'`.
        r   N)rY   rR   )r    r2   rF   rG   rW   s        r   rE   zEventEmitter.emit   sL    & %%eT6:: 	P--e5NT!WW$OOOr   c                 N     dt           dt           f fd}||S  ||          S )zkThe same as `ee.on`, except that the listener is automatically
        removed after being called.
        r6   r!   c                 r     dt           dt           dt           f fd}                     |            S )NrF   rG   r!   c                      j         5  j        v r&j                 v r                               n	 d d d            d S 	 d d d            n# 1 swxY w Y    | i |S r#   )r&   r%   _remove_listener)rF   rG   r2   r6   r    s     r   gz.EventEmitter.once.<locals>._wrapper.<locals>.g   s     Z $ $ ,,dl56I1I1I--eQ7777#$ $ $ $ $ $ $ $ 8	$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ q$)&)))s   1AAA)r   r?   )r6   r_   r2   r    s   ` r   _wrapperz#EventEmitter.once.<locals>._wrapper   se    *** * * * * * * * * ##E1a000Hr   )r   )r    r2   r6   r`   s   ``  r   oncezEventEmitter.once   sO    	 	X 	 	 	 	 	 	 	& 9O8A;;r   c                     | j         |                             |           t          | j         |                   s
| j         |= dS dS )zNaked unprotected removal.N)r%   poplenr8   s      r   r^   zEventEmitter._remove_listener  sN    U"""4<&'' 	$U###	$ 	$r   c                 r    | j         5  |                     ||           ddd           dS # 1 swxY w Y   dS )z&Removes the function `f` from `event`.N)r&   r^   r8   s      r   remove_listenerzEventEmitter.remove_listener
  s    Z 	, 	,!!%+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,s   ,00c                     | j         5  |t                      | j        |<   nt                      | _        ddd           dS # 1 swxY w Y   dS )ztRemove all listeners attached to `event`.
        If `event` is `None`, remove all listeners on all events.
        N)r&   r   r%   r$   r4   s     r   remove_all_listenersz!EventEmitter.remove_all_listeners  s     Z 	& 	& &1mmU###vv		& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&s   -AA	Ac                     t          | j                            |t                                                                          S )z:Returns a list of all listeners registered to the `event`.)rT   r%   rU   r   rL   r4   s     r   	listenerszEventEmitter.listeners  s2    DL$$UKMM::??AABBBr   r#   )#r   r   r   r   Selfr(   r	   strr   r.   r1   r   r   r   r5   r
   r   r:   r;   r?   r   r   rI   r   rM   rR   boolrY   rE   ra   r^   rf   rh   r   rj   r   r   r   r   r   !   s=        8"t " " " " "4 GCH$5    
4 S(9 d     GGcGhy'/A&BGGG XG>>c>g>'>>> X> 8< /  / / /#+G#4 /	w'G!344	5 /  /  /  /D c hy'7I.J    (4   G     ' 'c 'h '8 ' ' ' ' CHo S#X	
 
   ($ (3s8 ( ( ( (Q4 Q QC QD Q Q Q Q CHo S#X	
 
      	
 
   : !%  H 
	   B$t $C $H $ $ $ $ $,d ,3 ,8 , , , , ,
& &4 & & & & & &C CS CT(^ C C C C C Cr   r   N)collectionsr   	threadingr   typingr   r   r   r   r	   r
   r   r   r   r   r   rk   rQ   r   r   r   r   r   r   r   <module>rq      sl   $ # # # # #                                K K K K KI K K K% % % % % % % % ')8
,
,
,zC zC zC zC zC zC zC zC zC zCr   