Mercurial > public > sg101
view gpp/accounts/management/commands/rate_limit_clear.py @ 517:666147a2cc08
Moved the imports from the top of the file into the task function. This seemed to prevent some strange import errors that only occurred on the production server. I don't know if the problems were related to mod_wsgi or Python 2.5 or what.
author | Brian Neal <bgneal@gmail.com> |
---|---|
date | Thu, 15 Dec 2011 02:49:16 +0000 |
parents | 6f5fff924877 |
children |
line wrap: on
line source
""" The rate_limit_clear command is used to clear IP addresses out from our rate limit protection database. """ from optparse import make_option import re from django.core.management.base import BaseCommand import redis from core.services import get_redis_connection IP_RE = re.compile(r'^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$') class Command(BaseCommand): help = """Remove IP addresses from the rate limit protection datastore.""" option_list = list(BaseCommand.option_list) + [ make_option("--purge", action="store_true", help="Purge all IP addresses"), ] def handle(self, *args, **kwargs): try: con = get_redis_connection() # get all rate-limit keys keys = con.keys('rate-limit-*') # if purging, delete them all... if kwargs['purge']: if keys: con.delete(*keys) return # otherwise delete the ones the user asked for ips = [] for ip in args: if IP_RE.match(ip): key = 'rate-limit-%s' % ip if key in keys: ips.append(key) else: self.stdout.write('%s not found\n' % ip) else: self.stderr.write('invalid IP address %s\n' % ip) if ips: con.delete(*ips) except redis.RedisError, e: self.stderr.write('%s\n' % e)