a
    ݌xd/
                     @   s^   d dl mZmZmZmZ d dlmZmZmZm	Z	m
Z
mZ d dlmZ dgZG dd deZdS )    )AbstractEventLoopensure_futureFutureiscoroutine)AnyCallablecastDictOptionalTuple)EventEmitterAsyncIOEventEmitterc                       sN   e Zd ZdZd
ee d fddZeee	df e
ee	f ddd	Z  ZS )r   a-  An event emitter class which can run asyncio coroutines in addition to
    synchronous blocking functions. For example::

        @ee.on('event')
        async def async_handler(*args, **kwargs):
            await returns_a_future()

    On emit, the event emitter  will automatically schedule the coroutine using
    ``asyncio.ensure_future`` and the configured event loop (defaults to
    ``asyncio.get_event_loop()``).

    Unlike the case with the EventEmitter, all exceptions raised by
    event handlers are automatically emitted on the ``error`` event. This is
    important for asyncio coroutines specifically but is also handled for
    synchronous functions for consistency.

    When ``loop`` is specified, the supplied event loop will be used when
    scheduling work with ``ensure_future``. Otherwise, the default asyncio
    event loop is used.

    For asyncio coroutine event handlers, calling emit is non-blocking.
    In other words, you do not have to await any results from emit, and the
    coroutine is scheduled in a fire-and-forget fashion.
    Nloopc                    s   t t|   || _d S )N)superr   __init___loop)selfr   	__class__ D/var/www/html/Ranjet/env/lib/python3.9/site-packages/pyee/asyncio.pyr   %   s    zAsyncIOEventEmitter.__init__.)fargskwargsc              
      s   z||i |}W n0 t yB } z d| W Y d }~nnd }~0 0 t|rx jrhttt| jd}qttt|}nt|trtt|}nd S  fdd}|	| d S )Nerrorr   c                    s(   |   rd S |  }|r$ d| d S )Nr   )	cancelled	exceptionemit)r   excr   r   r   callbackA   s
    z/AsyncIOEventEmitter._emit_run.<locals>.callback)
	Exceptionr   r   r   r   r   r   
isinstancer   add_done_callback)r   r   r   r   coror   futr!   r   r    r   	_emit_run)   s    "
zAsyncIOEventEmitter._emit_run)N)__name__
__module____qualname____doc__r
   r   r   r   r   r   r	   strr'   __classcell__r   r   r   r   r      s   

N)asyncior   r   r   r   typingr   r   r   r	   r
   r   Z	pyee.baser   __all__r   r   r   r   r   <module>   s    