Metadata-Version: 2.1
Name: Py-redis-ratelimit
Version: 0.1.4
Summary: A simple asyncio-based rate limiter for Python3 using Redis.
Home-page: https://github.com/AYMENJD/py-redis-ratelimit
Author: AYMEN Mohammed
Author-email: let.me.code.safe@gmail.com
License: MIT
Project-URL: Source, https://github.com/AYMENJD/py-redis-ratelimit
Project-URL: Tracker, https://github.com/AYMENJD/py-redis-ratelimit/issues
Keywords: ratelimit,redis,flood,spam,asyncio
Platform: UNKNOWN
Requires-Python: >=3.7
Description-Content-Type: text/markdown
License-File: LICENSE

# py-redis-ratelimit [![version](https://img.shields.io/pypi/v/py-redis-ratelimit?style=flat&logo=pypi)](https://pypi.org/project/py-redis-ratelimit) [![downloads](https://img.shields.io/pypi/dm/py-redis-ratelimit?style=flat)](https://pypistats.org/packages/py-redis-ratelimit)

 A simple asynchronous rate limiter based on redis.

### Requirements

- python >= 3.7
- [redis-py](https://github.com/redis/redis-py) >= 4.2.0

### Installation

```bash
pip install py-redis-ratelimit
```

### Examples
Basic example:
```python

from redis.asyncio import Redis
import ratelimit, asyncio

redis = Redis(decode_responses=True)
limiter = ratelimit.RateLimit(
    redis, prefix="api_rate_limit", rate=10, period=60, retry_after=20
)
print(ratelimit.RateLimit.__doc__)  # print RateLimit class docstring


async def do_something():
    await limiter.acquire(
        identifier="do_something_function"
    )  # a unique identifier for the function. This let's RateLimit know what service/resource you are trying to access.
    ...


async def main():
    for x in range(40):
        try:
            print("Calling do_something() for the {}th time".format(x + 1))
            await do_something()
        except ratelimit.FloodWait as e:
            print("Exception:", e.to_dict())
            break


if __name__ == "__main__":
    asyncio.run(main())

```

# Contributing
Pull requests are always welcome!!
# License

MIT [License](https://github.com/AYMENJD/py-redis-ratelimit/blob/main/LICENSE)


