From 8fac2fed48fa998f062869ed8983869edd25ab7c Mon Sep 17 00:00:00 2001 From: Ralph Bean Date: Sep 18 2017 17:18:08 +0000 Subject: Simplify and remove some code. --- diff --git a/greenwave/app_factory.py b/greenwave/app_factory.py index 6f3f031..cb86e47 100644 --- a/greenwave/app_factory.py +++ b/greenwave/app_factory.py @@ -4,9 +4,9 @@ from flask import Flask from greenwave.logger import init_logging from greenwave.api_v1 import api +from greenwave.cache import cache from greenwave.utils import json_error, load_config -from dogpile.cache import make_region from requests import ConnectionError, Timeout from werkzeug.exceptions import default_exceptions @@ -32,7 +32,8 @@ def create_app(config_obj=None): app.add_url_rule('/healthcheck', view_func=healthcheck) # Initialize the cache. - app.cache = make_region().configure(**app.config['CACHE']) + if not cache.is_configured: + cache.configure(**app.config['CACHE']) return app diff --git a/greenwave/cache.py b/greenwave/cache.py index aa2421d..27fb3b6 100644 --- a/greenwave/cache.py +++ b/greenwave/cache.py @@ -1,37 +1,9 @@ # SPDX-License-Identifier: GPL-2.0+ -import json +import dogpile.cache -from flask import current_app +# Our globally available cache region. Gets initialized in app_factory. +cache = dogpile.cache.make_region() - -def cache_key_generator(fn, arg): - """ Given a function and arguments, return a "cache key" for the value. - - The returned cache key should uniquely identify the function and arguments - passed to it. - """ - return "|".join([ - fn.__module__, - fn.__name__, - json.dumps(arg) - ]).encode('utf-8') - - -def cached(fn): - """ Cache the given function. - - This is a decorator. - - The return value of the given function is cached in the ``cache`` object - associated with the flask ``current_app``. - """ - - def wrapper(arg): - key = cache_key_generator(fn, arg) - creator = lambda: fn(arg) - return current_app.cache.get_or_create(key, creator) - wrapper.__module__ = fn.__module__ - wrapper.__name__ = fn.__name__ - wrapper.__doc__ = fn.__doc__ - return wrapper +# Provide a convenient alias for the key generator we want to use +key_generator = dogpile.cache.util.function_key_generator diff --git a/greenwave/resources.py b/greenwave/resources.py index 11335f0..2a95f2f 100644 --- a/greenwave/resources.py +++ b/greenwave/resources.py @@ -9,12 +9,12 @@ waiverdb, etc..). import requests from flask import current_app -from greenwave.cache import cached +from greenwave.cache import cache, key_generator requests_session = requests.Session() -@cached +@cache.cache_on_arguments(function_key_generator=key_generator) def retrieve_results(item): """ Retrieve cached results from resultsdb for a given item. """ # XXX make this more efficient than just fetching everything