Ë
    v¹1h:!  ã                   ó¨   — 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y)é    )ÚOrderedDict)ÚLock)ÚAnyÚCallableÚDictÚListÚMappingÚOptionalÚoverloadÚSetÚTupleÚTypeVarÚUnionc                   ó   — e Zd ZdZy)ÚPyeeExceptionz@An exception internal to pyee. Deprecated in favor of PyeeError.N©Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    úG/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/pyee/base.pyr   r      s   „ ÚJr   r   c                   ó   — e Zd ZdZy)Ú	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"y)"Ú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                 ó@   — t        «       | _        t        «       | _        y ©N)ÚdictÚ_eventsr   Ú_lock©r    s    r   Ú__init__zEventEmitter.__init__>   s   € ô ‹Fð 	Œô  ›6ˆ�
r   c                 ó@   — | j                   j                  «       }|d= |S )Nr&   )Ú__dict__Úcopy©r    Ústates     r   Ú__getstate__zEventEmitter.__getstate__E   s    € Ø—‘×"Ñ"Ó$ˆØ�'ˆNØˆr   r-   c                 óX   — | j                   j                  |«       t        «       | _        y r#   )r*   Úupdater   r&   r,   s     r   Ú__setstate__zEventEmitter.__setstate__J   s   € Ø�‰×Ñ˜UÔ#Ü“Vˆ�
r   Úeventc                  ó   — y r#   r   ©r    r2   s     r   ÚonzEventEmitter.onN   s   € ØDGr   Úfc                  ó   — y r#   r   ©r    r2   r6   s      r   r5   zEventEmitter.onP   s   € Ø;>r   c                 óL   — |€| j                  |«      S | j                  ||«      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   s+   € ð: ˆ9Ø—?‘? 5Ó)Ð)à×$Ñ$ U¨AÓ.Ð.r   c                 ó0   ‡ ‡— 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                 ó.   •— ‰j                  ‰| | «       | S r#   ©Ú_add_event_handler)r6   r2   r    s    €€r   r5   z#EventEmitter.listens_to.<locals>.onƒ   s   ø€ Ø×#Ñ# E¨1¨aÔ0ØˆHr   )r   )r    r2   r5   s   `` r   r:   zEventEmitter.listens_tou   s   ù€ ð	”'ð 	œgö 	ð ˆ	r   c                 ó,   — | j                  |||«       |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                 óÚ   — | j                  d||«       | j                  5  || j                  vrt        «       | j                  |<   || j                  |   |<   d d d «       y # 1 sw Y   y xY w)NÚnew_listener)Úemitr&   r%   r   )r    r2   rA   rB   s       r   r?   zEventEmitter._add_event_handler™   s_   € à�	‰	�. %¨Ô+ð �Z‰Zñ 	'Ø˜DŸL™LÑ(Ü&1£m�—‘˜UÑ#Ø%&ˆD�L‰L˜Ñ Ñ"÷	'÷ 	'ñ 	'ús    8A!Á!A*Úargs.Úkwargsc                 ó   —  ||i |¤Ž y r#   r   )r    r6   rF   rG   s       r   Ú	_emit_runzEventEmitter._emit_run¦   s   € ñ 	
ˆ4Ð�6Ór   c                 óH   — t        | j                  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                 óN   — |dk(  r t        |t        «      r|‚t        d|› �«      ‚y )NrN   z%Uncaught, unspecified 'error' event: )Ú
isinstanceÚ	Exceptionr   )r    r2   rN   s      r   Ú_emit_handle_potential_errorz)EventEmitter._emit_handle_potential_error²   s1   € Ø�GÒÜ˜%¤Ô+Ø�äÐ"GÈÀwÐ OÓPÐPð	 r   c                 óú   — d}| j                   5  t        | j                  j                  |t	        «       «      j                  «       «      }d d d «       D ]  }| j                  |||«       d}Œ |S # 1 sw Y   Œ'xY w)NFT)r&   Úlistr%   Úgetr   ÚvaluesrI   )r    r2   rF   rG   ÚhandledÚfuncsr6   s          r   Ú_call_handlerszEventEmitter._call_handlers¹   sz   € ð ˆà�Z‰Zñ 	JÜ˜Ÿ™×)Ñ)¨%´³Ó?×FÑFÓHÓIˆE÷	Jàò 	ˆAØ�N‰N˜1˜d FÔ+Ø‰Gð	ð ˆ÷	Jð 	Jús   �<A1Á1A:c                 ób   — | j                  |||«      }|s| j                  ||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É   s8   € ð& ×%Ñ% e¨T°6Ó:ˆáØ×-Ñ-¨eÁ°T¸!²WÈ$ÔOàˆr   c                 óD   ‡ ‡— 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                 ód   •‡ — dt         dt         dt         fˆˆ ˆfd„}‰j                  ‰‰ |«       ‰ S )NrF   rG   r!   c                  óÐ   •— ‰j                   5  ‰‰j                  v r$‰‰j                  ‰   v r‰j                  ‰‰«       n
	 d d d «       y 	 d d d «        ‰| i |¤ŽS # 1 sw Y   ŒxY wr#   )r&   r%   Ú_remove_listener)rF   rG   r2   r6   r    s     €€€r   Úgz.EventEmitter.once.<locals>._wrapper.<locals>.gí   ss   ø€ ð —Z‘Zñ $ð  §¡Ñ,°°d·l±lÀ5Ñ6IÑ1IØ×-Ñ-¨e°QÕ7à#÷$ð $ð 8÷	$ñ ˜$Ð) &Ñ)Ð)÷$ð $ús   Ž4AÁA%)r   r?   )r6   r_   r2   r    s   ` €€r   Ú_wrapperz#EventEmitter.once.<locals>._wrapperì   s;   ù€ ð*Üð*äð*ô ÷*ð ×#Ñ# E¨1¨aÔ0ØˆHr   )r   )r    r2   r6   r`   s   ``  r   ÚoncezEventEmitter.onceã   s,   ù€ ð	œð 	¤Xö 	ð& ˆ9ØˆOá˜A“;Ðr   c                 óŒ   — | j                   |   j                  |«       t        | j                   |   «      s| j                   |= yy)zNaked unprotected removal.N)r%   ÚpopÚlenr8   s      r   r^   zEventEmitter._remove_listener  s;   € à�‰�UÑ×Ñ Ô"Ü�4—<‘< Ñ&Ô'Ø—‘˜UÑ#ð (r   c                 ój   — | j                   5  | j                  ||«       ddd«       y# 1 sw Y   yxY w)z&Removes the function `f` from `event`.N)r&   r^   r8   s      r   Úremove_listenerzEventEmitter.remove_listener
  s.   € à�Z‰Zñ 	,Ø×!Ñ! %¨Ô+÷	,÷ 	,ñ 	,ús   �)©2c                 ó˜   — | j                   5  |�t        «       | j                  |<   nt        «       | _        ddd«       y# 1 sw Y   yxY w)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‰Zñ 	&ØÐ Ü&1£m�—‘˜UÒ#ä#›v�”÷		&÷ 	&ñ 	&ús   �*A Á A	c                 óx   — t        | j                  j                  |t        «       «      j	                  «       «      S )z:Returns a list of all listeners registered to the `event`.)rT   r%   rU   r   rL   r4   s     r   Ú	listenerszEventEmitter.listeners  s)   € ä�D—L‘L×$Ñ$ U¬K«MÓ:×?Ñ?ÓAÓ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ð  G¨C°¨HÑ$5ó ð
