§
    HºiH  ã                   ól   — d dl mZ d dlmZ dgZ G d„ d¦  «        Z e¦   «         Z G d„ d¦  «        ZdS )é    )Úhubs)Ú	greenletsÚEventc                   ó   — e Zd Zd„ ZdS )ÚNOT_USEDc                 ó   — dS )Nr   © ©Úselfs    úS/home/mmwave/public_html/mmwave/venv/lib/python3.11/site-packages/eventlet/event.pyÚ__repr__zNOT_USED.__repr__   s   € Øˆzó    N)Ú__name__Ú
__module__Ú__qualname__r   r	   r   r   r   r      s#   € € € € € ðð ð ð ð r   r   c                   ór   — e Zd ZdZdZdZd„ Zd„ Zd„ Zd„ Z	d„ Z
d„ Zdd	„Zdd
„Zdd„Zdd„Zdd„Zd„ Zd„ ZdS )r   aè  An abstraction where an arbitrary number of coroutines
    can wait for one event from another.

    Events are similar to a Queue that can only hold one item, but differ
    in two important ways:

    1. calling :meth:`send` never unschedules the current greenthread
    2. :meth:`send` can only be called once; create a new event to send again.

    They are good for communicating results between coroutines, and
    are the basis for how
    :meth:`GreenThread.wait() <eventlet.greenthread.GreenThread.wait>`
    is implemented.

    >>> from eventlet import event
    >>> import eventlet
    >>> evt = event.Event()
    >>> def baz(b):
    ...     evt.send(b + 1)
    ...
    >>> _ = eventlet.spawn_n(baz, 3)
    >>> evt.wait()
    4
    Nc                 óT   — t          ¦   «         | _        |                      ¦   «          d S ©N)ÚsetÚ_waitersÚresetr
   s    r   Ú__init__zEvent.__init__+   s   € Ý™œˆŒØ�
Š
‰Œˆˆˆr   c                 óš   — | j         j        t          t          | ¦  «        ¦  «        | j        | j        t          | j        ¦  «        f}d|z  S )Nz)<%s at %s result=%r _exc=%r _waiters[%d]>)Ú	__class__r   ÚhexÚidÚ_resultÚ_excÚlenr   )r   Úparamss     r   Ú__str__zEvent.__str__/   s?   € Ø”.Ô)­3­r°$©x¬x©=¬=Ø”, ¤	­3¨t¬}Ñ+=Ô+=ð?ˆà:¸VÑCÐCr   c                 ó\   — | j         t          us
J d¦   «         ‚t          | _         d | _        d S )Nz#Trying to re-reset() a fresh event.©r   r   r   r
   s    r   r   zEvent.reset4   s2   € ð Œ|¥8Ð+Ð+Ð+Ð-RÑ+Ô+Ð+ÝˆŒØˆŒ	ˆ	ˆ	r   c                 ó   — | j         t          uS )a]   Return true if the :meth:`wait` call will return immediately.
        Used to avoid waiting for things that might take a while to time out.
        For example, you can put a bunch of events into a list, and then visit
        them all repeatedly, calling :meth:`ready` until one returns ``True``,
        and then you can :meth:`wait` on that one.)r   r   r
   s    r   ÚreadyzEvent.ready<   s   € ð Œ|¥8Ð+Ð+r   c                 ó   — | j         d uS r   )r   r
   s    r   Úhas_exceptionzEvent.has_exceptionD   s   € ØŒy Ð$Ð$r   c                 ó0   — | j         t          uo| j        d u S r   r#   r
   s    r   Ú
has_resultzEvent.has_resultG   s   € ØŒ|¥8Ð+ÐA°´	¸TÐ0AÐAr   c                 óV   — |                       ¦   «         r|                      ¦   «         S |S r   )r%   Úwait©r   Únotreadys     r   Úpollz
Event.pollJ   s%   € Ø�:Š:‰<Œ<ð 	Ø—9’9‘;”;ÐØˆr   c                 óV   — |                       ¦   «         r|                      ¦   «         S |S r   )r'   r+   r,   s     r   Úpoll_exceptionzEvent.poll_exceptionT   s)   € Ø×ÒÑÔð 	Ø—9’9‘;”;ÐØˆr   c                 óV   — |                       ¦   «         r|                      ¦   «         S |S r   )r)   r+   r,   s     r   Úpoll_resultzEvent.poll_resultY   s'   € Ø�?Š?ÑÔð 	Ø—9’9‘;”;ÐØˆr   c                 óè  — t          j        ¦   «         }| j        t          u rµt	          j        ¦   «         }| j                             |¦  «         d}|�|                     || j	        dd|¦  «        }	 | 
                    ¦   «         }|�|                     ¦   «          || j                             |¦  «         S # | j                             |¦  «         w xY w| j        � |j        | j        Ž  | j        S )aÎ  Wait until another coroutine calls :meth:`send`.
        Returns the value the other coroutine passed to :meth:`send`.

        >>> import eventlet
        >>> evt = eventlet.Event()
        >>> def wait_on():
        ...    retval = evt.wait()
        ...    print("waited for {0}".format(retval))
        >>> _ = eventlet.spawn(wait_on)
        >>> evt.send('result')
        >>> eventlet.sleep(0)
        waited for result

        Returns immediately if the event has already occurred.

        >>> evt.wait()
        'result'

        When the timeout argument is present and not None, it should be a floating point number
        specifying a timeout for the operation in seconds (or fractions thereof).
        N)ÚgreenletÚ
