示例#1
0
    def get(self, key, callback=lambda x: x):
        f = self._cache.get(key)
        if f is not None:
            # reset ttl
            self._cache[key] = f
            if f.get('deleted', False) is True:
                log.warn("RedisFeatureStore: get returned deleted flag from in-memory cache. Returning None.")
                return callback(None)
            return callback(f)

        try:
            r = redis.Redis(connection_pool=self._pool)
            f_json = r.hget(self._features_key, key)
        except BaseException as e:
            log.error("RedisFeatureStore: Could not retrieve flag from redis with error: " + e.message
                      + ". Returning None for key: " + key)
            return callback(None)

        if f_json is None or f_json is "":
            log.warn("RedisFeatureStore: feature flag with key: " + key + " not found in Redis. Returning None.")
            return callback(None)

        f = json.loads(f_json.decode('utf-8'))
        if f.get('deleted', False) is True:
            log.warn("RedisFeatureStore: get returned deleted flag from Redis. Returning None.")
            return callback(None)
        self._cache[key] = f
        return callback(f)
    def _get_even_if_deleted(self, kind, key, check_cache=True):
        cacheKey = self._cache_key(kind, key)
        if check_cache:
            item = self._cache.get(cacheKey)
            if item is not None:
                # reset ttl
                self._cache[cacheKey] = item
                return item

        try:
            r = redis.Redis(connection_pool=self._pool)
            item_json = r.hget(self._items_key(kind), key)
        except BaseException as e:
            log.error(
                "RedisFeatureStore: Could not retrieve key %s from '%s' with error: %s",
                key, kind.namespace, e.message)
            return None

        if item_json is None or item_json is "":
            log.debug(
                "RedisFeatureStore: key %s not found in '%s'. Returning None.",
                key, kind.namespace)
            return None

        item = json.loads(item_json.decode('utf-8'))
        self._cache[cacheKey] = item
        return item
示例#3
0
    def all(self, callback):
        r = redis.Redis(connection_pool=self._pool)
        try:
            all_features = r.hgetall(self._features_key)
        except BaseException as e:
            log.error("RedisFeatureStore: Could not retrieve all flags from Redis with error: "
                      + e.message + " Returning None")
            return callback(None)

        if all_features is None or all_features is "":
            log.warn("RedisFeatureStore: call to get all flags returned no results. Returning None.")
            return callback(None)

        results = {}
        for k, f_json in all_features.items() or {}:
            f = json.loads(f_json.decode('utf-8'))
            if 'deleted' in f and f['deleted'] is False:
                results[f['key']] = f
        return callback(results)
示例#4
0
    def all(self, kind, callback):
        r = redis.Redis(connection_pool=self._pool)
        try:
            all_items = r.hgetall(self._items_key(kind))
        except BaseException as e:
            log.error("RedisFeatureStore: Could not retrieve '%s' from Redis with error: %s. Returning None.",
                kind.namespace, e)
            return callback(None)

        if all_items is None or all_items is "":
            log.warn("RedisFeatureStore: call to get all '%s' returned no results. Returning None.", kind.namespace)
            return callback(None)

        results = {}
        for key, item_json in all_items.items():
            key = key.decode('utf-8')  # necessary in Python 3
            item = json.loads(item_json.decode('utf-8'))
            if item.get('deleted', False) is False:
                results[key] = item
        return callback(results)