Padmanav commited on
Commit
37fe7f8
·
1 Parent(s): 2b58f61

fix: wire slowapi rate limiting - 5/min on analyze, 10/min on quick-analyze

Browse files
Files changed (2) hide show
  1. app/api/main.py +7 -0
  2. app/api/routes.py +4 -3
app/api/main.py CHANGED
@@ -1,6 +1,9 @@
1
  from fastapi import FastAPI
2
  from fastapi.middleware.cors import CORSMiddleware
3
  from app.api.routes import router
 
 
 
4
 
5
  app = FastAPI(
6
  title="AI Code Review Agent",
@@ -8,6 +11,10 @@ app = FastAPI(
8
  version="0.1.0"
9
  )
10
 
 
 
 
 
11
  # Allow Gradio frontend to talk to FastAPI
12
  app.add_middleware(
13
  CORSMiddleware,
 
1
  from fastapi import FastAPI
2
  from fastapi.middleware.cors import CORSMiddleware
3
  from app.api.routes import router
4
+ from slowapi import Limiter, _rate_limit_exceeded_handler
5
+ from slowapi.util import get_remote_address
6
+ from slowapi.errors import RateLimitExceeded
7
 
8
  app = FastAPI(
9
  title="AI Code Review Agent",
 
11
  version="0.1.0"
12
  )
13
 
14
+ limiter = Limiter(key_func=get_remote_address)
15
+ app.state.limiter = limiter
16
+ app.add_exception_handler(RateLimitExceeded, _rate_limit_exceeded_handler)
17
+
18
  # Allow Gradio frontend to talk to FastAPI
19
  app.add_middleware(
20
  CORSMiddleware,
app/api/routes.py CHANGED
@@ -1,5 +1,6 @@
1
- from fastapi import APIRouter, HTTPException, Depends
2
  from app.api.dependencies import verify_api_key
 
3
  import asyncio
4
  from fastapi import APIRouter, HTTPException
5
  from app.models.repository import RepositoryRequest, RepositoryResponse
@@ -20,7 +21,7 @@ router = APIRouter()
20
  def health_check():
21
  return {"status": "ok", "message": "AI Code Review Agent is running"}
22
 
23
-
24
  @router.post("/analyze", response_model=EngineeringReport, dependencies=[Depends(verify_api_key)])
25
  async def analyze_repository(request: RepositoryRequest):
26
  """
@@ -56,7 +57,7 @@ async def analyze_repository(request: RepositoryRequest):
56
  if local_path:
57
  delete_repository(local_path)
58
 
59
-
60
  @router.post("/quick-analyze", response_model=RepositoryResponse, dependencies=[Depends(verify_api_key)])
61
  async def quick_analyze(request: RepositoryRequest):
62
  """
 
1
+ from fastapi import APIRouter, HTTPException, Depends, Request
2
  from app.api.dependencies import verify_api_key
3
+ from app.api.main import limiter
4
  import asyncio
5
  from fastapi import APIRouter, HTTPException
6
  from app.models.repository import RepositoryRequest, RepositoryResponse
 
21
  def health_check():
22
  return {"status": "ok", "message": "AI Code Review Agent is running"}
23
 
24
+ @limiter.limit("5/minute")
25
  @router.post("/analyze", response_model=EngineeringReport, dependencies=[Depends(verify_api_key)])
26
  async def analyze_repository(request: RepositoryRequest):
27
  """
 
57
  if local_path:
58
  delete_repository(local_path)
59
 
60
+ @limiter.limit("10/minute")
61
  @router.post("/quick-analyze", response_model=RepositoryResponse, dependencies=[Depends(verify_api_key)])
62
  async def quick_analyze(request: RepositoryRequest):
63
  """