The final assertion read `aiohttp.web_request.RequestKey` directly, which AttributeErrors on the very aiohttp versions (< 3.14) the guarded import exists to support. Compare against getattr(..., None) so the test checks the module rebinds to whatever the real aiohttp provides. Follow-up to #109157.
27 lines
884 B
Python
27 lines
884 B
Python
"""Import-time invariant: a missing ``RequestKey`` must not take ``web`` down with it."""
|
|
|
|
import importlib
|
|
import sys
|
|
import types
|
|
|
|
import aiohttp.web_request
|
|
from aiohttp import web
|
|
|
|
|
|
def test_missing_requestkey_keeps_web_module_bound():
|
|
import gateway.platforms.api_server_runs as api_server_runs
|
|
|
|
stub = types.ModuleType("aiohttp.web_request")
|
|
real = sys.modules["aiohttp.web_request"]
|
|
sys.modules["aiohttp.web_request"] = stub
|
|
try:
|
|
importlib.reload(api_server_runs)
|
|
assert api_server_runs.web is web
|
|
assert api_server_runs.RequestKey is None
|
|
finally:
|
|
sys.modules["aiohttp.web_request"] = real
|
|
importlib.reload(api_server_runs)
|
|
|
|
# aiohttp < 3.14 has no RequestKey; the module binds None there, so compare against getattr.
|
|
assert api_server_runs.RequestKey is getattr(aiohttp.web_request, "RequestKey", None)
|