a backend can lose both its transfer wakeup and its own timeout enforcement in one failure (observed: a curl_cffi request that parked an aioweb consumer's event loop for 24h+ - loop idle, nothing in flight, the await never completing). wrap _raw_request in asyncio.wait_for at the effective timeout + 5s slack: the backend's own timeout still fires first in every healthy failure, the envelope only trips when the backend's timer is dead, and its cancellation unwedges the orphaned transfer. deadline = per-call numeric timeout else the session timeout (default 10); timeout=None from request_with_retries guards on the session bound (that was the wedge path). explicit Session(timeout=None) stays unguarded - the documented opt-out for genuinely unbounded calls. additive, no new knob. fired: a never-completing backend hangs forever without this, dies at deadline+slack with it, and request_with_retries returns a FailureResponse instead of hanging. Signed-off-by: disqualifier <dev@disqualifier.me>
21 lines
534 B
TOML
21 lines
534 B
TOML
[build-system]
|
|
requires = ["hatchling"]
|
|
build-backend = "hatchling.build"
|
|
|
|
[project]
|
|
name = "aioweb"
|
|
version = "1.1.0"
|
|
description = "Async HTTP session wrapper over aiohttp — proxies, header overwrites, retries, previews. Config-free, installable."
|
|
requires-python = ">=3.10"
|
|
dependencies = [
|
|
"aiohttp>=3.9",
|
|
"yarl>=1.9",
|
|
"commons @ git+https://git.rethinkstudios.io/rethink-public/commons.git@v1.0.0",
|
|
]
|
|
|
|
[tool.hatch.metadata]
|
|
allow-direct-references = true
|
|
|
|
[tool.hatch.build.targets.wheel]
|
|
packages = ["src/aioweb"]
|