Skip to main content

A decorator-based middleware system for adding middleware to specific FastAPI routes

Project description

FastAPI Route Middleware

A dependency free™ middleware system for adding middleware to specific FastAPI routes. I just like how node express works.

Installation

pip install fastapi_route_middleware

but actually I know you're using uv, so:

uv add fastapi_route_middleware

Usage

The add_middleware decorator allows you to apply middleware functions to specific FastAPI routes, giving you fine-grained control over which middleware runs on which endpoints. Middlewares can access FastAPI Request and Response even if the original route does not. If a middleware returns anything, it will trigger an early return and won't cause the original route handler to be called.

Basic Example

from fastapi import FastAPI
from fastapi_route_middleware import add_middleware

app = FastAPI()

# Define a simple middleware function
def log_request(request_id: str):
    print(f"Processing request {request_id}")

# Apply middleware to specific route
@app.get("/items/{item_id}")
@add_middleware(log_request)
async def get_item(item_id: int, request_id: str):
    return {"item_id": item_id}

Async Middleware Example

from fastapi import FastAPI
from fastapi_route_middleware import add_middleware
import asyncio

app = FastAPI()

# Define an async middleware function
async def async_auth_middleware(user_id: str):
    # Simulate async authentication check
    await asyncio.sleep(0.1)
    print(f"Authenticated user {user_id}")

@app.get("/protected")
@add_middleware(async_auth_middleware)
async def protected_route(user_id: str, data: str):
    return {"message": f"Hello {user_id}", "data": data}

Multiple Middleware Example

from fastapi import FastAPI
from fastapi_route_middleware import add_middleware

app = FastAPI()

def rate_limit_middleware(api_key: str):
    print(f"Rate limiting for API key: {api_key}")

def audit_middleware(user_id: str):
    print(f"Auditing action for user: {user_id}")

# Stack multiple middlewares
@app.post("/api/data")
@add_middleware(rate_limit_middleware)
@add_middleware(audit_middleware)
async def create_data(api_key: str, user_id: str, payload: dict):
    return {"status": "created", "data": payload}

How It Works

The add_middleware decorator:

  1. Executes the middleware before calling the original route handler
  2. Supports both sync and async middleware functions
  3. Preserves the original function's signature for FastAPI's dependency injection

Requirements

  • Python >= 3.8
  • FastAPI >= 0.68.0

License

MIT

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

fastapi_route_middleware-0.1.0.tar.gz (29.8 kB view details)

Uploaded Source

Built Distribution

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

fastapi_route_middleware-0.1.0-py3-none-any.whl (3.9 kB view details)

Uploaded Python 3

File details

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

File metadata

File hashes

Hashes for fastapi_route_middleware-0.1.0.tar.gz
Algorithm Hash digest
SHA256 e5d2898c327551c02bc92327667ca904187551fab63b8250106bc2f66676cc68
MD5 edad32f5cf2a1540e1c87549293a8162
BLAKE2b-256 06be97d8e50c4e630fb843e04afced84512aef145064292067d6c067dce5639f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for fastapi_route_middleware-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 78d23e3ccab0612ac2ec3413e038d8fc6f5e55198219c594f0d841dc833ff38a
MD5 269b34be6e50431a1fc6e75cf344ef71
BLAKE2b-256 cf8446258ec6f7dbf1856f57cc0116e205e436418f1be747908c3e359c9d6a06

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