+
    }i                     r    ^ RI HtHtHtHtHt ^ RIHtHtH	t	H
t
HtHtHt ^ RIHt ]tR.t ! R R]4      tR# )    )AbstractEventLoopensure_futureFutureiscoroutinewait)AnyCallablecastDictOptionalSetTuple)EventEmitterAsyncIOEventEmitterc                      a a ] tR t^t oRtRV3R lV 3R llltV3R lV 3R lltV3R lR ltV3R lR	 ltV3R
 lR lt	]
V3R lR l4       tRtVtV ;t# )r   a  An event emitter class which can run asyncio coroutines in addition to
synchronous blocking functions. For example:

```py
@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.
c                :   < V ^8  d   QhRS[ RS[S[,          RR/# )   selfloopreturnN)Selfr   r   )format__classdict__s   "^/Users/ahmad/.openclaw/workspace/my-crawler/.venv/lib/python3.14/site-packages/pyee/asyncio.py__annotate__ AsyncIOEventEmitter.__annotate__)   s(     + +t +8,=#> +$ +    c                V   < \         \        V `  4        Wn        \	        4       V n        R # N)superr   __init___loopset_waiting)r   r   	__class__s   &&r   r!   AsyncIOEventEmitter.__init__)   s    !41326
%(Ur   c          
      8   < V ^8  d   QhRS[ RS[RS[RS[RS[/# )r   r   eventargskwargsr   )r   strr   bool)r   r   s   "r   r   r   .   s;     4 444 4 	4
 
4r   c                ,   < \         SV `  ! V.VO5/ VB # )a'  Emit `event`, passing `*args` and `**kwargs` to each attached
function or coroutine. 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')'`.

When executing coroutine handlers, their respective futures will be
stored in a "waiting" state. These futures may be waited on or
canceled with `wait_for_complete` and `cancel`, respectively; and
their status may be checked via the `complete` property.
)r    emit)r   r(   r)   r*   r%   s   &&*,r   r.   AsyncIOEventEmitter.emit.   s    0 w|E3D3F33r   c          
      `   < V ^8  d   QhRS[ RS[RS[S[R3,          RS[S[S[3,          RR/# )r   r   fr)   .r*   r   N)r   r	   r   r   r   r+   )r   r   s   "r   r   r   H   sK     $# $#$#$# CHo$# S#X	$#
 
$#r   c                  a   V! V/ VB p\        V4      '       dS   S P                  '       d'   \        \        \        V4      S P                  R 7      pMC\        \        \        V4      4      pM)\        V\        4      '       d   \        \        V4      pMR# R V 3R llpVP                  V4       S P                  P                  V4       R#   \         d   pS P                  RT4        Rp?R# Rp?ii ; i))r   Nc                (    V ^8  d   QhR\         RR/# )r   r1   r   N)r   )r   s   "r   r   3AsyncIOEventEmitter._emit_run.<locals>.__annotate__a   s     , ,F ,t ,r   c                    < SP                   P                  V 4       V P                  4       '       d   R # V P                  4       pV'       d   SP	                  RV4       R # R # )Nerror)r$   discard	cancelled	exceptionr.   )r1   excr   s   & r   callback/AsyncIOEventEmitter._emit_run.<locals>.callbacka   sD    %%a(;;==/0{{}IIgs+ r   r6   )r   r"   r   r
   r   
isinstancer   add_done_callbackr$   add	Exceptionr.   )r   r1   r)   r*   corofutr;   r:   s   f&&&    r   	_emit_runAsyncIOEventEmitter._emit_runH   s    	#4*6*D 4  :::  -T#t_4::NC'S$8CD&))3o, , !!(+MMc"9  	$IIgs##	$s   C C6C11C6c                $   < V ^8  d   QhRS[ RR/# r   r   r   Nr   )r   r   s   "r   r   r   n   s     & &d &t &r   c                t   "   V P                   '       d    \        V P                   4      G Rj  xL
  R# R#  L5i)a  Waits for all pending tasks to complete. For example:

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

# Triggers execution of async_handler
ee.emit('data', '00101001')

await ee.wait_for_complete()

# async_handler has completed execution
```

This is useful if you're attempting a graceful shutdown of your
application and want to ensure all coroutines have completed execution
beforehand.
N)r$   r   r   s   &r   wait_for_complete%AsyncIOEventEmitter.wait_for_completen   s*     ( ===t}}%%% %s   +86	8c                $   < V ^8  d   QhRS[ RR/# rF   rG   )r   r   s   "r   r   r      s      T d r   c                    V P                    FC  pVP                  4       '       d   K  VP                  4       '       d   K3  VP                  4        KE  	  V P                   P	                  4        R# )a  Cancel all pending tasks. For example:

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

# Triggers execution of async_handler
ee.emit('data', '00101001')

ee.cancel()

# async_handler execution has been canceled
```

This is useful if you're attempting to shut down your application and
attempts at a graceful shutdown via `wait_for_complete` have failed.
N)r$   doner8   cancelclear)r   rB   s   & r   rO   AsyncIOEventEmitter.cancel   sB    & ==C88::cmmoo

 ! 	r   c                &   < V ^8  d   QhRS[ RS[/# )r   r   r   )r   r,   )r   r   s   "r   r   r      s     ! !t ! !r   c                $    V P                   '       * # )a  When true, there are no pending tasks, and execution is complete.
For example:

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

# Triggers execution of async_handler
ee.emit('data', '00101001')

# async_handler is still running, so this prints False
print(ee.complete)

await ee.wait_for_complete()

# async_handler has completed execution, so this prints True
print(ee.complete)
```
)r$   rI   s   &r   completeAsyncIOEventEmitter.complete   s    , ==  r   )r"   r$   r   )__name__
__module____qualname____firstlineno____doc__r!   r.   rC   rJ   rO   propertyrT   __static_attributes____classdictcell____classcell__)r%   r   s   @@r   r   r      sV     6+ +
4 44$# $#L& &. 0 ! ! !r   N)asyncior   r   r   r   r   typingr   r	   r
   r   r   r   r   	pyee.baser   r   __all__r    r   r   <module>rd      s5    P O B B B "
 
!f!, f!r   