A rate limiting module for Ellar
Project description
Ellar - Python ASGI web framework for building fast, efficient, and scalable RESTful APIs and server-side applications.
Introduction
A rate limit module for Ellar
Installation
$(venv) pip install ellar-throttler
Configure ThrottlerModule
We need to set up the ThrottlerModule to be able for configuring throttling mechanisms for the entire application.
from ellar.common import Module
from ellar_throttler import AnonymousThrottler, ThrottlerModule, UserThrottler
@Module(
modules=(
ThrottlerModule.setup(
throttlers=[
AnonymousThrottler(limit=100, ttl=60*5), # 100 requests per 5mins
UserThrottler(limit=1000, ttl=60*60*24) # 1000 requests per day
]
),
)
)
class AppModule:
pass
Applying Throttling to Controllers
from ellar.common import Controller, get
from ellar_throttler import Throttle, AnonymousThrottler, UserThrottler
from ellar.di import injectable
@injectable()
class AppService:
def success(self, use_auth: bool):
message = "success"
if use_auth:
message += " for Authenticated user"
return {message: True}
def ignored(self, use_auth: bool):
message = "ignored"
if use_auth:
message += " for Authenticated user"
return {message: True}
@Throttle(intercept=True)
@Controller("/limit")
class LimitController:
def __init__(self, app_service: AppService):
self.app_service = app_service
@get()
def get_throttled(self, use_auth: bool):
return self.app_service.success(use_auth)
@get("/shorter")
@Throttle(anon={"limit": 3, "ttl": 5}, user={"limit": 3, "ttl": 3}) # overriding anon and user throttler config
def get_shorter(self, use_auth: bool):
return self.app_service.success(use_auth)
@get("/shorter-inline-throttling")
@Throttle(AnonymousThrottler(ttl=5, limit=3), UserThrottler(ttl=3, limit=3)) # overriding global throttling options
def get_shorter_inline_version(self, use_auth: bool):
return self.app_service.success(use_auth)
References
License
Ellar is MIT licensed.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ellar_throttler-0.1.7.tar.gz.
File metadata
- Download URL: ellar_throttler-0.1.7.tar.gz
- Upload date:
- Size: 10.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.12.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e33b6ee56a7386875261f4cd383e2047e79e3c76e703b4d361a96081144d98e9
|
|
| MD5 |
592c78605eb8a16b58ee9bc268c7591c
|
|
| BLAKE2b-256 |
c9c05b8f14b33c60f7c8715f38cd907e6fb0e3e391f797247ff0659ac31578fa
|
File details
Details for the file ellar_throttler-0.1.7-py3-none-any.whl.
File metadata
- Download URL: ellar_throttler-0.1.7-py3-none-any.whl
- Upload date:
- Size: 16.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.12.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0d6349f7e87015746c813f8eaefa3cee046ed28d289345a5f05df6b08d8b1cbb
|
|
| MD5 |
5f44d6ed869d9459ddaa9cac20c8928f
|
|
| BLAKE2b-256 |
4d12010660b8530389dffc7ca0e32283415b3d003215eab46e1640db853b59d0
|