| from fastapi import FastAPI, Request |
| from slowapi import Limiter, _rate_limit_exceeded_handler |
| from slowapi.middleware import SlowAPIMiddleware |
| from slowapi.errors import RateLimitExceeded |
| from slowapi.util import get_remote_address |
| from fastapi.responses import JSONResponse |
| from features.text_classifier.routes import router as text_classifier_router |
| from config import ACCESS_RATE |
| import requests |
| limiter = Limiter(key_func=get_remote_address, default_limits=[ACCESS_RATE]) |
|
|
| app = FastAPI() |
|
|
| |
| app.state.limiter = limiter |
| app.add_exception_handler(RateLimitExceeded, lambda request, exc: JSONResponse( |
| status_code=429, |
| content={ |
| "status_code": 429, |
| "error": "Rate limit exceeded", |
| "message": "Too many requests. Chill for a bit and try again" |
| } |
| )) |
| app.add_middleware(SlowAPIMiddleware) |
|
|
| |
| app.include_router(text_classifier_router, prefix="/text") |
|
|
| @app.get("/") |
| @limiter.limit(ACCESS_RATE) |
| async def root(request: Request): |
| return { |
| "message": "API is working", |
| "endpoints": ["/text/analyse", "/text/upload", "/text/analyse-sentences", "/text/analyse-sentance-file"] |
| } |
|
|
|
|