Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

datasette-plugin-router

PyPI Changelog Tests License

WIP router for Datasette plugins

Datasette plugins that have a lot of custom API endpoints can get tiresome to write by hand. datasette-plugin-router aims to be a small Python library that adds a FastAPI-like API for defining custom Datasette plugin endpoints.

  • Define routes with familiar GET/POST decorators
  • Define Pydantic-backed input/output schemas on JSON endpoints
  • register_routes() compatability
  • export to OpenAPI schema for codegen'ing clients

Sample usage:

from datasette import Response, hookimpl
from datasette_plugin_router import Router, Body
from pydantic import BaseModel

router = Router()

class Input(BaseModel):
    id: int
    name: str

class Output(BaseModel):
    id_negative: int
    name_upper: str

@router.POST(r"/-/demo1$", output=Output)
async def demo1(params: Body[Input]) -> Output:
    output = Output(
        id_negative=-1 * params.id,
        name_upper=params.name.upper(),
    )
    return Response.json(output.model_dump())


@router.GET(r"/-/hello/(?P<name>.*)$")
async def hello(name: str):
    return Response.html(f"<h1>Hello, {name}!</h1>")


@hookimpl
def register_routes():
    return router.routes()

Request body validation errors

If a Body()-injected request body fails Pydantic validation — including an empty body or malformed JSON — the router returns a 400 instead of a 500:

{
  "error": "id: Input should be a valid integer, unable to parse string as an integer",
  "errors": [{"type": "int_parsing", "loc": ["id"], "msg": "..."}]
}
  • error joins each field error as "<loc>: <msg>" (just <msg> when there is no location, e.g. malformed JSON) with "; ".
  • errors is ValidationError.errors() minus the url/ctx/input fields.
  • Messages are Pydantic's msg verbatim, so custom validator messages pass through.

Download files

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

Source Distribution

datasette_plugin_router-0.0.1a6.tar.gz (12.7 kB view details)

Uploaded Source

Built Distribution

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

datasette_plugin_router-0.0.1a6-py3-none-any.whl (13.8 kB view details)

Uploaded Python 3

File details

Details for the file datasette_plugin_router-0.0.1a6.tar.gz.

File metadata

File hashes

Hashes for datasette_plugin_router-0.0.1a6.tar.gz
Algorithm Hash digest
SHA256 6d6601f260d969a91fb6b66f587f2eb0daa1a2f89f8b15a46ad35fb08a51aae1
MD5 c25659cf62ebeca8f00bb0b5ff5d7733
BLAKE2b-256 130ed789da73a00aaecba667c53736a1354865de5903a4cb125ac284ffc74c5d

See more details on using hashes here.

Provenance

The following attestation bundles were made for datasette_plugin_router-0.0.1a6.tar.gz:

Publisher: publish.yml on datasette/datasette-plugin-router

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file datasette_plugin_router-0.0.1a6-py3-none-any.whl.

File metadata

File hashes

Hashes for datasette_plugin_router-0.0.1a6-py3-none-any.whl
Algorithm Hash digest
SHA256 1eecc13f35761ee093bca356aab26c66218b310c9a1f0a0a91ab6a76d8166020
MD5 abc2a3200d10613e1ab81b9690d5b758
BLAKE2b-256 e842feec94b69cb22977b94666a41ad9f1d63476a9f0a2c57b0bfc75432bf239

See more details on using hashes here.

Provenance

The following attestation bundles were made for datasette_plugin_router-0.0.1a6-py3-none-any.whl:

Publisher: publish.yml on datasette/datasette-plugin-router

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

0.0.1a6 This release

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page