diff --git a/src/content/docs/workers/configuration/cron-triggers.mdx b/src/content/docs/workers/configuration/cron-triggers.mdx index ecd0ea28eff..4f4438c93ce 100644 --- a/src/content/docs/workers/configuration/cron-triggers.mdx +++ b/src/content/docs/workers/configuration/cron-triggers.mdx @@ -63,11 +63,12 @@ export default { ```python -from workers import WorkerEntrypoint, Response +from workers import WorkerEntrypoint class Default(WorkerEntrypoint): async def scheduled(self, controller, env, ctx): - print("cron processed") + # All four parameters (self, controller, env, ctx) are required + print("cron processed") ``` diff --git a/src/content/docs/workers/configuration/environment-variables.mdx b/src/content/docs/workers/configuration/environment-variables.mdx index ba4d7ee86e5..7235ae39b31 100644 --- a/src/content/docs/workers/configuration/environment-variables.mdx +++ b/src/content/docs/workers/configuration/environment-variables.mdx @@ -47,6 +47,17 @@ export default { } satisfies ExportedHandler; ``` + + +```python +from workers import WorkerEntrypoint, Response + +class Default(WorkerEntrypoint): + async def fetch(self, request): + # Environment variables are accessed via attribute access on self.env + return Response(f"API host: {self.env.API_HOST}") +``` + ### Import `env` for global access diff --git a/src/content/docs/workers/languages/python/basics.mdx b/src/content/docs/workers/languages/python/basics.mdx index f75d9267141..af16935f7ae 100644 --- a/src/content/docs/workers/languages/python/basics.mdx +++ b/src/content/docs/workers/languages/python/basics.mdx @@ -48,7 +48,8 @@ from hello import hello class Default(WorkerEntrypoint): async def fetch(self, request): - name = (await request.json()).name + body = await request.json() + name = body["name"] return Response(hello(name)) ``` @@ -71,6 +72,19 @@ curl --header "Content-Type: application/json" \ Hello, Python! ``` +## Returning JSON Responses + +To return JSON from a Python Worker, use `Response.json()`: + +```python +from workers import WorkerEntrypoint, Response + +class Default(WorkerEntrypoint): + async def fetch(self, request): + data = {"message": "Hello", "status": "ok"} + return Response.json(data) +``` + ## The `env` Attribute The `env` attribute on the `WorkerEntrypoint` can be used to access diff --git a/src/content/docs/workers/languages/python/examples.mdx b/src/content/docs/workers/languages/python/examples.mdx index 0191d991493..07c72aa2c43 100644 --- a/src/content/docs/workers/languages/python/examples.mdx +++ b/src/content/docs/workers/languages/python/examples.mdx @@ -72,10 +72,23 @@ from workers import WorkerEntrypoint, Response class Default(WorkerEntrypoint): async def fetch(self, request): - name = (await request.json()).name + body = await request.json() # returns a native Python dict + name = body["name"] return Response("Hello, {name}".format(name=name)) ``` +## Return a JSON response + +```python +from workers import WorkerEntrypoint, Response + +class Default(WorkerEntrypoint): + async def fetch(self, request): + data = {"greeting": "Hello, World!", "status": "ok"} + # Use Response.json() to return JSON — do not pass a dict to Response() directly + return Response.json(data) +``` + ## Read bundled asset files in your Worker Let's say your Worker has the following structure: @@ -200,11 +213,13 @@ Refer to [Durable Objects documentation](/durable-objects/get-started/) for more ## Cron Trigger ```python -from workers import WorkerEntrypoint, Response +from workers import WorkerEntrypoint class Default(WorkerEntrypoint): async def scheduled(self, controller, env, ctx): - print("cron processed") + # All four parameters (self, controller, env, ctx) are required — + # unlike fetch() which only takes (self, request). + print("cron processed") ``` Refer to [Cron Triggers documentation](/workers/configuration/cron-triggers/) for more information. diff --git a/src/content/docs/workers/languages/python/stdlib.mdx b/src/content/docs/workers/languages/python/stdlib.mdx index 57e371c2528..66edac87a41 100644 --- a/src/content/docs/workers/languages/python/stdlib.mdx +++ b/src/content/docs/workers/languages/python/stdlib.mdx @@ -57,3 +57,9 @@ The following are present but cannot be imported due to a dependency on the term - pty - tty + +## In-memory filesystem + +Python Workers have access to an ephemeral, in-memory filesystem. You can read and write files using standard Python file I/O (for example, `open()`, `pathlib.Path`), but all data is **lost when the Worker invocation ends**. The filesystem is not shared between invocations or instances. + +This can be useful for temporary file operations, but should not be relied upon for persistent storage. Use [KV](/kv/), [R2](/r2/), or [Durable Objects](/durable-objects/) for durable storage. diff --git a/src/content/docs/workers/runtime-apis/handlers/scheduled.mdx b/src/content/docs/workers/runtime-apis/handlers/scheduled.mdx index 4fdc925759c..a3630d8a451 100644 --- a/src/content/docs/workers/runtime-apis/handlers/scheduled.mdx +++ b/src/content/docs/workers/runtime-apis/handlers/scheduled.mdx @@ -54,11 +54,13 @@ export default { ```python -from workers import WorkerEntrypoint, Response, fetch +from workers import WorkerEntrypoint class Default(WorkerEntrypoint): async def scheduled(self, controller, env, ctx): - await doSomeTaskOnASchedule() + # controller.cron contains the cron pattern that triggered this event + # controller.scheduledTime contains the scheduled time in ms since epoch + print(f"Cron triggered: {controller.cron}") ```