Upgrade to kaya 0.0.2 and run on the rloop event loop
CI / Build and push docker image (push) Successful in 1m39s

- pin kaya-core/kaya-rsgi >= 0.0.2 (ctx.client now honors Forwarded and
  X-Forwarded-* headers); adapt route tests and add explicit coverage
- add rloop dependency and set GRANIAN_LOOP=rloop in the Docker image so
  granian serves the app on the Rust event loop instead of asyncio
- regenerate requirements.txt (kaya 0.0.2, rloop 0.5.0)
- document the new loop and forwarded-header behavior in the README
This commit is contained in:
2026-09-04 19:57:32 +08:00
committed by woggioni
parent f043ea4afe
commit c5b653efba
5 changed files with 32 additions and 8 deletions
+12 -2
View File
@@ -12,6 +12,10 @@ from pyfconfig.app import app
# httpx's ASGITransport populates the scope with this client tuple.
CLIENT_IP = "127.0.0.1"
CLIENT_PORT = "123"
# First entry of the X-Forwarded-For header in ALL_HEADERS; since kaya 0.0.2
# ctx.client honors forwarded headers, ip_addr resolves to this instead of
# the socket peer address.
FORWARDED_IP = "203.0.113.7"
ALL_HEADERS = {
"User-Agent": "test-agent/1.0",
@@ -48,6 +52,12 @@ class RoutesTest(unittest.TestCase):
self.assertEqual(200, r.status_code)
self.assertEqual(CLIENT_IP, r.text.strip())
@async_test
async def test_ip_honors_x_forwarded_for(self) -> None:
async with self.client() as client:
r = await client.get("/ip", headers={"X-Forwarded-For": "203.0.113.7"})
self.assertEqual("203.0.113.7", r.text.strip())
@async_test
async def test_ua(self) -> None:
async with self.client() as client:
@@ -106,7 +116,7 @@ class RoutesTest(unittest.TestCase):
keys,
)
values = dict(line.split(": ", 1) for line in lines)
self.assertEqual(CLIENT_IP, values["ip_addr"])
self.assertEqual(FORWARDED_IP, values["ip_addr"])
self.assertEqual("unavailable", values["remote_host"])
self.assertEqual("test-agent/1.0", values["user_agent"])
self.assertEqual(CLIENT_PORT, values["port"])
@@ -127,7 +137,7 @@ class RoutesTest(unittest.TestCase):
r = await client.get("/all.json", headers=ALL_HEADERS)
self.assertEqual(200, r.status_code)
data = json.loads(r.text)
self.assertEqual(CLIENT_IP, data["ip_addr"])
self.assertEqual(FORWARDED_IP, data["ip_addr"])
self.assertEqual("test-agent/1.0", data["user_agent"])
self.assertEqual(CLIENT_PORT, data["port"])
self.assertEqual("GET", data["method"])