Make req/resp headers case-insensitive

This commit is contained in:
2025-07-16 14:07:38 +03:00
parent 7546055574
commit 14f82885c4
3 changed files with 17 additions and 3 deletions

View File

@@ -10,6 +10,7 @@ requires-python = ">=3.13"
dependencies = [
"megasniff>=0.2.0",
"breakshaft>=0.1.0",
"case-insensitive-dictionary>=0.2.1",
]
[tool.uv.sources]

View File

@@ -6,6 +6,8 @@ from typing import Callable, Awaitable, Dict, Literal, Any, TypeVar
import urllib.parse
from case_insensitive_dict.case_insensitive_dict import CaseInsensitiveDict
type Scope = Dict
type Receive = Callable[[], Awaitable[Dict]]
type Send = Callable[[Dict], Awaitable[None]]
@@ -31,7 +33,7 @@ V = TypeVar('V')
class BasicRequest:
method: str
path: str
headers: dict[str, str]
headers: CaseInsensitiveDict[str, str]
query: dict[str, list[str] | str]
body: dict[str, Any]
@@ -39,7 +41,7 @@ class BasicRequest:
def from_scope(cls, scope: Scope) -> BasicRequest:
path = scope['path']
method = scope['method']
headers = {}
headers = CaseInsensitiveDict()
for key, value in scope.get('headers', []):
headers[key.decode('latin1')] = value.decode('latin1')
@@ -60,7 +62,7 @@ class BasicRequest:
@dataclass
class BasicResponse:
code: int
headers: dict[str, str]
headers: CaseInsensitiveDict[str, str]
body: bytes
def into_start_message(self) -> dict:

11
uv.lock generated
View File

@@ -15,6 +15,15 @@ wheels = [
{ url = "https://git.nikto-b.ru/api/packages/nikto_b/pypi/files/breakshaft/0.1.0/breakshaft-0.1.0-py3-none-any.whl", hash = "sha256:e7c8831e5889fbcd788d59fee05f7aee113663ebef9273cd280893e1ed04f5c2" },
]
[[package]]
name = "case-insensitive-dictionary"
version = "0.2.1"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/01/5e/8de464e77e2bb6f0b47f2ac94f75cd46f4f14ba55529619e68ae5e81443e/case-insensitive-dictionary-0.2.1.tar.gz", hash = "sha256:7e94726f97eb2c0ceac53209971db50ffc996def663e5e5080d0a1acb4a42280", size = 5938, upload-time = "2022-10-18T10:35:30.298Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/9e/94/2a5f43133bfd07d8c826f5fe277d54fb6c45c0c2ac5df3bc71c2ba8ff4ea/case_insensitive_dictionary-0.2.1-py3-none-any.whl", hash = "sha256:a8971780be1ba25e363db259515f0a2f003013465f82552e2f9aed08d5a9ca28", size = 6060, upload-time = "2022-10-18T10:35:31.701Z" },
]
[[package]]
name = "click"
version = "8.2.1"
@@ -234,6 +243,7 @@ version = "0.1.0"
source = { editable = "." }
dependencies = [
{ name = "breakshaft" },
{ name = "case-insensitive-dictionary" },
{ name = "megasniff" },
]
@@ -247,6 +257,7 @@ dev = [
[package.metadata]
requires-dist = [
{ name = "breakshaft", specifier = ">=0.1.0", index = "https://git.nikto-b.ru/api/packages/nikto_b/pypi/simple" },
{ name = "case-insensitive-dictionary", specifier = ">=0.2.1" },
{ name = "megasniff", specifier = ">=0.2.0", index = "https://git.nikto-b.ru/api/packages/nikto_b/pypi/simple" },
]