From 60a617eabab42acb3adad166c01af3965dafac18 Mon Sep 17 00:00:00 2001 From: Antonio Rivero Martinez <38889534+Antonio-RiveroMartnez@users.noreply.github.com> Date: Wed, 7 Dec 2022 15:34:30 -0300 Subject: [PATCH] fix(bigquery): Properly display errors for BigQuery DBs (#22349) --- superset/db_engine_specs/bigquery.py | 2 +- tests/unit_tests/db_engine_specs/test_bigquery.py | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/superset/db_engine_specs/bigquery.py b/superset/db_engine_specs/bigquery.py index f3ed3d9d2ad8..300f8c25a378 100644 --- a/superset/db_engine_specs/bigquery.py +++ b/superset/db_engine_specs/bigquery.py @@ -586,7 +586,7 @@ def _get_fields(cls, cols: List[Dict[str, Any]]) -> List[Any]: @classmethod def parse_error_exception(cls, exception: Exception) -> Exception: try: - return Exception(str(exception).splitlines()[0].rsplit(":")[1].strip()) + return Exception(str(exception).splitlines()[0].strip()) except Exception: # pylint: disable=broad-except # If for some reason we get an exception, for example, no new line # We will return the original exception diff --git a/tests/unit_tests/db_engine_specs/test_bigquery.py b/tests/unit_tests/db_engine_specs/test_bigquery.py index dda5fbf0eefc..362e88804324 100644 --- a/tests/unit_tests/db_engine_specs/test_bigquery.py +++ b/tests/unit_tests/db_engine_specs/test_bigquery.py @@ -251,7 +251,7 @@ def test_parse_error_message() -> None: Test that we parse a received message and just extract the useful information. Example errors: - bigquery error: 400 Table \"case_detail_all_suites\" must be qualified with a dataset (e.g. dataset.table). + bigquery error: 400 Syntax error: Table \"case_detail_all_suites\" must be qualified with a dataset (e.g. dataset.table). (job ID: ddf30b05-44e8-4fbf-aa29-40bfccaed886) -----Query Job SQL Follows----- @@ -259,8 +259,8 @@ def test_parse_error_message() -> None: """ from superset.db_engine_specs.bigquery import BigQueryEngineSpec - message = 'bigquery error: 400 Table "case_detail_all_suites" must be qualified with a dataset (e.g. dataset.table).\n\n(job ID: ddf30b05-44e8-4fbf-aa29-40bfccaed886)\n\n -----Query Job SQL Follows----- \n\n | . | . | . |\n 1:select * from case_detail_all_suites\n 2:LIMIT 1001\n | . | . | . |' - expected_result = '400 Table "case_detail_all_suites" must be qualified with a dataset (e.g. dataset.table).' + message = 'bigquery error: 400 Syntax error: Table "case_detail_all_suites" must be qualified with a dataset (e.g. dataset.table).\n\n(job ID: ddf30b05-44e8-4fbf-aa29-40bfccaed886)\n\n -----Query Job SQL Follows----- \n\n | . | . | . |\n 1:select * from case_detail_all_suites\n 2:LIMIT 1001\n | . | . | . |' + expected_result = 'bigquery error: 400 Syntax error: Table "case_detail_all_suites" must be qualified with a dataset (e.g. dataset.table).' assert ( str(BigQueryEngineSpec.parse_error_exception(Exception(message))) == expected_result @@ -277,9 +277,9 @@ def test_parse_error_raises_exception() -> None: """ from superset.db_engine_specs.bigquery import BigQueryEngineSpec - message = 'bigquery error: 400 Table "case_detail_all_suites" must be qualified with a dataset (e.g. dataset.table).' + message = 'bigquery error: 400 Syntax error: Table "case_detail_all_suites" must be qualified with a dataset (e.g. dataset.table).' message_2 = "6" - expected_result = '400 Table "case_detail_all_suites" must be qualified with a dataset (e.g. dataset.table).' + expected_result = 'bigquery error: 400 Syntax error: Table "case_detail_all_suites" must be qualified with a dataset (e.g. dataset.table).' assert ( str(BigQueryEngineSpec.parse_error_exception(Exception(message))) == expected_result