U
    ){f                     @   s   d dl Z d dlmZ d dlmZmZmZ d dlmZ d dlm	Z	 d dlm
Z
 dZG dd	 d	e jZeG d
d dZee edddZee edddZdS )    N)TracebackType)finalOptionalType)events)
exceptions)tasks)Timeouttimeout
timeout_atc                   @   s    e Zd ZdZdZdZdZdZdS )_StatecreatedactiveZexpiringexpiredfinishedN)__name__
__module____qualname__CREATEDENTEREDEXPIRINGEXPIREDEXITED r   r   Q/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/taskgroup/timeouts.pyr      s
   r   c                   @   s   e Zd Zee ddddZee dddZee dddd	Zedd
dZ	e
dddZd dddZeee  ee ee ee dddZddddZdS )r	   Nwhenreturnc                 C   s   t j| _d | _d | _|| _d S N)r   r   _state_timeout_handler_task_when)selfr   r   r   r   __init__!   s    zTimeout.__init__)r   c                 C   s   | j S r   )r"   r#   r   r   r   r   (   s    zTimeout.whenc                 C   s   | j tjk	st| j tjk	r0td| j j d|| _| jd k	rJ| j	  |d krZd | _n4t
 }|| kr~|| j| _n||| j| _d S )NzCannot change state of z Timeout)r   r   r   AssertionErrorr   RuntimeErrorvaluer"   r    cancelr   get_running_looptime	call_soon_on_timeoutcall_at)r#   r   loopr   r   r   
reschedule+   s    

zTimeout.reschedulec                 C   s   | j tjtjfkS )z$Is timeout expired during execution?)r   r   r   r   r%   r   r   r   r   @   s    zTimeout.expiredc                 C   s\   dg}| j tjkr<| jd k	r(t| jdnd }|d|  d|}d| j j d| dS )N    zwhen= z
<Timeout []>)r   r   r   r"   roundappendjoinr(   )r#   infor   Zinfo_strr   r   r   __repr__D   s    
zTimeout.__repr__c                    s4   t j| _t | _| jd kr$td| | j | S )Nz$Timeout should be used inside a task)	r   r   r   r   current_taskr!   r'   r0   r"   r%   r   r   r   
__aenter__L   s    

zTimeout.__aenter__)exc_typeexc_valexc_tbr   c                    sz   | j tjtjfkst| jd k	r0| j  d | _| j tjkrbtj| _ | j	 dkrv|t
jkrvtn| j tjkrvtj| _ d S )Nr   )r   r   r   r   r&   r    r)   r   r!   Zuncancelr   CancelledErrorTimeoutErrorr   )r#   r=   r>   r?   r   r   r   	__aexit__T   s    

zTimeout.__aexit__c                 C   s,   | j tjkst| j  tj| _ d | _d S r   )r   r   r   r&   r!   r)   r   r    r%   r   r   r   r-   l   s    
zTimeout._on_timeout)r   r   r   r   floatr$   r   r0   boolr   strr:   r<   r   BaseExceptionr   rB   r-   r   r   r   r   r	      s   

r	   )delayr   c                 C   s$   t  }t| dk	r| |  ndS )a	  Timeout async 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:

    >>> async with asyncio.timeout(10):  # 10 seconds timeout
    ...     await long_running_task()


    delay - value in seconds or None to disable timeout logic

    long_running_task() is interrupted by raising asyncio.CancelledError,
    the top-most affected timeout() context manager converts CancelledError
    into TimeoutError.
    N)r   r*   r	   r+   )rG   r/   r   r   r   r
   t   s    r
   r   c                 C   s   t | S )ab  Schedule the timeout at absolute time.

    Like timeout() but argument gives absolute time in the same clock system
    as loop.time().

    Please note: it is not POSIX time but a time with
    undefined starting base, e.g. the time of the system power on.

    >>> async with asyncio.timeout_at(loop.time() + 10):
    ...     await long_running_task()


    when - a deadline when timeout occurs or None to disable timeout logic

    long_running_task() is interrupted by raising asyncio.CancelledError,
    the top-most affected timeout() context manager converts CancelledError
    into TimeoutError.
    )r	   )r   r   r   r   r      s    r   )enumtypesr   typingr   r   r   asyncior   r   r   __all__Enumr   r	   rC   r
   r   r   r   r   r   <module>   s   U