o
    NEg                     @   sb   d dl Z d dlZd dlmZmZ zd dlmZ W n ey'   d dlmZ Y nw G dd dZdS )    N)AnyOptional)Dequec                   @   sT   e Zd ZdZdejddfddZddee ddfdd	Z	de
fd
dZdddZdS )EventResultOrErrorz
    This class wrappers the Event asyncio lock allowing either awake the
    locked Tasks without any error or raising an exception.

    thanks to @vorpalsmith for the simple design.
    loopreturnNc                 C   s$   || _ d | _t | _t | _d S N)_loop_excasyncioEvent_eventcollectionsdeque_waiters)selfr    r   g/var/www/eduai.edurigo.com/doc_train/edurigo_ai/Puru/venv/lib/python3.10/site-packages/aiohttp/locks.py__init__   s   
zEventResultOrError.__init__excc                 C   s   || _ | j  d S r   )r
   r   set)r   r   r   r   r   r      s   zEventResultOrError.setc              	      s^   | j | j }| j| z|I d H }W | j| n| j| w | jd ur-| j|S r   )r	   create_taskr   waitr   appendremover
   )r   waitervalr   r   r   r      s   
zEventResultOrError.waitc                 C   s   | j D ]}|  qdS )z Cancel all waiters N)r   cancel)r   r   r   r   r   r   *   s   

zEventResultOrError.cancelr   )r   N)__name__
__module____qualname____doc__r   AbstractEventLoopr   r   BaseExceptionr   r   r   r   r   r   r   r   r      s    r   )	r   r   typingr   r   r   ImportErrortyping_extensionsr   r   r   r   r   <module>   s    