Ë
    RPf  ã                  ó>   — d dl mZ d dlZd dlmZ dgZ G d„ d«      Zy)é    )ÚannotationsN)ÚOptionalÚDeadlinec                  ó&   — e Zd ZdZdd„Zddœdd„Zy)	r   zŒ
    Manage timeouts across multiple steps.

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

    c                óT   — |  |€d | _         y t        j                  «       |z   | _         y )N)ÚdeadlineÚtimeÚ	monotonic)ÚselfÚtimeouts     úO/var/www/fastapitest/venv/lib/python3.12/site-packages/websockets/sync/utils.pyÚ__init__zDeadline.__init__   s$   € ÙØˆ?Ø ˆD�Mä ŸN™NÓ,¨wÑ6ˆD�Mó    T)Úraise_if_elapsedc               ó†   — | j                   €y| 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   s?   € ð �=‰=Ð ØØ—-‘-¤$§.¡.Ó"2Ñ2ˆÙ ¨1¢Ü˜{Ó+Ð+Øˆr   N)r   úOptional[float]ÚreturnÚNone)r   Úboolr   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   © r   r   r   r   
   s   „ ñó7ð 37ö r   )Ú
__future__r   r	   Útypingr   Ú__all__r   r   r   r   ú<module>r      s!   ðÝ "ã Ý ð ˆ,€÷$ò $r   