request_limiter package

Submodules

request_limiter.decorators module

class request_limiter.decorators.RequestLimiterDecorator(strategy: Optional[request_limiter.strategy.LimitStrategy] = None)[source]

Bases: object

A decorator class used to limit request rate to a function using a custom strategy or the default LimitedIntervalStrategy.

request_limiter.decorators.django_request_limiter(f)[source]

Returns a wrapped function for django request handler function. It applies limit strategy based on request IP and returns 429. :param f: django request handler function decorated with request_limiter :return: wrapped function

request_limiter.exceptions module

exception request_limiter.exceptions.LimitException(message, strategy: request_limiter.strategy.LimitStrategy)[source]

Bases: Exception

Custom exception raised when the number of request exceeds strategy’s limit

request_limiter.strategy module

class request_limiter.strategy.LimitStrategy[source]

Bases: object

A request limit strategy abstract class

allow(key: Optional[str] = None) → bool[source]

Checks if it can allocate one request :return: True if it can allocate else False

clean()[source]

Clean expired keys from storage

get_remaining(key: Optional[str] = None) → float[source]

Returns the remaining seconds for the next request window :return: time in seconds

class request_limiter.strategy.LimitedIntervalStrategy(requests: Optional[int] = 100, interval: Optional[int] = 86400, now: Optional[Callable[[], float]] = <built-in function monotonic>, storage: Optional[dict] = None)[source]

Bases: request_limiter.strategy.LimitStrategy

DEFAULT_KEY = 'default'
allow(key: Optional[str] = None) → bool[source]

Allocates one request in current window for the key :param key: Storage key :return: True if allocated else False

clean()[source]

Remove expired keys from the storage

get_remaining(key: Optional[str] = None) → float[source]

Returns the remaining seconds for the next request window :param key: Storage key :return: Remaining seconds

Module contents

Top-level package for Request Limiter.

request_limiter.request_limiter

alias of request_limiter.decorators.RequestLimiterDecorator

request_limiter.django_request_limiter(f)[source]

Returns a wrapped function for django request handler function. It applies limit strategy based on request IP and returns 429. :param f: django request handler function decorated with request_limiter :return: wrapped function

class request_limiter.LimitStrategy[source]

Bases: object

A request limit strategy abstract class

allow(key: Optional[str] = None) → bool[source]

Checks if it can allocate one request :return: True if it can allocate else False

clean()[source]

Clean expired keys from storage

get_remaining(key: Optional[str] = None) → float[source]

Returns the remaining seconds for the next request window :return: time in seconds

class request_limiter.LimitedIntervalStrategy(requests: Optional[int] = 100, interval: Optional[int] = 86400, now: Optional[Callable[[], float]] = <built-in function monotonic>, storage: Optional[dict] = None)[source]

Bases: request_limiter.strategy.LimitStrategy

DEFAULT_KEY = 'default'
allow(key: Optional[str] = None) → bool[source]

Allocates one request in current window for the key :param key: Storage key :return: True if allocated else False

clean()[source]

Remove expired keys from the storage

get_remaining(key: Optional[str] = None) → float[source]

Returns the remaining seconds for the next request window :param key: Storage key :return: Remaining seconds

exception request_limiter.LimitException(message, strategy: request_limiter.strategy.LimitStrategy)[source]

Bases: Exception

Custom exception raised when the number of request exceeds strategy’s limit