Titan/webapp/titanembeds/database/custom_redislite.py
2017-05-02 18:37:24 +00:00

36 lines
1.1 KiB
Python

import urlparse
from limits.storage import Storage
from redislite import Redis
import time
class LimitsRedisLite(Storage): # For Python Limits
STORAGE_SCHEME = "redislite"
def __init__(self, uri, **options):
self.redis_instance = Redis(urlparse.urlparse(uri).netloc)
def check(self):
return True
def get_expiry(self, key):
return (self.redis_instance.ttl(key) or 0) + time.time()
def incr(self, key, expiry, elastic_expiry=False):
if not self.redis_instance.exists(key):
self.redis_instance.set(key, 1, ex=expiry)
else:
oldexp = oldexp = self.get_expiry(key) - time.time()
if oldexp <= 0:
self.redis_instance.delete(key)
return self.incr(key, expiry, elastic_expiry)
self.redis_instance.set(key, int(self.redis_instance.get(key))+1, ex=int(round(oldexp)))
return int(self.get(key))
def get(self, key):
value = self.redis_instance.get(key)
if value:
return int(value)
return 0
def reset(self):
return self.redis_instance.flushdb()