falcon-ratelimit

A rate limiter plugin for Falcon


License
MIT
Install
pip install falcon-ratelimit==1.2

Documentation

falcon-ratelimit

Build Status Maintainability Test Coverage Issue Count PyPI PyPI version PyPI

Rate limiter for Falcon. Install with:

pip install falcon-ratelimit

Use like:

import falcon
from falconratelimit import rate_limit


class NoRedisResource(object):
    @falcon.before(rate_limit(per_second=5, window_size=30,
    resource='resource_name'))
    def on_post(self, req, resp):
        ...

class RedisResource(object):
   @falcon.before(rate_limit(redis_url='localhost:6379', per_second=1,
   window_size=10))
   def on_post(self, req, resp):
       ...

This package works by limiting the number of requests using two variables per_second and window_size. In the first example above, the NoRedisResource class is restricted to 5 requests per second over a 30 second window meaning that there is a limit of 150 requests over 30 seconds. The default storage of calling the rate_limit decorator is an in memory list to store the number of requests for the given user using the resource resource_name.

The second example implements the optional storage to use Redis by passing in a redis_url to store user request data. Using Redis allows for the rate limiting to be implemented across multiple instances of a particular application. In the RedisResource class example the user is allowed to make 1 request per second over 10 seconds meaning that there is a limit of 10 requests over 10 seconds. Since this example didn't pass in a resource it uses default as the name for request storage.

If you do not have the redis package installed, Redis-related functionality will not work.