U
    <æ{f  ã                   @  s8   d dl mZ d dlZd dlmZ dgZG dd„ dƒZdS )é    )ÚannotationsN)ÚOptionalÚDeadlinec                   @  s6   e Zd ZdZdddœdd„Zddœd	dd
œdd„ZdS )r   zŒ
    Manage timeouts across multiple steps.

    Args:
        timeout: Time available in seconds or :obj:`None` if there is no limit.

    zOptional[float]ÚNone)ÚtimeoutÚreturnc                 C  s&   |  |d krd | _ nt ¡ | | _ d S )N)ÚdeadlineÚtimeÚ	monotonic)Úselfr   © r   úT/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/websockets/sync/utils.pyÚ__init__   s    zDeadline.__init__T)Úraise_if_elapsedÚbool)r   r   c                C  s4   | j dkrdS | j t ¡  }|r0|dkr0tdƒ‚|S )aS  
        Calculate a timeout from a deadline.

        Args:
            raise_if_elapsed (bool): Whether to raise :exc:`TimeoutError`
                if the deadline lapsed.

        Raises:
            TimeoutError: If the deadline lapsed.

        Returns:
            Time left in seconds or :obj:`None` if there is no limit.

        Nr   z	timed out)r   r	   r
   ÚTimeoutError)r   r   r   r   r   r   r      s    
zDeadline.timeoutN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r   r   
   s   )Ú
__future__r   r	   Útypingr   Ú__all__r   r   r   r   r   Ú<module>   s   