getcurrentr   r   r   Úget_hubr   ÚaddÚschedule_call_localÚ_do_sendÚswitchÚcancelÚdiscardr   Úthrow)r   ÚtimeoutÚcurrentÚhubÚtimerÚresults         r   r+   z
Event.wait^   sç   € õ, Ô%Ñ'Ô'ˆØŒ<�8Ð#Ð#Ý”,‘.”.ˆCØŒM×Ò˜gÑ&Ô&Ð&ØˆEØÐ"Ø×/Ò/°¸¼ÈÈdÐT[Ñ\Ô\�ð/ØŸš™œ�ØÐ$Ø—L’L‘N”N�NØà”×%Ò% gÑ.Ô.Ð.Ð.ø�”×%Ò% gÑ.Ô.Ð.Ð.øøøØŒ9Ð ØˆGŒM˜4œ9Ð%Ð%ØŒ|Ðs   Á2+B8 Â8Cc                 ó  — | j         t          u s
J d¦   «         ‚|| _         |�t          |t          ¦  «        s|f}|| _        t          j        ¦   «         }| j        D ]*}|                     d| j	        | j         | j        |¦  «         Œ+dS )au  Makes arrangements for the waiters to be woken with the
        result and then returns immediately to the parent.

        >>> from eventlet import event
        >>> import eventlet
        >>> evt = event.Event()
        >>> def waiter():
        ...     print('about to wait')
        ...     result = evt.wait()
        ...     print('waited for {0}'.format(result))
        >>> _ = eventlet.spawn(waiter)
        >>> eventlet.sleep(0)
        about to wait
        >>> evt.send('a')
        >>> eventlet.sleep(0)
        waited for a

        It is an error to call :meth:`send` multiple times on the same event.

        >>> evt.send('whoops') # doctest: +IGNORE_EXCEPTION_DETAIL
        Traceback (most recent call last):
        AssertionError: Trying to re-send() an already-triggered event.

        Use :meth:`reset` between :meth:`send` s to reuse an event object.
        z/Trying to re-send() an already-triggered event.Nr   )
r   r   Ú
isinstanceÚtupler   r   r6   r   Úschedule_call_globalr9   )r   rB   Úexcr@   Úwaiters        r   Úsendz
Event.send†   s¤   € ð4 Œ|�xÐ'Ð'Ð'Ð)ZÑ'Ô'Ð'ØˆŒØˆ?¥:¨cµ5Ñ#9Ô#9ˆ?Ø�'ˆCØˆŒ	ÝŒl‰nŒnˆØ”mð 	Cð 	CˆFØ×$Ò$Ø�4”= $¤,°´	¸6ñCô Cð Cð Cð	Cð 	Cr   c                 ób   — || j         v r%|€|                     |¦  «         d S  |j        |Ž  d S d S r   )r   r:   r=   )r   rB   rG   rH   s       r   r9   zEvent._do_sendª   sI   € Ø�T”]Ð"Ð"Øˆ{Ø—’˜fÑ%Ô%Ð%Ð%Ð%à�”˜cÐ"Ð"Ð"Ð"ð	 #Ð"r   c                 ó.   — |                       d|¦  «        S )aÞ  Same as :meth:`send`, but sends an exception to waiters.

        The arguments to send_exception are the same as the arguments
        to ``raise``.  If a single exception object is passed in, it
        will be re-raised when :meth:`wait` is called, generating a
        new stacktrace.

           >>> from eventlet import event
           >>> evt = event.Event()
           >>> evt.send_exception(RuntimeError())
           >>> evt.wait()
           Traceback (most recent call last):
             File "<stdin>", line 1, in <module>
             File "eventlet/event.py", line 120, in wait
               current.throw(*self._exc)
           RuntimeError

        If it's important to preserve the entire original stack trace,
        you must pass in the entire :func:`sys.exc_info` tuple.

           >>> import sys
           >>> evt = event.Event()
           >>> try:
           ...     raise RuntimeError()
           ... except RuntimeError:
           ...     evt.send_exception(*sys.exc_info())
           ...
           >>> evt.wait()
           Traceback (most recent call last):
             File "<stdin>", line 1, in <module>
             File "eventlet/event.py", line 120, in wait
               current.throw(*self._exc)
             File "<stdin>", line 2, in <module>
           RuntimeError

        Note that doing so stores a traceback object directly on the
        Event object, which may cause reference cycles. See the
        :func:`sys.exc_info` documentation.
        N)rI   )r   Úargss     r   Úsend_exceptionzEvent.send_exception±   s   € ðR �yŠy˜˜tÑ$Ô$Ð$r   r   )NN)r   r   r   Ú__doc__r   r   r   r!   r   r%   r'   r)   r.   r0   r2   r+   rI   r9   rM   r	   r   r   r   r      s  € € € € € ðð ð0 €GØ€Dðð ð ðDð Dð Dð
ð ð ð,ð ,ð ,ð%ð %ð %ðBð Bð Bðð ð ð ðð ð ð ð
ð ð ð ð
&ð &ð &ð &ðP"Cð "Cð "Cð "CðH#ð #ð #ð)%ð )%ð )%ð )%ð )%r   N)Úeventletr   Úeventlet.supportr   r4   Ú__all__r   r   r	   r   r   ú<module>rR      s¡   ðØ Ð Ð Ð Ð Ð Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2àˆ)€ðð ð ð ð ñ ô ð ð
 ˆ8‰:Œ:€ðK%ð K%ð K%ð K%ð K%ñ K%ô K%ð K%ð K%ð K%r   