summaryrefslogtreecommitdiff
path: root/venv/lib/python3.11/site-packages/websockets/extensions/base.py
diff options
context:
space:
mode:
Diffstat (limited to 'venv/lib/python3.11/site-packages/websockets/extensions/base.py')
-rw-r--r--venv/lib/python3.11/site-packages/websockets/extensions/base.py133
1 files changed, 133 insertions, 0 deletions
diff --git a/venv/lib/python3.11/site-packages/websockets/extensions/base.py b/venv/lib/python3.11/site-packages/websockets/extensions/base.py
new file mode 100644
index 0000000..6c481a4
--- /dev/null
+++ b/venv/lib/python3.11/site-packages/websockets/extensions/base.py
@@ -0,0 +1,133 @@
+from __future__ import annotations
+
+from typing import List, Optional, Sequence, Tuple
+
+from .. import frames
+from ..typing import ExtensionName, ExtensionParameter
+
+
+__all__ = ["Extension", "ClientExtensionFactory", "ServerExtensionFactory"]
+
+
+class Extension:
+ """
+ Base class for extensions.
+
+ """
+
+ name: ExtensionName
+ """Extension identifier."""
+
+ def decode(
+ self,
+ frame: frames.Frame,
+ *,
+ max_size: Optional[int] = None,
+ ) -> frames.Frame:
+ """
+ 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``.
+
+ """
+ raise NotImplementedError
+
+ def encode(self, frame: frames.Frame) -> frames.Frame:
+ """
+ Encode an outgoing frame.
+
+ Args:
+ frame (Frame): outgoing frame.
+
+ Returns:
+ Frame: Encoded frame.
+
+ """
+ raise NotImplementedError
+
+
+class ClientExtensionFactory:
+ """
+ Base class for client-side extension factories.
+
+ """
+
+ name: ExtensionName
+ """Extension identifier."""
+
+ def get_request_params(self) -> List[ExtensionParameter]:
+ """
+ Build parameters to send to the server for this extension.
+
+ Returns:
+ List[ExtensionParameter]: Parameters to send to the server.
+
+ """
+ raise NotImplementedError
+
+ def process_response_params(
+ self,
+ params: Sequence[ExtensionParameter],
+ accepted_extensions: Sequence[Extension],
+ ) -> Extension:
+ """
+ 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.
+
+ """
+ raise NotImplementedError
+
+
+class ServerExtensionFactory:
+ """
+ Base class for server-side extension factories.
+
+ """
+
+ name: ExtensionName
+ """Extension identifier."""
+
+ def process_request_params(
+ self,
+ params: Sequence[ExtensionParameter],
+ accepted_extensions: Sequence[Extension],
+ ) -> Tuple[List[ExtensionParameter], Extension]:
+ """
+ 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.
+
+ """
+ raise NotImplementedError