This is an automated email from the ASF dual-hosted git repository. mayurnewase pushed a commit to branch fix-21635 in repository https://gitbox.apache.org/repos/asf/superset.git
commit 7e29e210dbb3d90514522b7900e1bd6f672363a9 Author: Mayur <[email protected]> AuthorDate: Thu Sep 29 10:48:58 2022 +0530 check slice cache timeout --- superset/common/query_context.py | 6 ++++++ superset/common/query_context_factory.py | 12 ++++++++++++ 2 files changed, 18 insertions(+) diff --git a/superset/common/query_context.py b/superset/common/query_context.py index 4a91c6ad6d..b9414fddd1 100644 --- a/superset/common/query_context.py +++ b/superset/common/query_context.py @@ -27,6 +27,7 @@ from superset.common.query_context_processor import ( QueryContextProcessor, ) from superset.common.query_object import QueryObject +from superset.models.slice import Slice if TYPE_CHECKING: from superset.connectors.base.models import BaseDatasource @@ -46,6 +47,7 @@ class QueryContext: enforce_numerical_metrics: ClassVar[bool] = True datasource: BaseDatasource + slice_id: Optional[int] = None queries: List[QueryObject] form_data: Optional[Dict[str, Any]] result_type: ChartDataResultType @@ -64,6 +66,7 @@ class QueryContext: *, datasource: BaseDatasource, queries: List[QueryObject], + slice: Optional[Slice], form_data: Optional[Dict[str, Any]], result_type: ChartDataResultType, result_format: ChartDataResultFormat, @@ -72,6 +75,7 @@ class QueryContext: cache_values: Dict[str, Any], ) -> None: self.datasource = datasource + self.slice = slice self.result_type = result_type self.result_format = result_format self.queries = queries @@ -98,6 +102,8 @@ class QueryContext: def get_cache_timeout(self) -> Optional[int]: if self.custom_cache_timeout is not None: return self.custom_cache_timeout + if self.slice and self.slice.cache_timeout: + return self.slice.cache_timeout if self.datasource.cache_timeout is not None: return self.datasource.cache_timeout if hasattr(self.datasource, "database"): diff --git a/superset/common/query_context_factory.py b/superset/common/query_context_factory.py index dc43d28de9..84fdeb7109 100644 --- a/superset/common/query_context_factory.py +++ b/superset/common/query_context_factory.py @@ -19,10 +19,12 @@ from __future__ import annotations from typing import Any, Dict, List, Optional, TYPE_CHECKING from superset import app, db +from superset.charts.dao import ChartDAO from superset.common.chart_data import ChartDataResultFormat, ChartDataResultType from superset.common.query_context import QueryContext from superset.common.query_object_factory import QueryObjectFactory from superset.datasource.dao import DatasourceDAO +from superset.models.slice import Slice from superset.utils.core import DatasourceDict, DatasourceType if TYPE_CHECKING: @@ -55,6 +57,12 @@ class QueryContextFactory: # pylint: disable=too-few-public-methods datasource_model_instance = None if datasource: datasource_model_instance = self._convert_to_model(datasource) + + slice = None + if form_data and form_data.get("slice_id") is not None: + slice_id = form_data.get("slice_id") + slice = self._get_slice(slice_id) + result_type = result_type or ChartDataResultType.FULL result_format = result_format or ChartDataResultFormat.JSON queries_ = [ @@ -72,6 +80,7 @@ class QueryContextFactory: # pylint: disable=too-few-public-methods return QueryContext( datasource=datasource_model_instance, queries=queries_, + slice=slice, form_data=form_data, result_type=result_type, result_format=result_format, @@ -88,3 +97,6 @@ class QueryContextFactory: # pylint: disable=too-few-public-methods datasource_type=DatasourceType(datasource["type"]), datasource_id=int(datasource["id"]), ) + + def _get_slice(self, slice_id: Any) -> Optional[Slice]: + return ChartDAO.find_by_id(slice_id)
