From 6bcb9674da5d42c414b0d24ed3d6535b4837b613 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Tue, 16 Aug 2022 08:27:12 -0700 Subject: [PATCH] Memoize the common_bootstrap_payload (#21018) Try patch Co-authored-by: Bogdan Kyryliuk (cherry picked from commit 495a205dec577097651d929bb2f062b0f5003e2e) --- superset/views/base.py | 8 +++++++- tests/integration_tests/core_tests.py | 4 +++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/superset/views/base.py b/superset/views/base.py index e505af53005..173ba5eb19e 100644 --- a/superset/views/base.py +++ b/superset/views/base.py @@ -71,6 +71,7 @@ from superset.exceptions import ( SupersetException, SupersetSecurityException, ) +from superset.extensions import cache_manager from superset.models.helpers import ImportExportMixin from superset.models.reports import ReportRecipientType from superset.superset_typing import FlaskResponse @@ -345,8 +346,13 @@ def menu_data() -> Dict[str, Any]: } +@cache_manager.cache.memoize(timeout=60) def common_bootstrap_payload() -> Dict[str, Any]: - """Common data always sent to the client""" + """Common data always sent to the client + + The function is memoized as the return value only changes based + on configuration and feature flag values. + """ messages = get_flashed_messages(with_categories=True) locale = str(get_locale()) diff --git a/tests/integration_tests/core_tests.py b/tests/integration_tests/core_tests.py index 796ae8a8d8a..5c2b81b2833 100644 --- a/tests/integration_tests/core_tests.py +++ b/tests/integration_tests/core_tests.py @@ -62,7 +62,7 @@ from superset.connectors.sqla.models import SqlaTable from superset.db_engine_specs.base import BaseEngineSpec from superset.db_engine_specs.mssql import MssqlEngineSpec from superset.exceptions import SupersetException -from superset.extensions import async_query_manager +from superset.extensions import async_query_manager, cache_manager from superset.models import core as models from superset.models.annotations import Annotation, AnnotationLayer from superset.models.dashboard import Dashboard @@ -1434,6 +1434,8 @@ class TestCore(SupersetTestCase): """ Functions in feature flags don't break bootstrap data serialization. """ + # feature flags are cached + cache_manager.cache.clear() self.login() encoded = json.dumps(