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