Skip to main content

Collection of middleware for Starlette applications

Project description

starlette-middleware-collection

A small collection of Starlette-compatible middleware, with FastAPI compatibility and examples.

Included Middleware

  • SizeLimit: Rejects requests with bodies larger than a configured byte limit.
  • RequestUUID: Adds a per-request UUID to request.state.id.

Installation

Install from source:

pip install -e .

SizeLimit

The SizeLimit middleware checks the incoming content-length header and returns 413 Content Too Large when the request body exceeds the configured limit.

  • Constructor argument: limit (bytes)
  • Environment variable: MW_REQUEST_BODY_LIMIT
  • Default: 10 * 1024 * 1024 (10 MB)

Basic Usage

from fastapi import FastAPI
from starlette_middleware_collection import SizeLimit

app = FastAPI()
app.add_middleware(SizeLimit)

With a Custom Limit

from fastapi import FastAPI
from starlette_middleware_collection import SizeLimit

app = FastAPI()
app.add_middleware(SizeLimit, limit=5 * 1024 * 1024)  # 5 MB

Using Environment Variable (SizeLimit)

import os
from fastapi import FastAPI
from starlette_middleware_collection import SizeLimit

os.environ["MW_REQUEST_BODY_LIMIT"] = str(1024 * 1024)  # 1 MB

app = FastAPI()
app.add_middleware(SizeLimit)

[!NOTE] The constructor argument takes precedence over the environment variable.

RequestUUID

The RequestUUID middleware sets request.state.id for every request.

  • Constructor argument: uuid_version
  • Environment variable: MW_UUID_VERSION
  • Supported versions: 4, 7
  • Default: 7

Basic Usage (Default UUIDv7)

from fastapi import FastAPI, Request
from starlette_middleware_collection import RequestUUID

app = FastAPI()
app.add_middleware(RequestUUID)


@app.post("/")
async def read_root(request: Request):
    return {"uuid": str(request.state.id)}

With a Custom UUID Version

from fastapi import FastAPI
from starlette_middleware_collection import RequestUUID

app = FastAPI()
app.add_middleware(RequestUUID, uuid_version=4)

Using Environment Variable (RequestUUID)

import os
from fastapi import FastAPI
from starlette_middleware_collection import RequestUUID

os.environ["MW_UUID_VERSION"] = "4"

app = FastAPI()
app.add_middleware(RequestUUID)

[!NOTE] The constructor argument takes precedence over the environment variable.

If an unsupported uuid_version is provided, a ValueError is raised.

Combined Example

from fastapi import FastAPI, Request
from starlette_middleware_collection import RequestUUID, SizeLimit

app = FastAPI()
app.add_middleware(SizeLimit, limit=2 * 1024 * 1024)  # 2 MB
app.add_middleware(RequestUUID, uuid_version=7)


@app.post("/upload")
async def upload(request: Request):
    return {"request_id": str(request.state.id)}

Running Tests

pytest

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

starlette_middleware_collection-0.1.0.tar.gz (2.3 kB view details)

Uploaded Source

Built Distribution

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

File details

Details for the file starlette_middleware_collection-0.1.0.tar.gz.

File metadata

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

File hashes

Hashes for starlette_middleware_collection-0.1.0.tar.gz
Algorithm Hash digest
SHA256 86f0a2d67541cec0f02ce9670954b2ed30f1119e5528eff9e7788d1cbd1e1f18
MD5 ef36e5e0955fc0d396831d8c3598c5b3
BLAKE2b-256 35d4271edb95d90efd4a3042239004e3bf80a46036100e2a95af778fffc3b5c5

See more details on using hashes here.

File details

Details for the file starlette_middleware_collection-0.1.0-py3-none-any.whl.

File metadata

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

File hashes

Hashes for starlette_middleware_collection-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 bd9820450fdb85861a4dd31dc914c169be361ef3fbec8adcc92ef92618af0547
MD5 2b3906d71ae6a4fc32978f063070d67f
BLAKE2b-256 4f279aa3e2b4507c8d893bda0cc81a370a677c0fce532c0ba1173df022911a44

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