UsageΒΆ

$ pip install request_limiter

Using as a decorator on django view:

from request_limiter import request_limiter, LimitedIntervalStrategy, django_request_limiter

@django_request_limiter
@request_limiter(strategy=LimitedIntervalStrategy(requests=10, interval=60))  # 10 request per minute
def myview(request):
    # ...

@django_request_limiter
@request_limiter(strategy=LimitedIntervalStrategy(requests=100, interval=24*60*60))  # 100 request per day
def anotherview(request):
    # ...

Using as a decorator on any function:

from request_limiter import request_limiter, LimitedIntervalStrategy, LimitException

@request_limiter(strategy=LimitedIntervalStrategy(requests=1, interval=60))  # 1 request per minute
def awesome_work(param):
    # ...

awesome_work("test")
try:
    awesome_work("limited")  # raises LimitException
except LimitException:
    # .. handle limit exception

Using the strategy to limit part of logic:

from request_limiter import LimitedIntervalStrategy

limiter = LimitedIntervalStrategy(requests=1, interval=60))  # 1 request per minute

def awesome_work(param):
    if not limiter.allow():
        return False
    # ...
    return True

awesome_work("job1")  # returns True
awesome_work("job2")  # returns False