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:
- Executes the middleware before calling the original route handler
- Supports both sync and async middleware functions
- Preserves the original function's signature for FastAPI's dependency injection
Requirements
- Python >= 3.8
- FastAPI >= 0.68.0
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file fastapi_route_middleware-0.1.0.tar.gz.
File metadata
- Download URL: fastapi_route_middleware-0.1.0.tar.gz
- Upload date:
- Size: 29.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.7.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e5d2898c327551c02bc92327667ca904187551fab63b8250106bc2f66676cc68
|
|
| MD5 |
edad32f5cf2a1540e1c87549293a8162
|
|
| BLAKE2b-256 |
06be97d8e50c4e630fb843e04afced84512aef145064292067d6c067dce5639f
|
File details
Details for the file fastapi_route_middleware-0.1.0-py3-none-any.whl.
File metadata
- Download URL: fastapi_route_middleware-0.1.0-py3-none-any.whl
- Upload date:
- Size: 3.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.7.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
78d23e3ccab0612ac2ec3413e038d8fc6f5e55198219c594f0d841dc833ff38a
|
|
| MD5 |
269b34be6e50431a1fc6e75cf344ef71
|
|
| BLAKE2b-256 |
cf8446258ec6f7dbf1856f57cc0116e205e436418f1be747908c3e359c9d6a06
|