
    i                    F    d dl mZ d dlZd dlmZ dgZ G d d          ZdS )    )annotationsN)OptionalDeadlinec                  (    e Zd ZdZddZ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.

    timeoutOptional[float]returnNonec                V    |  |	d | _         d S t          j                    |z   | _         d S )N)deadlinetime	monotonic)selfr   s     [/var/www/html/crypto-bot/backend/venv/lib/python3.11/site-packages/websockets/sync/utils.py__init__zDeadline.__init__   s0    &? DMMM N,,w6DMMM    T)raise_if_elapsedr   boolc               |    | j         dS | j         t          j                    z
  }|r|dk    rt          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   s      r   r   zDeadline.timeout   sH     = 4-$."2"22 	,1{+++r   N)r   r   r	   r
   )r   r   r	   r   )__name__
__module____qualname____doc__r   r    r   r   r   r   
   sU         7 7 7 7 37        r   )
__future__r   r   typingr   __all__r   r   r   r   <module>r      sm    " " " " " "        ,$ $ $ $ $ $ $ $ $ $r   