Source code

Revision control

Copy as Markdown

Other Tools

# mypy: allow-untyped-defs↩
from collections import OrderedDict
from typing import Dict
from wptserve.utils import isomorphic_decode
class H3Headers(Dict[str, str]):↩
"""Header store that adapts HTTP/3 headers to pywebsocket3 expectations."""
_H3_PSEUDO_HEADERS = {↩
'method', 'scheme', 'host', 'path', 'authority', 'status', 'protocol'
}↩
def __init__(self, headers):↩
super().__init__()↩
self.raw_headers = OrderedDict()↩
for key, value in headers:↩
key = isomorphic_decode(key)↩
value = isomorphic_decode(value)↩
self.raw_headers[key] = value
dict.__setitem__(self, key, value)↩
dict.__setitem__(self, self._normalize_key(key), value)↩
@staticmethod
def _normalize_key(key: str) -> str:↩
if key.startswith(':') and key[1:] in H3Headers._H3_PSEUDO_HEADERS:↩
return key[1:]↩
return key
# TODO This does not seem relevant for H3 headers, so using a dummy function for now↩
def getallmatchingheaders(self, _header):↩
return ['dummy function']↩