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()