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.

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

If you're not sure about the file name format, learn more about wheel file names.

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.

Release history Release notifications | RSS feed

This release

0.1.7 This release

2 files

0.1.5

2 files

0.1.3

2 files

0.1.2

2 files

0.1.0

2 files

0.0.9

1 file

0.0.7

2 files

0.0.6

2 files

0.0.4

2 files

0.0.2

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page