o
    #`^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 )EventResultOrErrorzEvent 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   K/home/air/shanriGPT/back/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    