o
    [h                     @  sv   d dl mZ d dlmZmZmZmZ ddlmZ ddlm	Z	m
Z
 g dZG dd dZG d	d
 d
ZG dd dZdS )    )annotations)ListOptionalSequenceTuple   )frames)ExtensionNameExtensionParameter)	ExtensionClientExtensionFactoryServerExtensionFactoryc                   @  s6   e Zd ZU dZded< 	 dddddZdddZdS )r   z%
    Base class for extensions.

    r	   nameN)max_sizeframeframes.Framer   Optional[int]returnc                C     dS )a)  
        Decode an incoming frame.

        Args:
            frame (Frame): incoming frame.
            max_size: maximum payload size in bytes.

        Returns:
            Frame: Decoded frame.

        Raises:
            PayloadTooBig: if decoding the payload exceeds ``max_size``.

        N )selfr   r   r   r   /home/ubuntu/experiments/live_experiments/Pythonexperiments/Otree/venv/lib/python3.10/site-packages/websockets/extensions/base.pydecode       zExtension.decodec                 C  r   )z
        Encode an outgoing frame.

        Args:
            frame (Frame): outgoing frame.

        Returns:
            Frame: Encoded frame.

        Nr   )r   r   r   r   r   encode*   r   zExtension.encode)r   r   r   r   r   r   )r   r   r   r   )__name__
__module____qualname____doc____annotations__r   r   r   r   r   r   r      s   
 r   c                   @  s0   e Zd ZU dZded< 	 dddZdddZdS )r   z:
    Base class for client-side extension factories.

    r	   r   r   List[ExtensionParameter]c                 C  r   )z
        Build parameters to send to the server for this extension.

        Returns:
            List[ExtensionParameter]: Parameters to send to the server.

        Nr   )r   r   r   r   get_request_params@   r   z)ClientExtensionFactory.get_request_paramsparamsSequence[ExtensionParameter]accepted_extensionsSequence[Extension]r   c                 C  r   )a  
        Process parameters received from the server.

        Args:
            params (Sequence[ExtensionParameter]): parameters received from
                the server for this extension.
            accepted_extensions (Sequence[Extension]): list of previously
                accepted extensions.

        Returns:
            Extension: An extension instance.

        Raises:
            NegotiationError: if parameters aren't acceptable.

        Nr   r   r"   r$   r   r   r   process_response_paramsI   r   z.ClientExtensionFactory.process_response_paramsN)r   r    )r"   r#   r$   r%   r   r   )r   r   r   r   r   r!   r'   r   r   r   r   r   7   s   
 
	r   c                   @  s&   e Zd ZU dZded< 	 dd
dZdS )r   z:
    Base class for server-side extension factories.

    r	   r   r"   r#   r$   r%   r   *Tuple[List[ExtensionParameter], Extension]c                 C  r   )a  
        Process parameters received from the client.

        Args:
            params (Sequence[ExtensionParameter]): parameters received from
                the client for this extension.
            accepted_extensions (Sequence[Extension]): list of previously
                accepted extensions.

        Returns:
            Tuple[List[ExtensionParameter], Extension]: To accept the offer,
            parameters to send to the client for this extension and an
            extension instance.

        Raises:
            NegotiationError: to reject the offer, if parameters received from
                the client aren't acceptable.

        Nr   r&   r   r   r   process_request_paramsi   r   z-ServerExtensionFactory.process_request_paramsN)r"   r#   r$   r%   r   r(   )r   r   r   r   r   r)   r   r   r   r   r   `   s
   
 r   N)
__future__r   typingr   r   r   r    r   r	   r
   __all__r   r   r   r   r   r   r   <module>   s    +)