aboutsummaryrefslogtreecommitdiff
path: root/.venv/lib/python3.12/site-packages/hpack/struct.py
diff options
context:
space:
mode:
Diffstat (limited to '.venv/lib/python3.12/site-packages/hpack/struct.py')
-rw-r--r--.venv/lib/python3.12/site-packages/hpack/struct.py50
1 files changed, 50 insertions, 0 deletions
diff --git a/.venv/lib/python3.12/site-packages/hpack/struct.py b/.venv/lib/python3.12/site-packages/hpack/struct.py
new file mode 100644
index 00000000..420c634c
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/hpack/struct.py
@@ -0,0 +1,50 @@
+"""
+Contains structures for representing header fields with associated metadata.
+"""
+from __future__ import annotations
+
+from typing import TYPE_CHECKING, Any
+
+if TYPE_CHECKING:
+ from typing_extensions import Self, TypeAlias # pragma: no cover
+
+
+class HeaderTuple(tuple[bytes, bytes]):
+ """
+ A data structure that stores a single header field.
+
+ HTTP headers can be thought of as tuples of ``(field name, field value)``.
+ A single header block is a sequence of such tuples.
+
+ In HTTP/2, however, certain bits of additional information are required for
+ compressing these headers: in particular, whether the header field can be
+ safely added to the HPACK compression context.
+
+ This class stores a header that can be added to the compression context. In
+ all other ways it behaves exactly like a tuple.
+ """
+
+ __slots__ = ()
+
+ indexable = True
+
+ def __new__(cls, *args: Any) -> Self:
+ return tuple.__new__(cls, args)
+
+
+class NeverIndexedHeaderTuple(HeaderTuple):
+ """
+ A data structure that stores a single header field that cannot be added to
+ a HTTP/2 header compression context.
+ """
+
+ __slots__ = ()
+
+ indexable = False
+
+ def __new__(cls, *args: Any) -> Self:
+ return tuple.__new__(cls, args)
+
+
+Header: TypeAlias = "HeaderTuple | NeverIndexedHeaderTuple | tuple[bytes, bytes]"
+HeaderWeaklyTyped: TypeAlias = "HeaderTuple | NeverIndexedHeaderTuple | tuple[bytes | str, bytes | str]"