cloudflare / cloudflare/python-workers-examples

D1 env access

Abierto
#5 1 comentario 0 reacciones 0 asignados Ver en GitHub
Lenguaje dominante
Python
Estrellas
309
Forks
69
Merge medio
3 d 11 h
PR fusionados (30 d)
13

Descripción

```
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)

```

```toml
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
```

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.