FastAPI middleware & Depends()
Global middleware on every request PLUS a stricter Depends() limiter on hot routes like login.
from fastapi import FastAPI, Depends, Request
from halt import RateLimiter, InMemoryStore, presets
from halt.adapters.fastapi import (
HaltMiddleware,
create_async_limiter_dependency,
)
# ---- A) Global middleware every route ----
public = RateLimiter(store=InMemoryStore(), policy=presets.PUBLIC_API)
app = FastAPI()
app.add_middleware(HaltMiddleware, limiter=public)
# ---- B) Stricter Depends() on hot routes ----
strict = RateLimiter(store=InMemoryStore(), policy=presets.AUTH_ENDPOINTS)
auth_limit = create_async_limiter_dependency(strict)
@app.post("/login", dependencies=[Depends(auth_limit)])
async def login(request: Request):
return {"ok": True}
@app.get("/health")
async def health():
# Health checks are exempt automatically; middleware skips this route.
return {"status": "ok"}