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