U
    Š¾úgS  ã                   @  s,   d dl mZ d dlZdgZG dd„ dƒZdS )é    )ÚannotationsNÚ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float | NoneÚNone)ÚtimeoutÚreturnc                 C  s&   |  |d krd | _ nt ¡ | | _ d S )N)ÚdeadlineÚtimeÚ	monotonic)Úselfr   © r   ú9/tmp/pip-unpacked-wheel-dx_q7dq3/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 )aL  
        Calculate a timeout from a deadline.

        Args:
            raise_if_elapsed: 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   Ú__all__r   r   r   r   r   Ú<module>   s   