Skip to content

Instantly share code, notes, and snippets.

@xuru
Created October 7, 2014 16:38
Show Gist options
  • Select an option

  • Save xuru/761515386d452c45990c to your computer and use it in GitHub Desktop.

Select an option

Save xuru/761515386d452c45990c to your computer and use it in GitHub Desktop.
memcache rate limiter
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