Skip to content

Commit

Permalink
Implement rate limiting (#54)
Browse files Browse the repository at this point in the history
  • Loading branch information
felipeall committed Dec 30, 2023
1 parent 80a8489 commit 0dadf46
Show file tree
Hide file tree
Showing 6 changed files with 501 additions and 294 deletions.
1 change: 0 additions & 1 deletion app/api/endpoints/players.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,6 @@ def get_player_stats(player_id: str):
return player_stats


# Define the endpoint for injuries
@router.get("/{player_id}/injuries")
def get_player_injuries(player_id: str, page_number: Optional[int] = 1):
tfmkt = TransfermarktPlayerInjuries(player_id=player_id, page_number=page_number)
Expand Down
13 changes: 13 additions & 0 deletions app/main.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,23 @@
import uvicorn
from fastapi import FastAPI
from slowapi import Limiter, _rate_limit_exceeded_handler
from slowapi.errors import RateLimitExceeded
from slowapi.middleware import SlowAPIMiddleware
from slowapi.util import get_remote_address
from starlette.responses import RedirectResponse

from app.api.api import api_router
from app.settings import settings

limiter = Limiter(
key_func=get_remote_address,
default_limits=[settings.RATE_LIMITING_FREQUENCY],
enabled=settings.RATE_LIMITING_ENABLE,
)
app = FastAPI(title="Transfermarkt API")
app.state.limiter = limiter
app.add_exception_handler(RateLimitExceeded, _rate_limit_exceeded_handler)
app.add_middleware(SlowAPIMiddleware)
app.include_router(api_router)


Expand Down
10 changes: 10 additions & 0 deletions app/settings.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
from pydantic_settings import BaseSettings, SettingsConfigDict


class Settings(BaseSettings):
model_config = SettingsConfigDict(env_file=".env")
RATE_LIMITING_ENABLE: bool = False
RATE_LIMITING_FREQUENCY: str = "2/3seconds"


settings = Settings()
Loading

0 comments on commit 0dadf46

Please sign in to comment.