mirror of https://github.com/sgoudham/Enso-Bot.git
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
120 lines
2.7 KiB
Python
120 lines
2.7 KiB
Python
"""
|
|
:mod:`websockets.extensions.base` defines abstract classes for implementing
|
|
extensions.
|
|
|
|
See `section 9 of RFC 6455`_.
|
|
|
|
.. _section 9 of RFC 6455: http://tools.ietf.org/html/rfc6455#section-9
|
|
|
|
"""
|
|
|
|
from typing import List, Optional, Sequence, Tuple
|
|
|
|
from ..framing import Frame
|
|
from ..typing import ExtensionName, ExtensionParameter
|
|
|
|
|
|
__all__ = ["Extension", "ClientExtensionFactory", "ServerExtensionFactory"]
|
|
|
|
|
|
class Extension:
|
|
"""
|
|
Abstract class for extensions.
|
|
|
|
"""
|
|
|
|
@property
|
|
def name(self) -> ExtensionName:
|
|
"""
|
|
Extension identifier.
|
|
|
|
"""
|
|
|
|
def decode(self, frame: Frame, *, max_size: Optional[int] = None) -> Frame:
|
|
"""
|
|
Decode an incoming frame.
|
|
|
|
:param frame: incoming frame
|
|
:param max_size: maximum payload size in bytes
|
|
|
|
"""
|
|
|
|
def encode(self, frame: Frame) -> Frame:
|
|
"""
|
|
Encode an outgoing frame.
|
|
|
|
:param frame: outgoing frame
|
|
|
|
"""
|
|
|
|
|
|
class ClientExtensionFactory:
|
|
"""
|
|
Abstract class for client-side extension factories.
|
|
|
|
"""
|
|
|
|
@property
|
|
def name(self) -> ExtensionName:
|
|
"""
|
|
Extension identifier.
|
|
|
|
"""
|
|
|
|
def get_request_params(self) -> List[ExtensionParameter]:
|
|
"""
|
|
Build request parameters.
|
|
|
|
Return a list of ``(name, value)`` pairs.
|
|
|
|
"""
|
|
|
|
def process_response_params(
|
|
self,
|
|
params: Sequence[ExtensionParameter],
|
|
accepted_extensions: Sequence[Extension],
|
|
) -> Extension:
|
|
"""
|
|
Process response parameters received from the server.
|
|
|
|
:param params: list of ``(name, value)`` pairs.
|
|
:param accepted_extensions: list of previously accepted extensions.
|
|
:raises ~websockets.exceptions.NegotiationError: if parameters aren't
|
|
acceptable
|
|
|
|
"""
|
|
|
|
|
|
class ServerExtensionFactory:
|
|
"""
|
|
Abstract class for server-side extension factories.
|
|
|
|
"""
|
|
|
|
@property
|
|
def name(self) -> ExtensionName:
|
|
"""
|
|
Extension identifier.
|
|
|
|
"""
|
|
|
|
def process_request_params(
|
|
self,
|
|
params: Sequence[ExtensionParameter],
|
|
accepted_extensions: Sequence[Extension],
|
|
) -> Tuple[List[ExtensionParameter], Extension]:
|
|
"""
|
|
Process request parameters received from the client.
|
|
|
|
To accept the offer, return a 2-uple containing:
|
|
|
|
- response parameters: a list of ``(name, value)`` pairs
|
|
- an extension: an instance of a subclass of :class:`Extension`
|
|
|
|
:param params: list of ``(name, value)`` pairs.
|
|
:param accepted_extensions: list of previously accepted extensions.
|
|
:raises ~websockets.exceptions.NegotiationError: to reject the offer,
|
|
if parameters aren't acceptable
|
|
|
|
"""
|