Skip to main content

Ellar Logo

Ellar - Python ASGI web framework for building fast, efficient, and scalable RESTful APIs and server-side applications.

Test Coverage PyPI version PyPI version PyPI version

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.

Release files for ellar-throttler 0.1.7

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ellar-throttler 0.1.7
File Size Uploaded
ellar_throttler-0.1.7.tar.gz 10.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for ellar-throttler 0.1.7
File Interpreter ABI Platform
ellar_throttler-0.1.7-py3-none-any.whl Python 3 none any Details

Total release size: 26.7 kB

Release files / ellar_throttler-0.1.7.tar.gz

Download URL ellar_throttler-0.1.7.tar.gz
Size 10.7 kB
Tags Source
SHA-256 checksum
How to use checksums
e33b6ee56a7386875261f4cd383e2047e79e3c76e703b4d361a96081144d98e9
BLAKE2b-256 checksum
How to use checksums
c9c05b8f14b33c60f7c8715f38cd907e6fb0e3e391f797247ff0659ac31578fa
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.0 CPython/3.12.5

Release files / ellar_throttler-0.1.7-py3-none-any.whl

Download URL ellar_throttler-0.1.7-py3-none-any.whl
Size 16.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
0d6349f7e87015746c813f8eaefa3cee046ed28d289345a5f05df6b08d8b1cbb
BLAKE2b-256 checksum
How to use checksums
4d12010660b8530389dffc7ca0e32283415b3d003215eab46e1640db853b59d0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.0 CPython/3.12.5

Release history Release notifications | RSS feed

This release

0.1.7 This release

2 release files

0.1.5

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.0

2 release files

0.0.9

1 release file

0.0.7

2 release files

0.0.6

2 release files

0.0.4

2 release files

0.0.2

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page