Metadata-Version: 2.1
Name: fastapi_user_limiter
Version: 0.2.0
Summary: Rate-limiter for FastAPI with the possibility of user-based rate limits
Author-email: Ramtin Yazdanian <ramtin.yazdanian@epfl.ch>
Project-URL: Homepage, https://github.com/epflgraph/fastapi-user-limiter
Project-URL: Bug Tracker, https://github.com/epflgraph/fastapi-user-limiter/issues
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Requires-Python: >=3.11
Description-Content-Type: text/markdown
Requires-Dist: fastapi[all]
Requires-Dist: redis

# FastAPI rate limiter

This package adds a rate limiter to FastAPI using Redis.

## Installation

First install Redis, then install the package using:
```
pip install fastapi-user-limiter
```

## Usage

You can use the `rate_limit` decorator to put a single rate limit on an endpoint:

```python
from fastapi_user_limiter.limiter import RateLimiter, rate_limit
from fastapi import FastAPI, Request

app = FastAPI()
rate_limiter = RateLimiter()

# 2 requests max per 5 seconds
@app.get("/single")
@rate_limit(rate_limiter, 2, 5)
async def read_single(request: Request):
    return {"Hello": "World"}

```

To put multiple rate limits on the same endpoint (with different window size and maximum request counts), use the
`multi_rate_limit` decorator. Each `multi_rate_limit` decorator on a particular endpoint requires an ID as its first arg.
This ID must be unique among the `multi_rate_limit` decorators on that endpoint:

```python
from fastapi_user_limiter.limiter import RateLimiter, multi_rate_limit
from fastapi import FastAPI, Request

app = FastAPI()
rate_limiter = RateLimiter()


# 1 request max per second, 3 requests max per 10 seconds
@app.get("/multi")
@multi_rate_limit(1, rate_limiter, 1, 1)
@multi_rate_limit(2, rate_limiter, 3, 10)
async def read_multi(request: Request):
    return {"Hello": "There"}
```

The aforementioned examples can be found in `example.py` (use ` uvicorn example:app --reload` to run).


**NOTE**: Every endpoint handler with the rate limiter decorator needs to have `request` (of type `fastapi.Request`)
as its first argument.

## Future features

The package will soon have the additional feature of allowing each user account to have a different rate limit for each endpoint.
