fix(reports): force data generation in csv reports (#22196)

This commit is contained in:
Mayur
2022-11-26 11:00:26 +05:30
committed by GitHub
parent eba7b3d074
commit a8bc53d805
3 changed files with 57 additions and 0 deletions

View File

@@ -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)

View File

@@ -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)

View File

@@ -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")