Skip to main content

A rate limiting module for Ellar

Project description

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.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ellar_throttler-0.1.7.tar.gz (10.7 kB view details)

Uploaded Source

Built Distribution

ellar_throttler-0.1.7-py3-none-any.whl (16.0 kB view details)

Uploaded Python 3

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

Hashes for ellar_throttler-0.1.7.tar.gz
Algorithm Hash digest
SHA256 e33b6ee56a7386875261f4cd383e2047e79e3c76e703b4d361a96081144d98e9
MD5 592c78605eb8a16b58ee9bc268c7591c
BLAKE2b-256 c9c05b8f14b33c60f7c8715f38cd907e6fb0e3e391f797247ff0659ac31578fa

See more details on using hashes here.

File details

Details for the file ellar_throttler-0.1.7-py3-none-any.whl.

File metadata

File hashes

Hashes for ellar_throttler-0.1.7-py3-none-any.whl
Algorithm Hash digest
SHA256 0d6349f7e87015746c813f8eaefa3cee046ed28d289345a5f05df6b08d8b1cbb
MD5 5f44d6ed869d9459ddaa9cac20c8928f
BLAKE2b-256 4d12010660b8530389dffc7ca0e32283415b3d003215eab46e1640db853b59d0

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page