˜4ð ¨°°S°Ñ(9ð ¸dó ð ØG�ÐG˜cÐG h°¨y¸'Ð/AÑ&BÒGó ØGØØ>�Ð>˜cÐ> gÐ>°'Ò>ó Ø>ð 8<ñ /Øð /Øð /Ø#+¨GÑ#4ð /à	ˆw˜ ' ¨GÐ!3Ñ4Ð4Ñ	5ó /ðD˜ð  cð ¨h¸°yÀ'Ð7IÑ.Jó ð(˜4ð ¨ð °ð ¸Gó ð ' ð '¨cð '°hð 'À8ó 'ðØðàðð �C˜�H‰oðð �S˜#�X‘ð	ð
 
óð(˜$ð ( 3 s¡8ó (ðQ¨4ð Q¸ð QÀCð QÈDó QðØðàðð �C˜�H‰oðð �S˜#�X‘ð	ð
 
óð Øðàðð ðð ð	ð
 
óð: !%ñØðàðð �HÑðð 
ó	ðB$˜tð $¨Cð $°Hð $Àó $ð,˜dð ,¨3ð ,°8ð ,Àó ,ñ
& 4ð &°¸±ð &Èó &ðC˜ð C Sð C¨T°(©^ô 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      s^   ðõ $Ý ÷÷ ÷ ñ ð €ôK�Iô Kô%�ô %ñ �) 8Ô
,€÷zCò zCr   