-
Notifications
You must be signed in to change notification settings - Fork 51
Open
Description
from fastapi import FastAPI, Request
from pydantic import BaseModel
from js import Response
async def on_fetch(request, env):
import asgi
# print("here", env)
return await asgi.fetch(app, request, env)
app = FastAPI()
@app.get("/")
async def root():
return {"message": "Hello, World!"}
@app.get("/env")
async def root(req: Request):
env = req.scope["env"]
return {
"message": "Here is an example of getting an environment variable: "
+ env.MESSAGE
}
class Item(BaseModel):
name: str
description: str | None = None
price: float
tax: float | None = None
@app.post("/items/")
async def create_item(item: Item):
return item
@app.put("/items/{item_id}")
async def create_item(item_id: int, item: Item, q: str | None = None):
result = {"item_id": item_id, **item.dict()}
if q:
result.update({"q": q})
return result
@app.get("/items/{item_id}")
async def read_item(item_id: int):
return {"item_id": item_id}
@app.get("/tablelist")
async def fetch_tables(req: Request):
env = req.scope["env"]
# Query D1 - we'll list all tables in our database in this example
results = await env.DB.prepare("PRAGMA table_list").all()
# Return a JSON response
return Response.json(results)
name = "hello-fastapi"
main = "src/worker.py"
compatibility_flags = ["python_workers"]
compatibility_date = "2023-12-18"
[vars]
MESSAGE = "This is an environment variable"
[[d1_databases]]
binding = "DB" # This will be how you refer to your database in your Worker
database_name = "jsonbase"
database_id = "69cf8448-d541-4bba-80ff-1264e73ccbde"error
PythonError: Traceback (most recent call last):
File "/lib/python3.12/site-packages/fastapi/encoders.py", line 322, in jsonable_encoder
data = dict(obj)
^^^^^^^^^
TypeError: 'pyodide.ffi.JsProxy' object is not iterable
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/lib/python3.12/site-packages/fastapi/encoders.py", line 327, in jsonable_encoder
data = vars(obj)
^^^^^^^^^
TypeError: vars() argument must have __dict__ attribute
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/session/metadata/worker.py", line 12, in on_fetch
return await asgi.fetch(app, request, env)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/lib/python3.12/site-packages/asgi.py", line 188, in fetch
result = await process_request(app, req, env)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/lib/python3.12/site-packages/asgi.py", line 130, in process_request
await app(request_to_scope(req, env), receive, send)
File "/lib/python3.12/site-packages/fastapi/applications.py", line 1054, in __call__
await super().__call__(scope, receive, send)
File "/lib/python3.12/site-packages/starlette/applications.py", line 123, in __call__
await self.middleware_stack(scope, receive, send)
File "/lib/python3.12/site-packages/starlette/middleware/errors.py", line 186, in __call__
raise exc
File "/lib/python3.12/site-packages/starlette/middleware/errors.py", line 164, in __call__
await self.app(scope, receive, _send)
File "/lib/python3.12/site-packages/starlette/middleware/exceptions.py", line 62, in __call__
await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
File "/lib/python3.12/site-packages/starlette/_exception_handler.py", line 64, in wrapped_app
raise exc
File "/lib/python3.12/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
await app(scope, receive, sender)
File "/lib/python3.12/site-packages/starlette/routing.py", line 758, in __call__
await self.middleware_stack(scope, receive, send)
File "/lib/python3.12/site-packages/starlette/routing.py", line 778, in app
await route.handle(scope, receive, send)
File "/lib/python3.12/site-packages/starlette/routing.py", line 299, in handle
await self.app(scope, receive, send)
File "/lib/python3.12/site-packages/starlette/routing.py", line 79, in app
await wrap_app_handling_exceptions(app, request)(scope, receive, send)
File "/lib/python3.12/site-packages/starlette/_exception_handler.py", line 64, in wrapped_app
raise exc
File "/lib/python3.12/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
await app(scope, receive, sender)
File "/lib/python3.12/site-packages/starlette/routing.py", line 74, in app
response = await func(request)
^^^^^^^^^^^^^^^^^^^
File "/lib/python3.12/site-packages/fastapi/routing.py", line 296, in app
content = await serialize_response(
X [ERROR] ^^^^^^^^^^^^^^^^^^^^^^^^^
File "/lib/python3.12/site-packages/fastapi/routing.py", line 180, in serialize_response
return jsonable_encoder(response_content)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/lib/python3.12/site-packages/fastapi/encoders.py", line 330, in jsonable_encoder
raise ValueError(errors) from e
ValueError: [TypeError("'pyodide.ffi.JsProxy' object is not iterable"), TypeError('vars() argument
must have __dict__ attribute')]
at new_error (pyodide-internal:generated/pyodide.asm:20:9998)
at [object Object]x16c818
at [object Object]x17437e
at _PyEM_TrampolineCall_JS (pyodide-internal:generated/pyodide.asm:20:120091)
at [object Object]x1bf539
at [object Object]x2c1c2d
at [object Object]x206dd5
at [object Object]x1bfc1b
at [object Object]x1bff2a
at [object Object]x1bffa8
at [object Object]x29a879
at [object Object]x2a0fde
Metadata
Metadata
Assignees
Labels
No labels