From 3684f8f71fde7218562d3c3d72157d6b70eabc44 Mon Sep 17 00:00:00 2001 From: Dominik Picheta Date: Fri, 21 Aug 2026 17:08:27 +0100 Subject: [PATCH 1/2] Remove number prefixes from example dirs. --- .github/workflows/ci.yml | 2 +- README.md | 40 +++++++++--------- {06-assets => assets}/README.md | 2 +- {06-assets => assets}/assets/favicon.ico | Bin {06-assets => assets}/assets/image.svg | 0 {06-assets => assets}/assets/index.html | 0 {06-assets => assets}/assets/painting.jpg | Bin {06-assets => assets}/assets/script.js | 0 {06-assets => assets}/assets/style.css | 0 {06-assets => assets}/package.json | 0 {06-assets => assets}/pyproject.toml | 0 {06-assets => assets}/src/worker.py | 0 {06-assets => assets}/wrangler.jsonc | 0 {02-binding => binding}/README.md | 2 +- {02-binding => binding}/package.json | 0 {02-binding => binding}/pyproject.toml | 0 {02-binding => binding}/src/entry.py | 0 {02-binding => binding}/wrangler.jsonc | 0 {15-chatroom => chatroom}/README.md | 2 +- {15-chatroom => chatroom}/package.json | 0 {15-chatroom => chatroom}/pyproject.toml | 0 {15-chatroom => chatroom}/src/chatroom.html | 0 {15-chatroom => chatroom}/src/entry.py | 0 {15-chatroom => chatroom}/wrangler.jsonc | 0 {08-cron => cron}/README.md | 2 +- {08-cron => cron}/package.json | 0 {08-cron => cron}/pyproject.toml | 0 {08-cron => cron}/src/entry.py | 0 {08-cron => cron}/wrangler.jsonc | 0 .../README.md | 2 +- .../migrations/0001_create_todos.sql | 0 .../package.json | 0 .../public/app.js | 0 .../public/index.html | 0 .../public/style.css | 0 .../pyproject.toml | 0 .../src/entry.py | 0 .../src/todo_project}/__init__.py | 0 .../src/todo_project/settings.py | 0 .../src/todo_project/urls.py | 0 .../src/todo_project/wsgi.py | 0 .../src/todos}/__init__.py | 0 .../src/todos/apps.py | 0 .../src/todos/models.py | 0 .../src/todos/views.py | 0 .../wrangler.jsonc | 0 {18-django => django}/README.md | 2 +- {18-django => django}/package.json | 0 {18-django => django}/pyproject.toml | 0 {18-django => django}/src/entry.py | 0 .../src/hello_django}/__init__.py | 0 .../src/hello_django/settings.py | 0 .../src/hello_django/urls.py | 0 .../src/hello_django/wsgi.py | 0 {18-django => django}/wrangler.jsonc | 0 .../README.md | 2 +- .../package.json | 0 .../pyproject.toml | 0 .../src/entry.py | 0 .../wrangler.jsonc | 0 {17-dynamic-py-py => dynamic-py-py}/README.md | 4 +- .../package.json | 0 .../pyproject.toml | 0 .../src/entry.py | 0 .../wrangler.jsonc | 0 {03-fastapi => fastapi}/README.md | 2 +- {03-fastapi => fastapi}/package.json | 0 {03-fastapi => fastapi}/pyproject.toml | 0 {03-fastapi => fastapi}/src/worker.py | 0 {03-fastapi => fastapi}/wrangler.jsonc | 0 {01-hello => hello}/README.md | 2 +- {01-hello => hello}/package.json | 0 {01-hello => hello}/pyproject.toml | 0 {01-hello => hello}/src/entry.py | 0 {01-hello => hello}/wrangler.jsonc | 0 {12-image-gen => image-gen}/README.md | 2 +- {12-image-gen => image-gen}/package.json | 0 {12-image-gen => image-gen}/pyproject.toml | 0 {12-image-gen => image-gen}/src/entry.py | 0 {12-image-gen => image-gen}/src/index.html | 0 {12-image-gen => image-gen}/wrangler.jsonc | 0 .../README.md | 6 +-- .../py/package.json | 0 .../py/pyproject.toml | 0 .../py/src/entry.py | 0 .../py/wrangler.jsonc | 0 .../ts/.gitignore | 0 .../ts/.vscode/settings.json | 0 .../ts/package-lock.json | 0 .../ts/package.json | 0 .../ts/src/index.ts | 0 .../ts/src/template.html | 0 .../ts/src/types.d.ts | 0 .../ts/tsconfig.json | 0 .../ts/vitest.config.mts | 0 .../ts/worker-configuration.d.ts | 0 .../ts/wrangler.jsonc | 0 {05-langchain => langchain}/README.md | 2 +- {05-langchain => langchain}/package.json | 0 {05-langchain => langchain}/pyproject.toml | 0 {05-langchain => langchain}/src/worker.py | 0 {05-langchain => langchain}/wrangler.jsonc | 0 {11-opengraph => opengraph}/README.md | 2 +- {11-opengraph => opengraph}/package.json | 0 {11-opengraph => opengraph}/pyproject.toml | 0 {11-opengraph => opengraph}/src/entry.py | 0 {11-opengraph => opengraph}/wrangler.jsonc | 0 {04-query-d1 => query-d1}/README.md | 2 +- {04-query-d1 => query-d1}/db_init.sql | 0 {04-query-d1 => query-d1}/package.json | 0 {04-query-d1 => query-d1}/pyproject.toml | 0 {04-query-d1 => query-d1}/src/entry.py | 0 {04-query-d1 => query-d1}/wrangler.jsonc | 0 .../README.md | 2 +- .../package.json | 0 .../pyproject.toml | 0 .../src/entry.py | 0 .../wrangler.jsonc | 0 tests/conftest.py | 4 +- tests/test_examples.py | 32 +++++++------- .../README.md | 2 +- .../package.json | 0 .../pyproject.toml | 0 .../src/entry.py | 0 .../wrangler.jsonc | 0 {09-workers-ai => workers-ai}/README.md | 2 +- {09-workers-ai => workers-ai}/package.json | 0 {09-workers-ai => workers-ai}/pyproject.toml | 0 {09-workers-ai => workers-ai}/src/entry.py | 0 {09-workers-ai => workers-ai}/wrangler.jsonc | 0 {10-workflows => workflows}/README.md | 2 +- {10-workflows => workflows}/package.json | 0 {10-workflows => workflows}/pyproject.toml | 0 {10-workflows => workflows}/src/entry.py | 0 {10-workflows => workflows}/wrangler.jsonc | 0 135 files changed, 61 insertions(+), 61 deletions(-) rename {06-assets => assets}/README.md (91%) rename {06-assets => assets}/assets/favicon.ico (100%) rename {06-assets => assets}/assets/image.svg (100%) rename {06-assets => assets}/assets/index.html (100%) rename {06-assets => assets}/assets/painting.jpg (100%) rename {06-assets => assets}/assets/script.js (100%) rename {06-assets => assets}/assets/style.css (100%) rename {06-assets => assets}/package.json (100%) rename {06-assets => assets}/pyproject.toml (100%) rename {06-assets => assets}/src/worker.py (100%) rename {06-assets => assets}/wrangler.jsonc (100%) rename {02-binding => binding}/README.md (91%) rename {02-binding => binding}/package.json (100%) rename {02-binding => binding}/pyproject.toml (100%) rename {02-binding => binding}/src/entry.py (100%) rename {02-binding => binding}/wrangler.jsonc (100%) rename {15-chatroom => chatroom}/README.md (89%) rename {15-chatroom => chatroom}/package.json (100%) rename {15-chatroom => chatroom}/pyproject.toml (100%) rename {15-chatroom => chatroom}/src/chatroom.html (100%) rename {15-chatroom => chatroom}/src/entry.py (100%) rename {15-chatroom => chatroom}/wrangler.jsonc (100%) rename {08-cron => cron}/README.md (90%) rename {08-cron => cron}/package.json (100%) rename {08-cron => cron}/pyproject.toml (100%) rename {08-cron => cron}/src/entry.py (100%) rename {08-cron => cron}/wrangler.jsonc (100%) rename {19-django-todo-d1 => django-todo-d1}/README.md (95%) rename {19-django-todo-d1 => django-todo-d1}/migrations/0001_create_todos.sql (100%) rename {19-django-todo-d1 => django-todo-d1}/package.json (100%) rename {19-django-todo-d1 => django-todo-d1}/public/app.js (100%) rename {19-django-todo-d1 => django-todo-d1}/public/index.html (100%) rename {19-django-todo-d1 => django-todo-d1}/public/style.css (100%) rename {19-django-todo-d1 => django-todo-d1}/pyproject.toml (100%) rename {19-django-todo-d1 => django-todo-d1}/src/entry.py (100%) rename {18-django/src/hello_django => django-todo-d1/src/todo_project}/__init__.py (100%) rename {19-django-todo-d1 => django-todo-d1}/src/todo_project/settings.py (100%) rename {19-django-todo-d1 => django-todo-d1}/src/todo_project/urls.py (100%) rename {19-django-todo-d1 => django-todo-d1}/src/todo_project/wsgi.py (100%) rename {19-django-todo-d1/src/todo_project => django-todo-d1/src/todos}/__init__.py (100%) rename {19-django-todo-d1 => django-todo-d1}/src/todos/apps.py (100%) rename {19-django-todo-d1 => django-todo-d1}/src/todos/models.py (100%) rename {19-django-todo-d1 => django-todo-d1}/src/todos/views.py (100%) rename {19-django-todo-d1 => django-todo-d1}/wrangler.jsonc (100%) rename {18-django => django}/README.md (91%) rename {18-django => django}/package.json (100%) rename {18-django => django}/pyproject.toml (100%) rename {18-django => django}/src/entry.py (100%) rename {19-django-todo-d1/src/todos => django/src/hello_django}/__init__.py (100%) rename {18-django => django}/src/hello_django/settings.py (100%) rename {18-django => django}/src/hello_django/urls.py (100%) rename {18-django => django}/src/hello_django/wsgi.py (100%) rename {18-django => django}/wrangler.jsonc (100%) rename {07-durable-objects => durable-objects}/README.md (87%) rename {07-durable-objects => durable-objects}/package.json (100%) rename {07-durable-objects => durable-objects}/pyproject.toml (100%) rename {07-durable-objects => durable-objects}/src/entry.py (100%) rename {07-durable-objects => durable-objects}/wrangler.jsonc (100%) rename {17-dynamic-py-py => dynamic-py-py}/README.md (92%) rename {17-dynamic-py-py => dynamic-py-py}/package.json (100%) rename {17-dynamic-py-py => dynamic-py-py}/pyproject.toml (100%) rename {17-dynamic-py-py => dynamic-py-py}/src/entry.py (100%) rename {17-dynamic-py-py => dynamic-py-py}/wrangler.jsonc (100%) rename {03-fastapi => fastapi}/README.md (88%) rename {03-fastapi => fastapi}/package.json (100%) rename {03-fastapi => fastapi}/pyproject.toml (100%) rename {03-fastapi => fastapi}/src/worker.py (100%) rename {03-fastapi => fastapi}/wrangler.jsonc (100%) rename {01-hello => hello}/README.md (92%) rename {01-hello => hello}/package.json (100%) rename {01-hello => hello}/pyproject.toml (100%) rename {01-hello => hello}/src/entry.py (100%) rename {01-hello => hello}/wrangler.jsonc (100%) rename {12-image-gen => image-gen}/README.md (96%) rename {12-image-gen => image-gen}/package.json (100%) rename {12-image-gen => image-gen}/pyproject.toml (100%) rename {12-image-gen => image-gen}/src/entry.py (100%) rename {12-image-gen => image-gen}/src/index.html (100%) rename {12-image-gen => image-gen}/wrangler.jsonc (100%) rename {13-js-api-pygments => js-api-pygments}/README.md (93%) rename {13-js-api-pygments => js-api-pygments}/py/package.json (100%) rename {13-js-api-pygments => js-api-pygments}/py/pyproject.toml (100%) rename {13-js-api-pygments => js-api-pygments}/py/src/entry.py (100%) rename {13-js-api-pygments => js-api-pygments}/py/wrangler.jsonc (100%) rename {13-js-api-pygments => js-api-pygments}/ts/.gitignore (100%) rename {13-js-api-pygments => js-api-pygments}/ts/.vscode/settings.json (100%) rename {13-js-api-pygments => js-api-pygments}/ts/package-lock.json (100%) rename {13-js-api-pygments => js-api-pygments}/ts/package.json (100%) rename {13-js-api-pygments => js-api-pygments}/ts/src/index.ts (100%) rename {13-js-api-pygments => js-api-pygments}/ts/src/template.html (100%) rename {13-js-api-pygments => js-api-pygments}/ts/src/types.d.ts (100%) rename {13-js-api-pygments => js-api-pygments}/ts/tsconfig.json (100%) rename {13-js-api-pygments => js-api-pygments}/ts/vitest.config.mts (100%) rename {13-js-api-pygments => js-api-pygments}/ts/worker-configuration.d.ts (100%) rename {13-js-api-pygments => js-api-pygments}/ts/wrangler.jsonc (100%) rename {05-langchain => langchain}/README.md (84%) rename {05-langchain => langchain}/package.json (100%) rename {05-langchain => langchain}/pyproject.toml (100%) rename {05-langchain => langchain}/src/worker.py (100%) rename {05-langchain => langchain}/wrangler.jsonc (100%) rename {11-opengraph => opengraph}/README.md (97%) rename {11-opengraph => opengraph}/package.json (100%) rename {11-opengraph => opengraph}/pyproject.toml (100%) rename {11-opengraph => opengraph}/src/entry.py (100%) rename {11-opengraph => opengraph}/wrangler.jsonc (100%) rename {04-query-d1 => query-d1}/README.md (92%) rename {04-query-d1 => query-d1}/db_init.sql (100%) rename {04-query-d1 => query-d1}/package.json (100%) rename {04-query-d1 => query-d1}/pyproject.toml (100%) rename {04-query-d1 => query-d1}/src/entry.py (100%) rename {04-query-d1 => query-d1}/wrangler.jsonc (100%) rename {16-sync-http-clients => sync-http-clients}/README.md (94%) rename {16-sync-http-clients => sync-http-clients}/package.json (100%) rename {16-sync-http-clients => sync-http-clients}/pyproject.toml (100%) rename {16-sync-http-clients => sync-http-clients}/src/entry.py (100%) rename {16-sync-http-clients => sync-http-clients}/wrangler.jsonc (100%) rename {14-websocket-stream-consumer => websocket-stream-consumer}/README.md (94%) rename {14-websocket-stream-consumer => websocket-stream-consumer}/package.json (100%) rename {14-websocket-stream-consumer => websocket-stream-consumer}/pyproject.toml (100%) rename {14-websocket-stream-consumer => websocket-stream-consumer}/src/entry.py (100%) rename {14-websocket-stream-consumer => websocket-stream-consumer}/wrangler.jsonc (100%) rename {09-workers-ai => workers-ai}/README.md (87%) rename {09-workers-ai => workers-ai}/package.json (100%) rename {09-workers-ai => workers-ai}/pyproject.toml (100%) rename {09-workers-ai => workers-ai}/src/entry.py (100%) rename {09-workers-ai => workers-ai}/wrangler.jsonc (100%) rename {10-workflows => workflows}/README.md (87%) rename {10-workflows => workflows}/package.json (100%) rename {10-workflows => workflows}/pyproject.toml (100%) rename {10-workflows => workflows}/src/entry.py (100%) rename {10-workflows => workflows}/wrangler.jsonc (100%) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0486bdf..9a62edc 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -24,7 +24,7 @@ jobs: - name: Install dependencies run: | uv sync --dev - cd 01-hello && uv run pywrangler dev --help + cd hello && uv run pywrangler dev --help - name: Run tests run: uv run pytest -vv diff --git a/README.md b/README.md index af04d58..5c67c4b 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ This is a collection of examples for [writing Cloudflare Workers in Python](http ## Get started 1. `git clone https://github.com/cloudflare/python-workers-examples` -2. `cd 01-hello` +2. `cd hello` 3. `uvx --from workers-py pywrangler dev` 4. Press the `b` key to open a browser tab, and make a request to your Worker @@ -15,25 +15,25 @@ Need to deploy your Worker to Cloudflare? Python Workers are in open beta and ha ## Examples -- [**`01-hello/`**](01-hello) — the most basic Python Worker -- [**`02-binding/`**](02-binding) — shows how [bindings](https://developers.cloudflare.com/workers/configuration/bindings/) work in Python Workers. Put a key into Workers KV, and then read it. -- [**`03-fastapi/`**](03-fastapi) — demonstrates how to use the [FastAPI](https://fastapi.tiangolo.com/) package with Python Workers -- [**`04-query-d1/`**](04-query-d1) - shows how to query D1 with Python Workers -- [**`05-langchain/`**](05-langchain) — demonstrates how to use the [LangChain](https://pypi.org/project/langchain/) package with Python Workers. Currently broken. -- [**`06-assets/`**](06-assets) — An example with an assets binding. -- [**`07-durable-objects/`**](07-durable-objects) — An example with storing state in a [Durable Object](https://developers.cloudflare.com/durable-objects/). -- [**`08-cron/`**](08-cron) — shows a simple [cron job](https://developers.cloudflare.com/workers/configuration/cron-triggers/). -- [**`09-workers-ai/`**](09-workers-ai) makes a call [Workers AI](https://developers.cloudflare.com/workers-ai/) to run inference on Cloudflare's Global Network. -- [**`10-workflows/`**](10-workflows) — shows a durable [Workflows](https://developers.cloudflare.com/workflows/) example. -- [**`11-opengraph/`**](11-opengraph) — shows how to use [HTMLRewriter](https://developers.cloudflare.com/workers/runtime-apis/html-rewriter/) to generate OpenGraph images with Python Workers. -- [**`12-image-gen/`**](12-image-gen) — shows how to use [Pillow](https://pillow.readthedocs.io/en/stable/) to generate images with Python Workers. -- [**`13-js-api-pygments/`**](13-js-api-pygments) — shows how to use [Pygments](https://pygments.org/) to highlight code with Python Workers. -- [**`14-websocket-stream-consumer/`**](14-websocket-stream-consumer) — shows how to use [WebSocket](https://developers.cloudflare.com/workers/runtime-apis/websockets/) to consume a stream of data with Python Workers. -- [**`15-chatroom/`**](15-chatroom) - A real-time chatroom using WebSocket. -- [**`16-sync-http-clients/`**](16-sync-http-clients) — demonstrates outbound HTTP with synchronous Python clients (`requests`, `urllib3`, and `httpx.Client`). -- [**`17-dynamic-py-py/`**](17-dynamic-py-py) — shows how to load and run a Python Worker dynamically at runtime using a [Worker Loader](https://developers.cloudflare.com/workers/runtime-apis/bindings/worker-loader/) binding. -- [**`18-django/`**](18-django) — runs a naive Django WSGI application directly on Python Workers. -- [**`19-django-todo-d1/`**](19-django-todo-d1) — uses Django with D1 for a basic TODO application. +- [**`hello/`**](hello) — the most basic Python Worker +- [**`binding/`**](binding) — shows how [bindings](https://developers.cloudflare.com/workers/configuration/bindings/) work in Python Workers. Put a key into Workers KV, and then read it. +- [**`fastapi/`**](fastapi) — demonstrates how to use the [FastAPI](https://fastapi.tiangolo.com/) package with Python Workers +- [**`query-d1/`**](query-d1) - shows how to query D1 with Python Workers +- [**`langchain/`**](langchain) — demonstrates how to use the [LangChain](https://pypi.org/project/langchain/) package with Python Workers. Currently broken. +- [**`assets/`**](assets) — An example with an assets binding. +- [**`durable-objects/`**](durable-objects) — An example with storing state in a [Durable Object](https://developers.cloudflare.com/durable-objects/). +- [**`cron/`**](cron) — shows a simple [cron job](https://developers.cloudflare.com/workers/configuration/cron-triggers/). +- [**`workers-ai/`**](workers-ai) makes a call [Workers AI](https://developers.cloudflare.com/workers-ai/) to run inference on Cloudflare's Global Network. +- [**`workflows/`**](workflows) — shows a durable [Workflows](https://developers.cloudflare.com/workflows/) example. +- [**`opengraph/`**](opengraph) — shows how to use [HTMLRewriter](https://developers.cloudflare.com/workers/runtime-apis/html-rewriter/) to generate OpenGraph images with Python Workers. +- [**`image-gen/`**](image-gen) — shows how to use [Pillow](https://pillow.readthedocs.io/en/stable/) to generate images with Python Workers. +- [**`js-api-pygments/`**](js-api-pygments) — shows how to use [Pygments](https://pygments.org/) to highlight code with Python Workers. +- [**`websocket-stream-consumer/`**](websocket-stream-consumer) — shows how to use [WebSocket](https://developers.cloudflare.com/workers/runtime-apis/websockets/) to consume a stream of data with Python Workers. +- [**`chatroom/`**](chatroom) - A real-time chatroom using WebSocket. +- [**`sync-http-clients/`**](sync-http-clients) — demonstrates outbound HTTP with synchronous Python clients (`requests`, `urllib3`, and `httpx.Client`). +- [**`dynamic-py-py/`**](dynamic-py-py) — shows how to load and run a Python Worker dynamically at runtime using a [Worker Loader](https://developers.cloudflare.com/workers/runtime-apis/bindings/worker-loader/) binding. +- [**`django/`**](django) — runs a naive Django WSGI application directly on Python Workers. +- [**`django-todo-d1/`**](django-todo-d1) — uses Django with D1 for a basic TODO application. diff --git a/06-assets/README.md b/assets/README.md similarity index 91% rename from 06-assets/README.md rename to assets/README.md index ecc08fb..05e28b6 100644 --- a/06-assets/README.md +++ b/assets/README.md @@ -1,6 +1,6 @@ # Assets Handling Example -[![Deploy to Cloudflare](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/cloudflare/python-workers-examples/tree/main/06-assets) +[![Deploy to Cloudflare](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/cloudflare/python-workers-examples/tree/main/assets) Warning: Python support in Workers is experimental and things will break. This example is meant for reference only right now; you should be prepared to update diff --git a/06-assets/assets/favicon.ico b/assets/assets/favicon.ico similarity index 100% rename from 06-assets/assets/favicon.ico rename to assets/assets/favicon.ico diff --git a/06-assets/assets/image.svg b/assets/assets/image.svg similarity index 100% rename from 06-assets/assets/image.svg rename to assets/assets/image.svg diff --git a/06-assets/assets/index.html b/assets/assets/index.html similarity index 100% rename from 06-assets/assets/index.html rename to assets/assets/index.html diff --git a/06-assets/assets/painting.jpg b/assets/assets/painting.jpg similarity index 100% rename from 06-assets/assets/painting.jpg rename to assets/assets/painting.jpg diff --git a/06-assets/assets/script.js b/assets/assets/script.js similarity index 100% rename from 06-assets/assets/script.js rename to assets/assets/script.js diff --git a/06-assets/assets/style.css b/assets/assets/style.css similarity index 100% rename from 06-assets/assets/style.css rename to assets/assets/style.css diff --git a/06-assets/package.json b/assets/package.json similarity index 100% rename from 06-assets/package.json rename to assets/package.json diff --git a/06-assets/pyproject.toml b/assets/pyproject.toml similarity index 100% rename from 06-assets/pyproject.toml rename to assets/pyproject.toml diff --git a/06-assets/src/worker.py b/assets/src/worker.py similarity index 100% rename from 06-assets/src/worker.py rename to assets/src/worker.py diff --git a/06-assets/wrangler.jsonc b/assets/wrangler.jsonc similarity index 100% rename from 06-assets/wrangler.jsonc rename to assets/wrangler.jsonc diff --git a/02-binding/README.md b/binding/README.md similarity index 91% rename from 02-binding/README.md rename to binding/README.md index d03042a..46e60a2 100644 --- a/02-binding/README.md +++ b/binding/README.md @@ -1,6 +1,6 @@ # Environment Binding Example -[![Deploy to Cloudflare](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/cloudflare/python-workers-examples/tree/main/02-binding) +[![Deploy to Cloudflare](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/cloudflare/python-workers-examples/tree/main/binding) Warning: Python support in Workers is experimental and things will break. This example is meant for reference only right now; you should be prepared to update diff --git a/02-binding/package.json b/binding/package.json similarity index 100% rename from 02-binding/package.json rename to binding/package.json diff --git a/02-binding/pyproject.toml b/binding/pyproject.toml similarity index 100% rename from 02-binding/pyproject.toml rename to binding/pyproject.toml diff --git a/02-binding/src/entry.py b/binding/src/entry.py similarity index 100% rename from 02-binding/src/entry.py rename to binding/src/entry.py diff --git a/02-binding/wrangler.jsonc b/binding/wrangler.jsonc similarity index 100% rename from 02-binding/wrangler.jsonc rename to binding/wrangler.jsonc diff --git a/15-chatroom/README.md b/chatroom/README.md similarity index 89% rename from 15-chatroom/README.md rename to chatroom/README.md index 6292a15..8ddda1e 100644 --- a/15-chatroom/README.md +++ b/chatroom/README.md @@ -1,6 +1,6 @@ # WebSocket chatroom -[![Deploy to Cloudflare](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/cloudflare/python-workers-examples/tree/main/15-chatroom) +[![Deploy to Cloudflare](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/cloudflare/python-workers-examples/tree/main/chatroom) ## How to Run diff --git a/15-chatroom/package.json b/chatroom/package.json similarity index 100% rename from 15-chatroom/package.json rename to chatroom/package.json diff --git a/15-chatroom/pyproject.toml b/chatroom/pyproject.toml similarity index 100% rename from 15-chatroom/pyproject.toml rename to chatroom/pyproject.toml diff --git a/15-chatroom/src/chatroom.html b/chatroom/src/chatroom.html similarity index 100% rename from 15-chatroom/src/chatroom.html rename to chatroom/src/chatroom.html diff --git a/15-chatroom/src/entry.py b/chatroom/src/entry.py similarity index 100% rename from 15-chatroom/src/entry.py rename to chatroom/src/entry.py diff --git a/15-chatroom/wrangler.jsonc b/chatroom/wrangler.jsonc similarity index 100% rename from 15-chatroom/wrangler.jsonc rename to chatroom/wrangler.jsonc diff --git a/08-cron/README.md b/cron/README.md similarity index 90% rename from 08-cron/README.md rename to cron/README.md index 2eef0d6..81a6e7c 100644 --- a/08-cron/README.md +++ b/cron/README.md @@ -1,6 +1,6 @@ # Cron Example -[![Deploy to Cloudflare](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/cloudflare/python-workers-examples/tree/main/08-cron) +[![Deploy to Cloudflare](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/cloudflare/python-workers-examples/tree/main/cron) ## How to Run diff --git a/08-cron/package.json b/cron/package.json similarity index 100% rename from 08-cron/package.json rename to cron/package.json diff --git a/08-cron/pyproject.toml b/cron/pyproject.toml similarity index 100% rename from 08-cron/pyproject.toml rename to cron/pyproject.toml diff --git a/08-cron/src/entry.py b/cron/src/entry.py similarity index 100% rename from 08-cron/src/entry.py rename to cron/src/entry.py diff --git a/08-cron/wrangler.jsonc b/cron/wrangler.jsonc similarity index 100% rename from 08-cron/wrangler.jsonc rename to cron/wrangler.jsonc diff --git a/19-django-todo-d1/README.md b/django-todo-d1/README.md similarity index 95% rename from 19-django-todo-d1/README.md rename to django-todo-d1/README.md index ecfc61c..c1cb48b 100644 --- a/19-django-todo-d1/README.md +++ b/django-todo-d1/README.md @@ -1,6 +1,6 @@ # Django TODO + D1 Example -[![Deploy to Cloudflare](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/cloudflare/python-workers-examples/tree/main/19-django-todo-d1) +[![Deploy to Cloudflare](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/cloudflare/python-workers-examples/tree/main/django-todo-d1) This example uses Django with [django-cf](https://pypi.org/project/django-cf/) and a D1 database to serve a small TODO API under `/api/*`, plus a static frontend from `public/` served by [Workers Static Assets](https://developers.cloudflare.com/workers/static-assets/). diff --git a/19-django-todo-d1/migrations/0001_create_todos.sql b/django-todo-d1/migrations/0001_create_todos.sql similarity index 100% rename from 19-django-todo-d1/migrations/0001_create_todos.sql rename to django-todo-d1/migrations/0001_create_todos.sql diff --git a/19-django-todo-d1/package.json b/django-todo-d1/package.json similarity index 100% rename from 19-django-todo-d1/package.json rename to django-todo-d1/package.json diff --git a/19-django-todo-d1/public/app.js b/django-todo-d1/public/app.js similarity index 100% rename from 19-django-todo-d1/public/app.js rename to django-todo-d1/public/app.js diff --git a/19-django-todo-d1/public/index.html b/django-todo-d1/public/index.html similarity index 100% rename from 19-django-todo-d1/public/index.html rename to django-todo-d1/public/index.html diff --git a/19-django-todo-d1/public/style.css b/django-todo-d1/public/style.css similarity index 100% rename from 19-django-todo-d1/public/style.css rename to django-todo-d1/public/style.css diff --git a/19-django-todo-d1/pyproject.toml b/django-todo-d1/pyproject.toml similarity index 100% rename from 19-django-todo-d1/pyproject.toml rename to django-todo-d1/pyproject.toml diff --git a/19-django-todo-d1/src/entry.py b/django-todo-d1/src/entry.py similarity index 100% rename from 19-django-todo-d1/src/entry.py rename to django-todo-d1/src/entry.py diff --git a/18-django/src/hello_django/__init__.py b/django-todo-d1/src/todo_project/__init__.py similarity index 100% rename from 18-django/src/hello_django/__init__.py rename to django-todo-d1/src/todo_project/__init__.py diff --git a/19-django-todo-d1/src/todo_project/settings.py b/django-todo-d1/src/todo_project/settings.py similarity index 100% rename from 19-django-todo-d1/src/todo_project/settings.py rename to django-todo-d1/src/todo_project/settings.py diff --git a/19-django-todo-d1/src/todo_project/urls.py b/django-todo-d1/src/todo_project/urls.py similarity index 100% rename from 19-django-todo-d1/src/todo_project/urls.py rename to django-todo-d1/src/todo_project/urls.py diff --git a/19-django-todo-d1/src/todo_project/wsgi.py b/django-todo-d1/src/todo_project/wsgi.py similarity index 100% rename from 19-django-todo-d1/src/todo_project/wsgi.py rename to django-todo-d1/src/todo_project/wsgi.py diff --git a/19-django-todo-d1/src/todo_project/__init__.py b/django-todo-d1/src/todos/__init__.py similarity index 100% rename from 19-django-todo-d1/src/todo_project/__init__.py rename to django-todo-d1/src/todos/__init__.py diff --git a/19-django-todo-d1/src/todos/apps.py b/django-todo-d1/src/todos/apps.py similarity index 100% rename from 19-django-todo-d1/src/todos/apps.py rename to django-todo-d1/src/todos/apps.py diff --git a/19-django-todo-d1/src/todos/models.py b/django-todo-d1/src/todos/models.py similarity index 100% rename from 19-django-todo-d1/src/todos/models.py rename to django-todo-d1/src/todos/models.py diff --git a/19-django-todo-d1/src/todos/views.py b/django-todo-d1/src/todos/views.py similarity index 100% rename from 19-django-todo-d1/src/todos/views.py rename to django-todo-d1/src/todos/views.py diff --git a/19-django-todo-d1/wrangler.jsonc b/django-todo-d1/wrangler.jsonc similarity index 100% rename from 19-django-todo-d1/wrangler.jsonc rename to django-todo-d1/wrangler.jsonc diff --git a/18-django/README.md b/django/README.md similarity index 91% rename from 18-django/README.md rename to django/README.md index 5733730..c3fe6c1 100644 --- a/18-django/README.md +++ b/django/README.md @@ -1,6 +1,6 @@ # Django WSGI Example -[![Deploy to Cloudflare](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/cloudflare/python-workers-examples/tree/main/18-django) +[![Deploy to Cloudflare](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/cloudflare/python-workers-examples/tree/main/django) This example runs a small, conventional Django project directly on Cloudflare Workers using Django's WSGI application. diff --git a/18-django/package.json b/django/package.json similarity index 100% rename from 18-django/package.json rename to django/package.json diff --git a/18-django/pyproject.toml b/django/pyproject.toml similarity index 100% rename from 18-django/pyproject.toml rename to django/pyproject.toml diff --git a/18-django/src/entry.py b/django/src/entry.py similarity index 100% rename from 18-django/src/entry.py rename to django/src/entry.py diff --git a/19-django-todo-d1/src/todos/__init__.py b/django/src/hello_django/__init__.py similarity index 100% rename from 19-django-todo-d1/src/todos/__init__.py rename to django/src/hello_django/__init__.py diff --git a/18-django/src/hello_django/settings.py b/django/src/hello_django/settings.py similarity index 100% rename from 18-django/src/hello_django/settings.py rename to django/src/hello_django/settings.py diff --git a/18-django/src/hello_django/urls.py b/django/src/hello_django/urls.py similarity index 100% rename from 18-django/src/hello_django/urls.py rename to django/src/hello_django/urls.py diff --git a/18-django/src/hello_django/wsgi.py b/django/src/hello_django/wsgi.py similarity index 100% rename from 18-django/src/hello_django/wsgi.py rename to django/src/hello_django/wsgi.py diff --git a/18-django/wrangler.jsonc b/django/wrangler.jsonc similarity index 100% rename from 18-django/wrangler.jsonc rename to django/wrangler.jsonc diff --git a/07-durable-objects/README.md b/durable-objects/README.md similarity index 87% rename from 07-durable-objects/README.md rename to durable-objects/README.md index ed71726..90873b4 100644 --- a/07-durable-objects/README.md +++ b/durable-objects/README.md @@ -1,6 +1,6 @@ # Durable Objects Example -[![Deploy to Cloudflare](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/cloudflare/python-workers-examples/tree/main/07-durable-objects) +[![Deploy to Cloudflare](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/cloudflare/python-workers-examples/tree/main/durable-objects) ## How to Run diff --git a/07-durable-objects/package.json b/durable-objects/package.json similarity index 100% rename from 07-durable-objects/package.json rename to durable-objects/package.json diff --git a/07-durable-objects/pyproject.toml b/durable-objects/pyproject.toml similarity index 100% rename from 07-durable-objects/pyproject.toml rename to durable-objects/pyproject.toml diff --git a/07-durable-objects/src/entry.py b/durable-objects/src/entry.py similarity index 100% rename from 07-durable-objects/src/entry.py rename to durable-objects/src/entry.py diff --git a/07-durable-objects/wrangler.jsonc b/durable-objects/wrangler.jsonc similarity index 100% rename from 07-durable-objects/wrangler.jsonc rename to durable-objects/wrangler.jsonc diff --git a/17-dynamic-py-py/README.md b/dynamic-py-py/README.md similarity index 92% rename from 17-dynamic-py-py/README.md rename to dynamic-py-py/README.md index 7ca9db2..3b27766 100644 --- a/17-dynamic-py-py/README.md +++ b/dynamic-py-py/README.md @@ -1,6 +1,6 @@ -# 17-dynamic-py-py — Python Worker loads a Python Dynamic Worker +# dynamic-py-py — Python Worker loads a Python Dynamic Worker -[![Deploy to Cloudflare](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/cloudflare/python-workers-examples/tree/main/17-dynamic-py-py) +[![Deploy to Cloudflare](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/cloudflare/python-workers-examples/tree/main/dynamic-py-py) This example shows how a Python Worker can use the [Worker Loader](https://developers.cloudflare.com/dynamic-workers/) binding to dynamically load and execute another Python Worker at runtime. diff --git a/17-dynamic-py-py/package.json b/dynamic-py-py/package.json similarity index 100% rename from 17-dynamic-py-py/package.json rename to dynamic-py-py/package.json diff --git a/17-dynamic-py-py/pyproject.toml b/dynamic-py-py/pyproject.toml similarity index 100% rename from 17-dynamic-py-py/pyproject.toml rename to dynamic-py-py/pyproject.toml diff --git a/17-dynamic-py-py/src/entry.py b/dynamic-py-py/src/entry.py similarity index 100% rename from 17-dynamic-py-py/src/entry.py rename to dynamic-py-py/src/entry.py diff --git a/17-dynamic-py-py/wrangler.jsonc b/dynamic-py-py/wrangler.jsonc similarity index 100% rename from 17-dynamic-py-py/wrangler.jsonc rename to dynamic-py-py/wrangler.jsonc diff --git a/03-fastapi/README.md b/fastapi/README.md similarity index 88% rename from 03-fastapi/README.md rename to fastapi/README.md index 326ca16..53815fe 100644 --- a/03-fastapi/README.md +++ b/fastapi/README.md @@ -1,6 +1,6 @@ # FastAPI + Jinja2 Example -[![Deploy to Cloudflare](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/cloudflare/python-workers-examples/tree/main/03-fastapi) +[![Deploy to Cloudflare](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/cloudflare/python-workers-examples/tree/main/fastapi) ## How to Run diff --git a/03-fastapi/package.json b/fastapi/package.json similarity index 100% rename from 03-fastapi/package.json rename to fastapi/package.json diff --git a/03-fastapi/pyproject.toml b/fastapi/pyproject.toml similarity index 100% rename from 03-fastapi/pyproject.toml rename to fastapi/pyproject.toml diff --git a/03-fastapi/src/worker.py b/fastapi/src/worker.py similarity index 100% rename from 03-fastapi/src/worker.py rename to fastapi/src/worker.py diff --git a/03-fastapi/wrangler.jsonc b/fastapi/wrangler.jsonc similarity index 100% rename from 03-fastapi/wrangler.jsonc rename to fastapi/wrangler.jsonc diff --git a/01-hello/README.md b/hello/README.md similarity index 92% rename from 01-hello/README.md rename to hello/README.md index adf6de0..bbe29c5 100644 --- a/01-hello/README.md +++ b/hello/README.md @@ -1,6 +1,6 @@ # Hello World Example -[![Deploy to Cloudflare](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/cloudflare/python-workers-examples/tree/main/01-hello) +[![Deploy to Cloudflare](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/cloudflare/python-workers-examples/tree/main/hello) Warning: Python support in Workers is experimental and things will break. This example is meant for reference only right now; you should be prepared to update diff --git a/01-hello/package.json b/hello/package.json similarity index 100% rename from 01-hello/package.json rename to hello/package.json diff --git a/01-hello/pyproject.toml b/hello/pyproject.toml similarity index 100% rename from 01-hello/pyproject.toml rename to hello/pyproject.toml diff --git a/01-hello/src/entry.py b/hello/src/entry.py similarity index 100% rename from 01-hello/src/entry.py rename to hello/src/entry.py diff --git a/01-hello/wrangler.jsonc b/hello/wrangler.jsonc similarity index 100% rename from 01-hello/wrangler.jsonc rename to hello/wrangler.jsonc diff --git a/12-image-gen/README.md b/image-gen/README.md similarity index 96% rename from 12-image-gen/README.md rename to image-gen/README.md index a351dbc..e05d20f 100644 --- a/12-image-gen/README.md +++ b/image-gen/README.md @@ -1,6 +1,6 @@ # Image Generation with Pillow Example -[![Deploy to Cloudflare](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/cloudflare/python-workers-examples/tree/main/12-image-gen) +[![Deploy to Cloudflare](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/cloudflare/python-workers-examples/tree/main/image-gen) This example demonstrates how to build a Python Worker that dynamically generates images using the Pillow (PIL) library. diff --git a/12-image-gen/package.json b/image-gen/package.json similarity index 100% rename from 12-image-gen/package.json rename to image-gen/package.json diff --git a/12-image-gen/pyproject.toml b/image-gen/pyproject.toml similarity index 100% rename from 12-image-gen/pyproject.toml rename to image-gen/pyproject.toml diff --git a/12-image-gen/src/entry.py b/image-gen/src/entry.py similarity index 100% rename from 12-image-gen/src/entry.py rename to image-gen/src/entry.py diff --git a/12-image-gen/src/index.html b/image-gen/src/index.html similarity index 100% rename from 12-image-gen/src/index.html rename to image-gen/src/index.html diff --git a/12-image-gen/wrangler.jsonc b/image-gen/wrangler.jsonc similarity index 100% rename from 12-image-gen/wrangler.jsonc rename to image-gen/wrangler.jsonc diff --git a/13-js-api-pygments/README.md b/js-api-pygments/README.md similarity index 93% rename from 13-js-api-pygments/README.md rename to js-api-pygments/README.md index 516e517..7ab8160 100644 --- a/13-js-api-pygments/README.md +++ b/js-api-pygments/README.md @@ -1,4 +1,4 @@ -# 13-js-api-pygments – Python RPC Server & TS Client +# js-api-pygments – Python RPC Server & TS Client This example shows how to use **JS RPC** to connect a **Python Worker** (server) to a **TypeScript Worker** (client). @@ -23,7 +23,7 @@ The Python Worker exposes a Pygments-powered `highlight_code` RPC method. The TS ### 1. Install and run the Python RPC server ```bash -cd 13-js-api-pygments/py +cd js-api-pygments/py uv run pywrangler dev ``` @@ -34,7 +34,7 @@ This starts the Python Worker defined in `py/wrangler.jsonc`. Open a **second terminal**: ```bash -cd 13-js-api-pygments/ts +cd js-api-pygments/ts npm run dev ``` diff --git a/13-js-api-pygments/py/package.json b/js-api-pygments/py/package.json similarity index 100% rename from 13-js-api-pygments/py/package.json rename to js-api-pygments/py/package.json diff --git a/13-js-api-pygments/py/pyproject.toml b/js-api-pygments/py/pyproject.toml similarity index 100% rename from 13-js-api-pygments/py/pyproject.toml rename to js-api-pygments/py/pyproject.toml diff --git a/13-js-api-pygments/py/src/entry.py b/js-api-pygments/py/src/entry.py similarity index 100% rename from 13-js-api-pygments/py/src/entry.py rename to js-api-pygments/py/src/entry.py diff --git a/13-js-api-pygments/py/wrangler.jsonc b/js-api-pygments/py/wrangler.jsonc similarity index 100% rename from 13-js-api-pygments/py/wrangler.jsonc rename to js-api-pygments/py/wrangler.jsonc diff --git a/13-js-api-pygments/ts/.gitignore b/js-api-pygments/ts/.gitignore similarity index 100% rename from 13-js-api-pygments/ts/.gitignore rename to js-api-pygments/ts/.gitignore diff --git a/13-js-api-pygments/ts/.vscode/settings.json b/js-api-pygments/ts/.vscode/settings.json similarity index 100% rename from 13-js-api-pygments/ts/.vscode/settings.json rename to js-api-pygments/ts/.vscode/settings.json diff --git a/13-js-api-pygments/ts/package-lock.json b/js-api-pygments/ts/package-lock.json similarity index 100% rename from 13-js-api-pygments/ts/package-lock.json rename to js-api-pygments/ts/package-lock.json diff --git a/13-js-api-pygments/ts/package.json b/js-api-pygments/ts/package.json similarity index 100% rename from 13-js-api-pygments/ts/package.json rename to js-api-pygments/ts/package.json diff --git a/13-js-api-pygments/ts/src/index.ts b/js-api-pygments/ts/src/index.ts similarity index 100% rename from 13-js-api-pygments/ts/src/index.ts rename to js-api-pygments/ts/src/index.ts diff --git a/13-js-api-pygments/ts/src/template.html b/js-api-pygments/ts/src/template.html similarity index 100% rename from 13-js-api-pygments/ts/src/template.html rename to js-api-pygments/ts/src/template.html diff --git a/13-js-api-pygments/ts/src/types.d.ts b/js-api-pygments/ts/src/types.d.ts similarity index 100% rename from 13-js-api-pygments/ts/src/types.d.ts rename to js-api-pygments/ts/src/types.d.ts diff --git a/13-js-api-pygments/ts/tsconfig.json b/js-api-pygments/ts/tsconfig.json similarity index 100% rename from 13-js-api-pygments/ts/tsconfig.json rename to js-api-pygments/ts/tsconfig.json diff --git a/13-js-api-pygments/ts/vitest.config.mts b/js-api-pygments/ts/vitest.config.mts similarity index 100% rename from 13-js-api-pygments/ts/vitest.config.mts rename to js-api-pygments/ts/vitest.config.mts diff --git a/13-js-api-pygments/ts/worker-configuration.d.ts b/js-api-pygments/ts/worker-configuration.d.ts similarity index 100% rename from 13-js-api-pygments/ts/worker-configuration.d.ts rename to js-api-pygments/ts/worker-configuration.d.ts diff --git a/13-js-api-pygments/ts/wrangler.jsonc b/js-api-pygments/ts/wrangler.jsonc similarity index 100% rename from 13-js-api-pygments/ts/wrangler.jsonc rename to js-api-pygments/ts/wrangler.jsonc diff --git a/05-langchain/README.md b/langchain/README.md similarity index 84% rename from 05-langchain/README.md rename to langchain/README.md index e77b742..8f4e83b 100644 --- a/05-langchain/README.md +++ b/langchain/README.md @@ -17,4 +17,4 @@ Because this example uses a remote Workers AI binding, local development require ## Notes -- If you want the lower-level direct binding example, see [`09-workers-ai/`](../09-workers-ai). +- If you want the lower-level direct binding example, see [`workers-ai/`](../workers-ai). diff --git a/05-langchain/package.json b/langchain/package.json similarity index 100% rename from 05-langchain/package.json rename to langchain/package.json diff --git a/05-langchain/pyproject.toml b/langchain/pyproject.toml similarity index 100% rename from 05-langchain/pyproject.toml rename to langchain/pyproject.toml diff --git a/05-langchain/src/worker.py b/langchain/src/worker.py similarity index 100% rename from 05-langchain/src/worker.py rename to langchain/src/worker.py diff --git a/05-langchain/wrangler.jsonc b/langchain/wrangler.jsonc similarity index 100% rename from 05-langchain/wrangler.jsonc rename to langchain/wrangler.jsonc diff --git a/11-opengraph/README.md b/opengraph/README.md similarity index 97% rename from 11-opengraph/README.md rename to opengraph/README.md index 3973922..7d45874 100644 --- a/11-opengraph/README.md +++ b/opengraph/README.md @@ -1,6 +1,6 @@ # OpenGraph Meta Tag Injection Example -[![Deploy to Cloudflare](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/cloudflare/python-workers-examples/tree/main/11-opengraph) +[![Deploy to Cloudflare](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/cloudflare/python-workers-examples/tree/main/opengraph) This example demonstrates how to build a Python Worker that dynamically injects OpenGraph meta tags into web pages based on the request path. This is perfect for controlling how your content appears when shared on social media platforms like Facebook, Twitter, LinkedIn, and Slack. diff --git a/11-opengraph/package.json b/opengraph/package.json similarity index 100% rename from 11-opengraph/package.json rename to opengraph/package.json diff --git a/11-opengraph/pyproject.toml b/opengraph/pyproject.toml similarity index 100% rename from 11-opengraph/pyproject.toml rename to opengraph/pyproject.toml diff --git a/11-opengraph/src/entry.py b/opengraph/src/entry.py similarity index 100% rename from 11-opengraph/src/entry.py rename to opengraph/src/entry.py diff --git a/11-opengraph/wrangler.jsonc b/opengraph/wrangler.jsonc similarity index 100% rename from 11-opengraph/wrangler.jsonc rename to opengraph/wrangler.jsonc diff --git a/04-query-d1/README.md b/query-d1/README.md similarity index 92% rename from 04-query-d1/README.md rename to query-d1/README.md index 218f7d6..b0bb100 100644 --- a/04-query-d1/README.md +++ b/query-d1/README.md @@ -1,6 +1,6 @@ # D1 Database Query Example -[![Deploy to Cloudflare](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/cloudflare/python-workers-examples/tree/main/04-query-d1) +[![Deploy to Cloudflare](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/cloudflare/python-workers-examples/tree/main/query-d1) Warning: Python support in Workers is experimental and things will break. This example is meant for reference only right now; you should be prepared to update diff --git a/04-query-d1/db_init.sql b/query-d1/db_init.sql similarity index 100% rename from 04-query-d1/db_init.sql rename to query-d1/db_init.sql diff --git a/04-query-d1/package.json b/query-d1/package.json similarity index 100% rename from 04-query-d1/package.json rename to query-d1/package.json diff --git a/04-query-d1/pyproject.toml b/query-d1/pyproject.toml similarity index 100% rename from 04-query-d1/pyproject.toml rename to query-d1/pyproject.toml diff --git a/04-query-d1/src/entry.py b/query-d1/src/entry.py similarity index 100% rename from 04-query-d1/src/entry.py rename to query-d1/src/entry.py diff --git a/04-query-d1/wrangler.jsonc b/query-d1/wrangler.jsonc similarity index 100% rename from 04-query-d1/wrangler.jsonc rename to query-d1/wrangler.jsonc diff --git a/16-sync-http-clients/README.md b/sync-http-clients/README.md similarity index 94% rename from 16-sync-http-clients/README.md rename to sync-http-clients/README.md index f3572c0..9f2bfb3 100644 --- a/16-sync-http-clients/README.md +++ b/sync-http-clients/README.md @@ -1,6 +1,6 @@ # Sync HTTP Clients Example -[![Deploy to Cloudflare](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/cloudflare/python-workers-examples/tree/main/16-sync-http-clients) +[![Deploy to Cloudflare](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/cloudflare/python-workers-examples/tree/main/sync-http-clients) This example demonstrates outbound HTTP from a Python Worker using synchronous Python HTTP clients known to work in the current runtime: diff --git a/16-sync-http-clients/package.json b/sync-http-clients/package.json similarity index 100% rename from 16-sync-http-clients/package.json rename to sync-http-clients/package.json diff --git a/16-sync-http-clients/pyproject.toml b/sync-http-clients/pyproject.toml similarity index 100% rename from 16-sync-http-clients/pyproject.toml rename to sync-http-clients/pyproject.toml diff --git a/16-sync-http-clients/src/entry.py b/sync-http-clients/src/entry.py similarity index 100% rename from 16-sync-http-clients/src/entry.py rename to sync-http-clients/src/entry.py diff --git a/16-sync-http-clients/wrangler.jsonc b/sync-http-clients/wrangler.jsonc similarity index 100% rename from 16-sync-http-clients/wrangler.jsonc rename to sync-http-clients/wrangler.jsonc diff --git a/tests/conftest.py b/tests/conftest.py index 3ab5770..369abaa 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -36,7 +36,7 @@ def pywrangler_dev_server(directory: str): # Wait for server to be ready ready = False timeout = 30 - if "CI" in os.environ and directory.startswith("01"): + if "CI" in os.environ and directory == "hello": # Starting the server the first time takes a really long time in CI. # TODO: Why does this happen? timeout = 300 @@ -76,7 +76,7 @@ def dev_server(request): return test_name = request.node.name - # Extract directory name from test name (e.g., "test_01_hello" -> "01-hello") + # Extract directory name from test name (e.g., "test_hello" -> "hello") dir_name = test_name.replace("test_", "").replace("_", "-") with pywrangler_dev_server(dir_name) as port: diff --git a/tests/test_examples.py b/tests/test_examples.py index aa23ba1..897ea9d 100644 --- a/tests/test_examples.py +++ b/tests/test_examples.py @@ -6,7 +6,7 @@ from conftest import REPO_ROOT -def test_01_hello(dev_server): +def test_hello(dev_server): port = dev_server response = requests.get(f"http://localhost:{port}") assert response.status_code == 200 @@ -14,7 +14,7 @@ def test_01_hello(dev_server): assert response.headers["content-type"] == "text/plain;charset=UTF-8" -def test_02_binding(dev_server): +def test_binding(dev_server): port = dev_server response = requests.get(f"http://localhost:{port}") assert response.status_code == 200 @@ -22,7 +22,7 @@ def test_02_binding(dev_server): assert response.headers["content-type"] == "text/plain;charset=UTF-8" -def test_03_fastapi(dev_server): +def test_fastapi(dev_server): port = dev_server response = requests.get(f"http://localhost:{port}") assert response.status_code == 200 @@ -57,13 +57,13 @@ def init_db(): "--file", "db_init.sql", ], - cwd=REPO_ROOT / "04-query-d1", + cwd=REPO_ROOT / "query-d1", check=True, ) @pytest.mark.xfail(reason="500 error, fixme") -def test_04_query_d1(init_db, dev_server): +def test_query_d1(init_db, dev_server): port = dev_server response = requests.get(f"http://localhost:{port}") assert response.status_code == 200 @@ -75,11 +75,11 @@ def test_04_query_d1(init_db, dev_server): @pytest.mark.xfail(reason="Requires remote bindings") -def test_05_langchain(dev_server): +def test_langchain(dev_server): pass -def test_06_assets(dev_server): +def test_assets(dev_server): port = dev_server pairs = [ ("", "text/html; charset=utf-8"), @@ -96,7 +96,7 @@ def test_06_assets(dev_server): assert response.headers["content-type"] == content_type -def test_07_durable_objects(dev_server): +def test_durable_objects(dev_server): port = dev_server response = requests.get(f"http://localhost:{port}/room-1/show") assert response.status_code == 200 @@ -112,7 +112,7 @@ def test_07_durable_objects(dev_server): assert response.text == "No messages" -def test_16_sync_http_clients(dev_server): +def test_sync_http_clients(dev_server): port = dev_server response = requests.get(f"http://localhost:{port}/sync") assert response.status_code == 200 @@ -130,7 +130,7 @@ def test_16_sync_http_clients(dev_server): assert result["saw_expected_text"] is True -def test_08_cron(dev_server): +def test_cron(dev_server): port = dev_server response = requests.get(f"http://localhost:{port}") assert response.status_code == 200 @@ -139,7 +139,7 @@ def test_08_cron(dev_server): @pytest.mark.xfail(reason="AI binding may not work in local dev") -def test_09_workers_ai(dev_server): +def test_workers_ai(dev_server): port = dev_server response = requests.get(f"http://localhost:{port}") assert response.status_code == 200 @@ -149,7 +149,7 @@ def test_09_workers_ai(dev_server): @pytest.mark.xfail(reason="500 error, fixme") -def test_10_workflows(dev_server): +def test_workflows(dev_server): port = dev_server # Test default endpoint response = requests.get(f"http://localhost:{port}") @@ -173,7 +173,7 @@ def test_10_workflows(dev_server): assert isinstance(status, dict) -def test_18_django(dev_server): +def test_django(dev_server): port = dev_server response = requests.get(f"http://localhost:{port}") assert response.status_code == 200 @@ -182,7 +182,7 @@ def test_18_django(dev_server): @pytest.fixture -def init_19_django_todo_d1_db(): +def init_django_todo_d1_db(): subprocess.run( [ "uv", @@ -194,12 +194,12 @@ def init_19_django_todo_d1_db(): "django-todo-d1", "--local", ], - cwd=REPO_ROOT / "19-django-todo-d1", + cwd=REPO_ROOT / "django-todo-d1", check=True, ) -def test_19_django_todo_d1(init_19_django_todo_d1_db, dev_server): +def test_django_todo_d1(init_django_todo_d1_db, dev_server): port = dev_server response = requests.get(f"http://localhost:{port}/api/health/") assert response.status_code == 200 diff --git a/14-websocket-stream-consumer/README.md b/websocket-stream-consumer/README.md similarity index 94% rename from 14-websocket-stream-consumer/README.md rename to websocket-stream-consumer/README.md index 774e140..407eb42 100644 --- a/14-websocket-stream-consumer/README.md +++ b/websocket-stream-consumer/README.md @@ -1,6 +1,6 @@ # WebSocket Stream Consumer - Bluesky Firehose -[![Deploy to Cloudflare](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/cloudflare/python-workers-examples/tree/main/14-websocket-stream-consumer) +[![Deploy to Cloudflare](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/cloudflare/python-workers-examples/tree/main/websocket-stream-consumer) This example demonstrates a long-running Durable Object that connects to the Bluesky firehose (via Jetstream) and filters for post events, with rate limiting to print at most 1 per second. diff --git a/14-websocket-stream-consumer/package.json b/websocket-stream-consumer/package.json similarity index 100% rename from 14-websocket-stream-consumer/package.json rename to websocket-stream-consumer/package.json diff --git a/14-websocket-stream-consumer/pyproject.toml b/websocket-stream-consumer/pyproject.toml similarity index 100% rename from 14-websocket-stream-consumer/pyproject.toml rename to websocket-stream-consumer/pyproject.toml diff --git a/14-websocket-stream-consumer/src/entry.py b/websocket-stream-consumer/src/entry.py similarity index 100% rename from 14-websocket-stream-consumer/src/entry.py rename to websocket-stream-consumer/src/entry.py diff --git a/14-websocket-stream-consumer/wrangler.jsonc b/websocket-stream-consumer/wrangler.jsonc similarity index 100% rename from 14-websocket-stream-consumer/wrangler.jsonc rename to websocket-stream-consumer/wrangler.jsonc diff --git a/09-workers-ai/README.md b/workers-ai/README.md similarity index 87% rename from 09-workers-ai/README.md rename to workers-ai/README.md index e1ad20d..0645297 100644 --- a/09-workers-ai/README.md +++ b/workers-ai/README.md @@ -1,6 +1,6 @@ # Workers AI Example -[![Deploy to Cloudflare](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/cloudflare/python-workers-examples/tree/main/09-workers-ai) +[![Deploy to Cloudflare](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/cloudflare/python-workers-examples/tree/main/workers-ai) ## How to Run diff --git a/09-workers-ai/package.json b/workers-ai/package.json similarity index 100% rename from 09-workers-ai/package.json rename to workers-ai/package.json diff --git a/09-workers-ai/pyproject.toml b/workers-ai/pyproject.toml similarity index 100% rename from 09-workers-ai/pyproject.toml rename to workers-ai/pyproject.toml diff --git a/09-workers-ai/src/entry.py b/workers-ai/src/entry.py similarity index 100% rename from 09-workers-ai/src/entry.py rename to workers-ai/src/entry.py diff --git a/09-workers-ai/wrangler.jsonc b/workers-ai/wrangler.jsonc similarity index 100% rename from 09-workers-ai/wrangler.jsonc rename to workers-ai/wrangler.jsonc diff --git a/10-workflows/README.md b/workflows/README.md similarity index 87% rename from 10-workflows/README.md rename to workflows/README.md index 67defac..ae23c56 100644 --- a/10-workflows/README.md +++ b/workflows/README.md @@ -1,6 +1,6 @@ # Workflows Example -[![Deploy to Cloudflare](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/cloudflare/python-workers-examples/tree/main/10-workflows) +[![Deploy to Cloudflare](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/cloudflare/python-workers-examples/tree/main/workflows) ## How to Run diff --git a/10-workflows/package.json b/workflows/package.json similarity index 100% rename from 10-workflows/package.json rename to workflows/package.json diff --git a/10-workflows/pyproject.toml b/workflows/pyproject.toml similarity index 100% rename from 10-workflows/pyproject.toml rename to workflows/pyproject.toml diff --git a/10-workflows/src/entry.py b/workflows/src/entry.py similarity index 100% rename from 10-workflows/src/entry.py rename to workflows/src/entry.py diff --git a/10-workflows/wrangler.jsonc b/workflows/wrangler.jsonc similarity index 100% rename from 10-workflows/wrangler.jsonc rename to workflows/wrangler.jsonc From cbbf82f69c935b29faf0ce9aa1a003bd2c002e68 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 21 Aug 2026 16:09:28 +0000 Subject: [PATCH 2/2] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- fastapi/src/worker.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fastapi/src/worker.py b/fastapi/src/worker.py index 446c134..d096b20 100644 --- a/fastapi/src/worker.py +++ b/fastapi/src/worker.py @@ -1,7 +1,8 @@ import jinja2 -from fastapi import FastAPI, Request from workers import WorkerEntrypoint +from fastapi import FastAPI, Request + environment = jinja2.Environment() template = environment.from_string("Hello, {{ name }}!")