Skip to content

Commit 73e77aa

Browse files
committed
Bundle ASGI bridge with Worker source
1 parent 4cc46b8 commit 73e77aa

2 files changed

Lines changed: 10 additions & 6 deletions

File tree

src/main.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,11 @@
1010
from asset_manifest import HTML_CACHE_VERSION
1111
from examples import PYTHON_VERSION
1212

13+
try:
14+
import asgi as worker_asgi
15+
except ImportError: # Allows editor tooling outside Workers, where the js module is unavailable.
16+
worker_asgi = None
17+
1318
try:
1419
from js import Object, Request as JsRequest, caches
1520
from pyodide.ffi import create_once_callable, jsnull, to_js
@@ -125,8 +130,6 @@ async def not_found(path: str, request: Request):
125130

126131
class Default(WorkerEntrypoint):
127132
async def fetch(self, request):
128-
import asgi
129-
130133
global _CURRENT_WORKER_REQUEST
131134
_CURRENT_WORKER_REQUEST = request
132135

@@ -138,13 +141,13 @@ async def fetch(self, request):
138141
cached = await caches.default.match(cache_key)
139142
if cached:
140143
return cached
141-
response = await asgi.fetch(app, request.js_object, self.env)
144+
response = await worker_asgi.fetch(app, request.js_object, self.env)
142145
if getattr(response, "status", 200) == 200:
143146
response.headers.set("Cache-Control", "public, max-age=300, stale-while-revalidate=86400")
144147
await caches.default.put(cache_key, response.clone())
145148
return response
146-
response = await asgi.fetch(app, request.js_object, self.env)
149+
response = await worker_asgi.fetch(app, request.js_object, self.env)
147150
response.headers.set("Cache-Control", "no-store")
148151
return response
149152

150-
return await asgi.fetch(app, request.js_object, self.env)
153+
return await worker_asgi.fetch(app, request.js_object, self.env)

tests/test_app.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -393,7 +393,8 @@ def test_worker_entrypoint_uses_fastapi_asgi_bridge(self):
393393
main_source = (ROOT / "src" / "main.py").read_text()
394394
self.assertIn("from fastapi import FastAPI, Request", main_source)
395395
self.assertIn("app = FastAPI", main_source)
396-
self.assertIn("return await asgi.fetch(app, request.js_object, self.env)", main_source)
396+
self.assertIn("import asgi as worker_asgi", main_source)
397+
self.assertIn("return await worker_asgi.fetch(app, request.js_object, self.env)", main_source)
397398
self.assertIn("caches.default.match", main_source)
398399
self.assertIn("caches.default.put", main_source)
399400
self.assertIn("Cache-Control", main_source)

0 commit comments

Comments
 (0)