Created
October 7, 2014 16:38
-
-
Save xuru/761515386d452c45990c to your computer and use it in GitHub Desktop.
memcache rate limiter
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import webapp2 | |
| from functools import wraps | |
| from google.appengine.api import memcache | |
| def rate_limit(seconds_per_request=1): | |
| def rate_limiter(function): | |
| @wraps(function) | |
| def wrapper(self, *args, **kwargs): | |
| added = memcache.add('%s:%s' % (self.__class__.__name__, self.request.remote_addr or ''), 1, | |
| time=seconds_per_request, namespace='rate_limiting') | |
| if not added: | |
| self.response.write('Rate limit exceeded.') | |
| self.response.set_status(429) | |
| return | |
| return function(self, *args, **kwargs) | |
| return wrapper | |
| return rate_limiter | |
| class ExampleHandler(webapp2.RequestHandler): | |
| @rate_limit(seconds_per_request=2) | |
| def get(self): | |
| self.response.write('Hello, webapp2!') |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment