a
    wh+                     @   sJ   d dl Z d dlZd dlmZ d dlmZ d dlmZmZ G dd dZdS )    N)TracebackType)Any)OptionalTypec                   @   s   e Zd ZdZddee eej ddddZd ddd	Z	e
e eeee d
ddZd dddZe
e eedd
ddZeedddZeee dddZd dddZe
e ddddZddddZdS )timeouta  timeout context manager.

    Useful in cases when you want to apply timeout logic around block
    of code or in cases when asyncio.wait_for is not suitable. For example:

    >>> with timeout(0.001):
    ...     async with aiohttp.get('https://github.com') as r:
    ...         await r.text()


    timeout - value in seconds or None to disable timeout logic
    loop - asyncio compatible event loop
    N)loop)r   r   returnc                C   sF   || _ |d u rt }ntdt || _d | _d| _d | _	d | _
d S )Nz-The loop argument to timeout() is deprecated.F)_timeoutasyncioZget_running_loopwarningswarnDeprecationWarning_loop_task
_cancelled_cancel_handler
_cancel_at)selfr   r    r   I/var/www/battlenet.uz/venv/lib/python3.9/site-packages/asgiref/timeout.py__init__   s    
ztimeout.__init__)r   c                 C   s   |   S N	_do_enterr   r   r   r   	__enter__2   s    ztimeout.__enter__)exc_typeexc_valexc_tbr   c                 C   s   |  | d S r   _do_exitr   r   r   r   r   r   r   __exit__5   s    
ztimeout.__exit__c                    s   |   S r   r   r   r   r   r   
__aenter__>   s    ztimeout.__aenter__c                    s   |  | d S r   r   r!   r   r   r   	__aexit__A   s    ztimeout.__aexit__c                 C   s   | j S r   )r   r   r   r   r   expiredI   s    ztimeout.expiredc                 C   s(   | j d ur t| j | j  dS d S d S )Ng        )r   maxr   timer   r   r   r   	remainingM   s    
ztimeout.remainingc                 C   st   | j d u r| S t| j| _| jd u r.td| j dkrJ| j| j | S | j | j  | _	| j
| j	| j| _| S )Nz4Timeout context manager should be used inside a taskr   )r	   r
   Zcurrent_taskr   r   RuntimeErrorZ	call_soon_cancel_taskr'   r   Zcall_atr   r   r   r   r   r   T   s    


ztimeout._do_enter)r   r   c                 C   sP   |t ju r"| jr"d | _d | _t j| jd urF| jd urF| j  d | _d | _d S r   )r
   ZCancelledErrorr   r   r   TimeoutErrorr	   cancel)r   r   r   r   r   r    h   s    
ztimeout._do_exitc                 C   s   | j d ur| j   d| _d S )NT)r   r,   r   r   r   r   r   r*   s   s    

ztimeout._cancel_task)__name__
__module____qualname____doc__r   floatr
   ZAbstractEventLoopr   r   r   BaseExceptionr   boolr"   r#   r$   propertyr%   r(   r   r    r*   r   r   r   r   r      s4   	r   )	r
   r   typesr   typingr   r   r   r   r   r   r   r   <module>	   s
   