| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- """
- 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]"
|