Source code for harp_apps.http_client.contrib.hishel.utils
from harp.utils.bytes import ensure_bytes
[docs]
def prepare_headers_for_serialization(
headers: list[tuple[bytes, bytes]], /, *, varying=()
) -> tuple[bytes, dict[str, str], dict[str, str]]:
static_headers = []
varying_headers = {}
metadata = {}
for k, v in headers:
k = k.lower().strip()
if k in varying:
varying_headers[k.decode()] = v.decode()
else:
static_headers.append(b": ".join((k, v)))
if k == b"content-type":
metadata["content-type"] = v.decode()
return b"\n".join(static_headers), varying_headers, metadata
def _parse_header(header: bytes) -> tuple[bytes, bytes]:
splitted = header.split(b": ", 1)
return (splitted[0], splitted[1])
[docs]
def prepare_headers_for_deserialization(headers: bytes, /, *, varying: dict) -> list[tuple[bytes, bytes]]:
return [
*(_parse_header(header) for header in headers.split(b"\n")),
*((ensure_bytes(k), ensure_bytes(v)) for k, v in varying.items()),
]