Skip to main content

Route definition primitives for Python services.

Project description

RouteDef 🧭

Runtime-neutral route definitions for Python services.

routedef gives applications one route contract that can be mounted into multiple runtimes. The core package has no FastAPI, Cloudflare, ASGI, auth, database, or application dependency. Runtime-specific code lives in adapters.

What It Provides ✅

  • RouteDef: method, path template, handler, and metadata.
  • RouteRequest: canonical request object for handlers.
  • RouteResponse: canonical response object for handlers.
  • RouteTable: ordered method/path matching with {path_param} extraction.
  • build_fastapi_router: FastAPI router integration.
  • CloudflareDispatcher: direct Cloudflare Python Workers integration.

Why Use It 🎯

Use RouteDef when you need the same route definitions to work across more than one Python runtime, especially when migrating between framework-hosted APIs and Cloudflare Python Workers.

  • One handler contract instead of per-runtime handler shapes.
  • App-owned auth and authorization through metadata, auth providers, and enforcers.
  • Dependency-free core package with optional runtime adapters.
  • Testable route behavior without starting a web server.
  • Migration-friendly wrappers for legacy split-argument handlers.

Why Not 🚧

Do not use RouteDef as a full web framework, ORM, dependency injection container, auth library, or request validation system. It intentionally does not own app policy, storage, schemas, background jobs, or runtime lifecycle. If a service will only ever run in one framework and already has a stable route layer, the adapter boundary may not be worth adding.

Architecture 🏗️

routedef request flow

routedef package boundaries

See docs/architecture.md for package boundaries and examples/README.md for generic samples covering route metadata policy, bearer-token auth, and legacy split-argument handlers.

Basic Usage 🚀

from routedef import RouteDef, RouteRequest, RouteResponse, RouteTable


async def get_item(request: RouteRequest[None, dict[str, object]]) -> RouteResponse:
    return RouteResponse.json({"id": request.path_params["id"]})


routes = RouteTable([RouteDef("GET", "/v1/items/{id}", get_item)])

FastAPI

from fastapi import FastAPI
from routedef.adapters.fastapi import build_fastapi_router

app = FastAPI()
app.include_router(build_fastapi_router(routes))

Cloudflare Python Workers

from routedef.adapters.cloudflare import CloudflareDispatcher
from workers import WorkerEntrypoint

dispatcher = CloudflareDispatcher(routes)


class Default(WorkerEntrypoint):
    async def fetch(self, request):
        return await dispatcher.dispatch(request)

A real local Cloudflare fixture lives in examples/cloudflare-worker. Run it with:

uv run python scripts/check_cloudflare_worker.py

The integration script vendors the local src/routedef package into a temporary Python Worker project, runs pywrangler sync, starts wrangler@latest dev, and probes routes over HTTP.

Quality Gates 🧪

uv run pre-commit run --all-files
uv run pytest -q --cov=src/routedef --cov-branch --cov-report=term-missing --cov-fail-under=100
uv run pre-commit run mutation-sweep --hook-stage manual
uv run pre-commit run cloudflare-worker-integration --hook-stage manual

The project requires 100% branch coverage, strict typing, security/dead-code/complexity checks, REUSE compliance, max-LOC checks, mutation testing, and a Cloudflare Worker runtime integration gate.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

routedef-0.1.1.tar.gz (47.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

routedef-0.1.1-py3-none-any.whl (17.2 kB view details)

Uploaded Python 3

File details

Details for the file routedef-0.1.1.tar.gz.

File metadata

  • Download URL: routedef-0.1.1.tar.gz
  • Upload date:
  • Size: 47.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for routedef-0.1.1.tar.gz
Algorithm Hash digest
SHA256 4a933aaa5614cf9a2ff8181a50193c175b56a70361181b9c91eb2cdff1927534
MD5 42ebab89f24ac6fd53806c7c76a977f6
BLAKE2b-256 9acb5f80916ef5ecd5839e906b5af4cc7c3cbcdeaa620015f098d397c44bcdf2

See more details on using hashes here.

File details

Details for the file routedef-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: routedef-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 17.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for routedef-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 9ac366f886b146d81d74b13235828444729330ee6b0dc4383b9af599133ee096
MD5 608c10cdaa0c950ca37f3945f4a3fdda
BLAKE2b-256 56d3553ebdcd6f7b8c3f486ab123ffdb1fea754439adde1ef54661de6342da44

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page