diff --git a/src/octoprint/server/__init__.py b/src/octoprint/server/__init__.py index 2b4aae3f..25776f51 100644 --- a/src/octoprint/server/__init__.py +++ b/src/octoprint/server/__init__.py @@ -762,10 +762,14 @@ class Server(object): self._logger.info("Preemptively caching {} (plugin {}) for {!r}".format(route, plugin, kwargs)) else: self._logger.info("Preemptively caching {} for {!r}".format(route, kwargs)) + + headers = kwargs.get("headers", dict()) + headers["X-Force-View"] = plugin if plugin else "_default" + kwargs["headers"] = headers + builder = EnvironBuilder(**kwargs) - with preemptive_cache.cache_environment(dict(plugin=plugin if plugin is not None else "_default")): - with preemptive_cache.disable_access_logging(): - app(builder.get_environ(), lambda *a, **kw: None) + with preemptive_cache.disable_access_logging(): + app(builder.get_environ(), lambda *a, **kw: None) except: self._logger.exception("Error while trying to preemptively cache {} for {!r}".format(route, kwargs)) diff --git a/src/octoprint/server/util/flask.py b/src/octoprint/server/util/flask.py index d55efcb9..62be90fe 100644 --- a/src/octoprint/server/util/flask.py +++ b/src/octoprint/server/util/flask.py @@ -448,13 +448,6 @@ class PreemptiveCache(object): yield self._log_access = True - @contextlib.contextmanager - def cache_environment(self, environment): - with self._environment_lock: - self.environment = environment - yield - self.environment = None - def clean_all_data(self, cleanup_function): assert callable(cleanup_function) diff --git a/src/octoprint/server/views.py b/src/octoprint/server/views.py index 0c697a85..22bdeae0 100644 --- a/src/octoprint/server/views.py +++ b/src/octoprint/server/views.py @@ -327,10 +327,7 @@ def index(): dict()) return preemptively_cached() - forced_view = None - preemptive_cache_environment = preemptiveCache.environment - if preemptive_cache_environment is not None and isinstance(preemptive_cache_environment, dict): - forced_view = preemptive_cache_environment.get("plugin", "_default") + forced_view = request.headers.get("X-Forced-View", None) if forced_view: # we have view forced by the preemptive cache @@ -353,6 +350,8 @@ def index(): response = plugin_view(plugin) if response is not None: break + else: + _logger.warn("UiPlugin {} returned an empty response".format(plugin._identifier)) else: response = default_view()