def decorator(fn): fn_generate_key = function_key_generator('cache_on_arguments:v1', fn, to_str=unicode) fn_args = inspect.getargspec(fn) fn_has_self = fn_args[0] and fn_args[0][0] in ('self', 'cls') @functools.wraps(fn) def wrapper(*args, **kwargs): key = fn_generate_key(*args, **kwargs) val = redis_client.get(key) if val is None: val = fn(*args, **kwargs) redis_client.set(key, zdumps(val), expiration_time) return val else: return zloads(val) def generate_key(*args, **kwargs): args = ((None, ) + args) if fn_has_self else args return fn_generate_key(*args, **kwargs) def flush(*args, **kwargs): return redis_client.delete(generate_key(*args, **kwargs)) wrapper.generate_key = generate_key wrapper.flush = flush wrapper.original = fn return wrapper
def function_key_generator(namespace, fn, to_str=key_generate_to_str): # NOTE(morganfainberg): This wraps dogpile.cache's default # function_key_generator to change the default to_str mechanism. return util.function_key_generator(namespace, fn, to_str=to_str)
def function_key_generator(namespace, fn, to_str=_key_generate_to_str): # NOTE(morganfainberg): This wraps dogpile.cache's default # function_key_generator to change the default to_str mechanism. return util.function_key_generator(namespace, fn, to_str=to_str)
def decorate(fn): canary.append(util.function_key_generator(namespace, fn, **kw)) return fn
def to_native_str_key_generator(namespace, fn, to_str=_to_native_str): return function_key_generator(namespace, fn, to_str)
def _get_key(self, f, args, kwargs): key = function_key_generator(None, f)(*args, **kwargs) return key