diff --git a/01-hello/src/entry.py b/01-hello/src/entry.py index 8bdd647..ecc7a07 100644 --- a/01-hello/src/entry.py +++ b/01-hello/src/entry.py @@ -1,4 +1,4 @@ -from workers import WorkerEntrypoint, Response +from workers import Response, WorkerEntrypoint class Default(WorkerEntrypoint): diff --git a/02-binding/src/entry.py b/02-binding/src/entry.py index cbbba4f..098c7b5 100644 --- a/02-binding/src/entry.py +++ b/02-binding/src/entry.py @@ -1,4 +1,4 @@ -from workers import WorkerEntrypoint, Response +from workers import Response, WorkerEntrypoint class Default(WorkerEntrypoint): diff --git a/04-query-d1/src/entry.py b/04-query-d1/src/entry.py index c9709ac..8366720 100644 --- a/04-query-d1/src/entry.py +++ b/04-query-d1/src/entry.py @@ -1,4 +1,4 @@ -from workers import WorkerEntrypoint, Response +from workers import Response, WorkerEntrypoint class Default(WorkerEntrypoint): diff --git a/05-langchain/src/worker.py b/05-langchain/src/worker.py index 0a38e47..922edb8 100644 --- a/05-langchain/src/worker.py +++ b/05-langchain/src/worker.py @@ -1,6 +1,6 @@ -from workers import WorkerEntrypoint, Response from langchain_core.prompts import PromptTemplate from langchain_openai import OpenAI +from workers import Response, WorkerEntrypoint class Default(WorkerEntrypoint): diff --git a/07-durable-objects/src/entry.py b/07-durable-objects/src/entry.py index 77a1fea..505924f 100644 --- a/07-durable-objects/src/entry.py +++ b/07-durable-objects/src/entry.py @@ -1,7 +1,8 @@ -from workers import WorkerEntrypoint, Response, DurableObject -from pyodide.ffi import to_js from urllib.parse import urlparse +from pyodide.ffi import to_js +from workers import DurableObject, Response, WorkerEntrypoint + class List(DurableObject): async def get_messages(self): diff --git a/08-cron/src/entry.py b/08-cron/src/entry.py index 41dd5f4..5ffc71e 100644 --- a/08-cron/src/entry.py +++ b/08-cron/src/entry.py @@ -1,4 +1,4 @@ -from workers import WorkerEntrypoint, Response +from workers import Response, WorkerEntrypoint class Default(WorkerEntrypoint): diff --git a/09-workers-ai/src/entry.py b/09-workers-ai/src/entry.py index 42fd6d3..5c5e5b8 100644 --- a/09-workers-ai/src/entry.py +++ b/09-workers-ai/src/entry.py @@ -1,4 +1,4 @@ -from workers import WorkerEntrypoint, Response +from workers import Response, WorkerEntrypoint class Default(WorkerEntrypoint): diff --git a/10-workflows/src/entry.py b/10-workflows/src/entry.py index fd47672..afad0c9 100644 --- a/10-workflows/src/entry.py +++ b/10-workflows/src/entry.py @@ -1,7 +1,8 @@ -from workers import WorkerEntrypoint, Response, WorkflowEntrypoint -from urllib.parse import urlparse import asyncio import random +from urllib.parse import urlparse + +from workers import Response, WorkerEntrypoint, WorkflowEntrypoint class DAGWorkflow(WorkflowEntrypoint): diff --git a/11-opengraph/src/entry.py b/11-opengraph/src/entry.py index 4b7f3a5..4168ecc 100644 --- a/11-opengraph/src/entry.py +++ b/11-opengraph/src/entry.py @@ -1,9 +1,9 @@ -from workers import WorkerEntrypoint, Request, fetch -from js import HTMLRewriter -from urllib.parse import urlparse from html import escape +from urllib.parse import urlparse +from js import HTMLRewriter from pyodide.ffi import create_proxy +from workers import Request, WorkerEntrypoint, fetch class MetaTagInjector: diff --git a/12-image-gen/src/entry.py b/12-image-gen/src/entry.py index 1bad378..cfd1666 100644 --- a/12-image-gen/src/entry.py +++ b/12-image-gen/src/entry.py @@ -1,11 +1,11 @@ -from workers import WorkerEntrypoint, Response, Request -from PIL import Image, ImageDraw, ImageFont -from io import BytesIO -from urllib.parse import urlparse, parse_qs import random +from io import BytesIO from pathlib import Path +from urllib.parse import parse_qs, urlparse +from PIL import Image, ImageDraw, ImageFont from pyodide.ffi import to_js +from workers import Request, Response, WorkerEntrypoint class Default(WorkerEntrypoint): @@ -65,9 +65,9 @@ def generate_gradient(self, params: dict) -> Response: color2 = params.get("color2", [None])[0] if not color1: - color1 = "#{:06x}".format(random.randint(0, 0xFFFFFF)) + color1 = f"#{random.randint(0, 0xFFFFFF):06x}" if not color2: - color2 = "#{:06x}".format(random.randint(0, 0xFFFFFF)) + color2 = f"#{random.randint(0, 0xFFFFFF):06x}" # Convert hex colors to RGB tuples r1, g1, b1 = self.hex_to_rgb(color1) diff --git a/13-js-api-pygments/py/src/entry.py b/13-js-api-pygments/py/src/entry.py index feaa166..9817e01 100644 --- a/13-js-api-pygments/py/src/entry.py +++ b/13-js-api-pygments/py/src/entry.py @@ -1,8 +1,8 @@ -from workers import WorkerEntrypoint, Response, Request from pygments import highlight -from pygments.lexers import get_lexer_by_name, guess_lexer from pygments.formatters import HtmlFormatter +from pygments.lexers import get_lexer_by_name, guess_lexer from pygments.util import ClassNotFound +from workers import Request, Response, WorkerEntrypoint class Default(WorkerEntrypoint): diff --git a/14-websocket-stream-consumer/src/entry.py b/14-websocket-stream-consumer/src/entry.py index 77b6427..ce158ee 100644 --- a/14-websocket-stream-consumer/src/entry.py +++ b/14-websocket-stream-consumer/src/entry.py @@ -1,10 +1,11 @@ -from workers import WorkerEntrypoint, Response, DurableObject -import js import json import time -from pyodide.ffi import create_proxy from urllib.parse import urlparse +import js +from pyodide.ffi import create_proxy +from workers import DurableObject, Response, WorkerEntrypoint + class BlueskyFirehoseConsumer(DurableObject): """Durable Object that maintains a persistent WebSocket connection to Bluesky Jetstream.""" diff --git a/15-chatroom/src/entry.py b/15-chatroom/src/entry.py index a08ebd7..80a14a7 100644 --- a/15-chatroom/src/entry.py +++ b/15-chatroom/src/entry.py @@ -1,9 +1,10 @@ -from workers import WorkerEntrypoint, Response, DurableObject -from pathlib import Path -from js import WebSocketPair import json +from datetime import UTC, datetime +from pathlib import Path from urllib.parse import urlparse -from datetime import datetime, timezone + +from js import WebSocketPair +from workers import DurableObject, Response, WorkerEntrypoint class Chatroom(DurableObject): @@ -95,7 +96,7 @@ def broadcast(self, message): def get_timestamp(self): """Get current timestamp in ISO format.""" - return datetime.now(timezone.utc).isoformat() + return datetime.now(UTC).isoformat() class Default(WorkerEntrypoint): diff --git a/17-dynamic-py-py/src/entry.py b/17-dynamic-py-py/src/entry.py index 91b1dba..e53d4f5 100644 --- a/17-dynamic-py-py/src/entry.py +++ b/17-dynamic-py-py/src/entry.py @@ -1,5 +1,5 @@ -from pyodide.ffi import create_proxy, to_js from js import Object +from pyodide.ffi import create_proxy, to_js from workers import WorkerEntrypoint # The source code of the dynamically-loaded Python Worker. In a real diff --git a/pyproject.toml b/pyproject.toml index 171d7cb..796e6f6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -13,3 +13,31 @@ dev = [ "requests>=2.32.5", "ruff>=0.12.10", ] + +[tool.ruff] +target-version = "py312" +extend-exclude = ["**/python_modules", "**/.venv-workers"] + +[tool.ruff.lint] +select = [ + "B0", # flake8-bugbear + "C4", # flake8-comprehensions + "E", # pycodestyle errors + "F", # pyflakes + "I", # isort + "PGH", # pygrep-hooks + "UP", # pyupgrade + "W", # pycodestyle warnings +] +ignore = [ + "E501", # line length is handled by the formatter +] + +[tool.ruff.lint.isort] +# Supplied by the Workers runtime rather than PyPI, so ruff cannot resolve them +# and would otherwise infer their section from whatever happens to be on disk. +known-third-party = ["asgi", "js", "pyodide", "workers"] + +[tool.ruff.lint.per-file-ignores] +# `js` and `pyodide` imports resolve only at runtime inside Pyodide. +"*/src/*.py" = ["E402"] diff --git a/tests/conftest.py b/tests/conftest.py index fafe74e..3ab5770 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,12 +1,12 @@ import os -import subprocess -import time import socket +import subprocess import sys -import pytest +import time +from contextlib import contextmanager from pathlib import Path -from contextlib import contextmanager +import pytest REPO_ROOT = Path(__file__).parents[1] diff --git a/tests/test_examples.py b/tests/test_examples.py index 49f5ce4..e4b2b1a 100644 --- a/tests/test_examples.py +++ b/tests/test_examples.py @@ -1,6 +1,7 @@ -import requests -import pytest import subprocess + +import pytest +import requests from conftest import REPO_ROOT