U
    ßM‘fÇ  ã                   @  sx   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
 dddg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                   @  sB   e Zd ZU dZded< ddœddddœd	d
„Zdddœdd„ZdS )r   z%
    Base class for extensions.

    r	   ÚnameN)Úmax_sizezframes.FramezOptional[int])Úframer   Úreturnc                C  s   t ‚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©ÚNotImplementedError)Úselfr   r   © r   ú>/tmp/pip-unpacked-wheel-yzabpfcc/websockets/extensions/base.pyÚdecode   s    zExtension.decode)r   r   c                 C  s   t ‚dS )zš
        Encode an outgoing frame.

        Args:
            frame (Frame): outgoing frame.

        Returns:
            Frame: Encoded frame.

        Nr   )r   r   r   r   r   Úencode+   s    zExtension.encode)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__r   r   r   r   r   r   r      s
   
üc                   @  s:   e Zd ZU dZded< ddœdd„Zdd	d
dœdd„ZdS )r   z:
    Base class for client-side extension factories.

    r	   r   zList[ExtensionParameter])r   c                 C  s   t ‚dS )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_paramsB   s    z)ClientExtensionFactory.get_request_paramsúSequence[ExtensionParameter]úSequence[Extension]r   ©ÚparamsÚaccepted_extensionsr   c                 C  s   t ‚dS )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_paramsL   s    z.ClientExtensionFactory.process_response_paramsN)r   r   r   r   r   r   r%   r   r   r   r   r   9   s   

c                   @  s,   e Zd ZU dZded< ddddœdd	„Zd
S )r   z:
    Base class for server-side extension factories.

    r	   r   r   r    z*Tuple[List[ExtensionParameter], Extension]r!   c                 C  s   t ‚dS )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_paramsm   s    z-ServerExtensionFactory.process_request_paramsN)r   r   r   r   r   r&   r   r   r   r   r   d   s   
N)Ú
__future__r   Útypingr   r   r   r   Ú r   r	   r
   Ú__all__r   r   r   r   r   r   r   Ú<module>   s   
-+