From 306fb22021f84e7dd527c88c00be1f8e7cca0d8c Mon Sep 17 00:00:00 2001 From: Ville Brofeldt <33317356+villebro@users.noreply.github.com> Date: Wed, 19 Apr 2023 18:49:33 +0300 Subject: [PATCH] chore(chart-data): add post processing error message to response (#23734) --- superset/common/query_context_processor.py | 2 +- .../charts/data/api_tests.py | 27 +++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/superset/common/query_context_processor.py b/superset/common/query_context_processor.py index 019422db3924..56f07dcb64b5 100644 --- a/superset/common/query_context_processor.py +++ b/superset/common/query_context_processor.py @@ -237,7 +237,7 @@ def get_query_result(self, query_object: QueryObject) -> QueryResult: try: df = query_object.exec_post_processing(df) except InvalidPostProcessingError as ex: - raise QueryObjectValidationError from ex + raise QueryObjectValidationError(ex.message) from ex result.df = df result.query = query diff --git a/tests/integration_tests/charts/data/api_tests.py b/tests/integration_tests/charts/data/api_tests.py index db81488c3f9d..5315bbbaed70 100644 --- a/tests/integration_tests/charts/data/api_tests.py +++ b/tests/integration_tests/charts/data/api_tests.py @@ -481,6 +481,33 @@ def test_chart_data_prophet(self): self.assertIn("sum__num__yhat_lower", row) self.assertEqual(result["rowcount"], 47) + @pytest.mark.usefixtures("load_birth_names_dashboard_with_slices") + def test_chart_data_invalid_post_processing(self): + """ + Chart data API: Ensure incorrect post processing returns correct response + """ + query_context = self.query_context_payload + query = query_context["queries"][0] + query["columns"] = ["name", "gender"] + query["post_processing"] = [ + { + "operation": "pivot", + "options": { + "drop_missing_columns": False, + "columns": ["gender"], + "index": ["name"], + "aggregates": {}, + }, + }, + ] + rv = self.post_assert_metric(CHART_DATA_URI, query_context, "data") + assert rv.status_code == 400 + data = json.loads(rv.data.decode("utf-8")) + assert ( + data["message"] + == "Error: Pivot operation must include at least one aggregate" + ) + @pytest.mark.usefixtures("load_birth_names_dashboard_with_slices") def test_with_query_result_type_and_non_existent_filter__filter_omitted(self): self.query_context_payload["queries"][0]["filters"] = [