o
    RÊÆhp  ã                   @   s6   d dl Z d dlZd dlmZmZmZ G dd„ dƒZdS )é    N)ÚAnyÚDequeÚOptionalc                   @   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ÓEvent asyncio lock helper class.

    Wraps the Event asyncio lock allowing either to 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   úZ/var/www/html/HyperOracle/crypto_trader/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 waitersN)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   r   r   r   r   r   Ú<module>   s    