mirror of
https://github.com/apache/superset.git
synced 2026-04-19 08:04:53 +00:00
fix(reports): force data generation in csv reports (#22196)
This commit is contained in:
@@ -89,6 +89,11 @@ class ChartDataRestApi(ChartRestApi):
|
||||
description: The type in which the data should be returned
|
||||
schema:
|
||||
type: string
|
||||
- in: query
|
||||
name: force
|
||||
description: Should the queries be forced to load from the source
|
||||
schema:
|
||||
type: boolean
|
||||
responses:
|
||||
200:
|
||||
description: Query result
|
||||
@@ -130,6 +135,7 @@ class ChartDataRestApi(ChartRestApi):
|
||||
"format", ChartDataResultFormat.JSON
|
||||
)
|
||||
json_body["result_type"] = request.args.get("type", ChartDataResultType.FULL)
|
||||
json_body["force"] = request.args.get("force")
|
||||
|
||||
try:
|
||||
query_context = self._create_query_context_from_form(json_body)
|
||||
|
||||
@@ -1205,6 +1205,7 @@ class ChartDataQueryContextSchema(Schema):
|
||||
force = fields.Boolean(
|
||||
description="Should the queries be forced to load from the source. "
|
||||
"Default: `false`",
|
||||
allow_none=True,
|
||||
)
|
||||
|
||||
result_type = EnumField(ChartDataResultType, by_value=True)
|
||||
|
||||
@@ -862,6 +862,56 @@ class TestGetChartDataApi(BaseTestChartDataApi):
|
||||
assert data["result"][0]["status"] == "success"
|
||||
assert data["result"][0]["rowcount"] == 2
|
||||
|
||||
@pytest.mark.usefixtures("load_birth_names_dashboard_with_slices")
|
||||
def test_chart_data_get_forced(self):
|
||||
"""
|
||||
Chart data API: Test GET endpoint with force cache parameter
|
||||
"""
|
||||
chart = db.session.query(Slice).filter_by(slice_name="Genders").one()
|
||||
chart.query_context = json.dumps(
|
||||
{
|
||||
"datasource": {"id": chart.table.id, "type": "table"},
|
||||
"force": False,
|
||||
"queries": [
|
||||
{
|
||||
"time_range": "1900-01-01T00:00:00 : 2000-01-01T00:00:00",
|
||||
"granularity": "ds",
|
||||
"filters": [],
|
||||
"extras": {
|
||||
"having": "",
|
||||
"having_druid": [],
|
||||
"where": "",
|
||||
},
|
||||
"applied_time_extras": {},
|
||||
"columns": ["gender"],
|
||||
"metrics": ["sum__num"],
|
||||
"orderby": [["sum__num", False]],
|
||||
"annotation_layers": [],
|
||||
"row_limit": 50000,
|
||||
"timeseries_limit": 0,
|
||||
"order_desc": True,
|
||||
"url_params": {},
|
||||
"custom_params": {},
|
||||
"custom_form_data": {},
|
||||
}
|
||||
],
|
||||
"result_format": "json",
|
||||
"result_type": "full",
|
||||
}
|
||||
)
|
||||
|
||||
self.get_assert_metric(f"api/v1/chart/{chart.id}/data/?force=true", "get_data")
|
||||
|
||||
# should burst cache
|
||||
rv = self.get_assert_metric(
|
||||
f"api/v1/chart/{chart.id}/data/?force=true", "get_data"
|
||||
)
|
||||
assert rv.json["result"][0]["is_cached"] is None
|
||||
|
||||
# should get response from the cache
|
||||
rv = self.get_assert_metric(f"api/v1/chart/{chart.id}/data/", "get_data")
|
||||
assert rv.json["result"][0]["is_cached"]
|
||||
|
||||
@pytest.mark.usefixtures("load_birth_names_dashboard_with_slices")
|
||||
@with_feature_flags(GLOBAL_ASYNC_QUERIES=True)
|
||||
@mock.patch("superset.charts.data.api.QueryContextCacheLoader")
|
||||
|
||||
Reference in New Issue
Block a user