File size: 861 Bytes
71192d1
 
ce2ce69
71192d1
 
 
ce2ce69
71192d1
ce2ce69
 
 
 
71192d1
 
 
 
ce2ce69
71192d1
 
ce2ce69
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from fastapi import FastAPI, Request
from fastapi.responses import JSONResponse
from slowapi import Limiter, _rate_limit_exceeded_handler
from slowapi.util import get_remote_address
from slowapi.errors import RateLimitExceeded
import logging
import os

def get_rate_limit():
    return os.getenv("RATE_LIMIT", "100/minute")

limiter = Limiter(key_func=get_remote_address, headers_enabled=True, default_limits=[get_rate_limit()])

def setup_middlewares(app: FastAPI):
    @app.exception_handler(Exception)
    async def unhandled_exception_handler(request: Request, exc: Exception):
        logging.exception(f"Unhandled exception from {request.client.host}")
        return JSONResponse(status_code=500, content={"detail": "Internal server error"})

    app.state.limiter = limiter
    app.add_exception_handler(RateLimitExceeded, _rate_limit_exceeded_handler)