
    gS                    :    d dl mZ d dlZdgZ G d d          ZdS )    )annotationsN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float | NonereturnNonec                V    |  |	d | _         d S t          j                    |z   | _         d S )N)deadlinetime	monotonic)selfr   s     a/var/www/html/nodeJS/PythonScripts/venv3.11/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 )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   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   __all__r   r   r   r   <module>r      s[    " " " " " "  ,$ $ $ $ $ $ $ $ $ $r   