From ce53cd0ef3c9ad58c6420694e1d68fc25800f83a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Fri, 21 Sep 2018 12:39:20 +0200 Subject: [PATCH 1/2] misc: keep data source calls in request cache (#26612) --- wcs/data_sources.py | 9 ++++++++- wcs/qommon/http_request.py | 1 + 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/wcs/data_sources.py b/wcs/data_sources.py index a49d7eb3a..af89cedc5 100644 --- a/wcs/data_sources.py +++ b/wcs/data_sources.py @@ -19,7 +19,7 @@ import urllib import urlparse import xml.etree.ElementTree as ET -from quixote import get_publisher +from quixote import get_publisher, get_request from quixote.html import TemplateIO from qommon import _ @@ -156,6 +156,11 @@ def get_structured_items(data_source): if Template.is_template_string(url): vars = get_publisher().substitutions.get_context_variables() url = get_variadic_url(url, vars) + + request = get_request() + if hasattr(request, 'datasources_cache') and url in request.datasources_cache: + return request.datasources_cache[url] + try: signature_key, orig = get_secret_and_orig(url) except MissingSecret: @@ -181,6 +186,8 @@ def get_structured_items(data_source): if 'text' not in item: item['text'] = item['id'] items.append(item) + if hasattr(request, 'datasources_cache'): + request.datasources_cache[url] = items return items except qommon.misc.ConnectionError as e: get_logger().warn('Error loading JSON data source (%s)' % str(e)) diff --git a/wcs/qommon/http_request.py b/wcs/qommon/http_request.py index 4b603740f..2359657c2 100644 --- a/wcs/qommon/http_request.py +++ b/wcs/qommon/http_request.py @@ -36,6 +36,7 @@ class HTTPRequest(quixote.http_request.HTTPRequest): self.is_json_marker = None self.ignore_session = False self.wscalls_cache = {} + self.datasources_cache = {} # keep a copy of environment to make sure it's not reused along # uwsgi/gunicorn processes. self.environ = copy.copy(self.environ) -- 2.19.0