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)

Reply via email to