Skip to content

Commit 6fd40a3

Browse files
committed
fix logic to extract errors on databricks
1 parent aca2f1b commit 6fd40a3

File tree

2 files changed

+64
-5
lines changed

2 files changed

+64
-5
lines changed

superset/db_engine_specs/databricks.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -218,12 +218,15 @@ def extract_errors(
218218
raw_message = cls._extract_error_message(ex)
219219

220220
context = context or {}
221+
# access_token isn't currently parseable from the
222+
# databricks error response, but adding it in here
223+
# for reference if their error message changes
221224
context = {
222-
"host": context["hostname"],
223-
"access_token": context["password"],
224-
"port": context["port"],
225-
"username": context["username"],
226-
"database": context["database"],
225+
"host": context.get("hostname"),
226+
"access_token": context.get("password"),
227+
"port": context.get("port"),
228+
"username": context.get("username"),
229+
"database": context.get("database"),
227230
}
228231
for regex, (message, error_type, extra) in cls.custom_errors.items():
229232
match = regex.search(raw_message)

tests/unit_tests/db_engine_specs/test_databricks.py

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,11 @@
1818

1919
import json
2020

21+
import pytest
2122
from pytest_mock import MockerFixture
2223

24+
from superset.db_engine_specs.databricks import DatabricksNativeEngineSpec
25+
from superset.errors import ErrorLevel, SupersetError, SupersetErrorType
2326
from superset.utils.core import GenericDataType
2427

2528

@@ -197,3 +200,56 @@ def test_get_extra_params(mocker: MockerFixture) -> None:
197200
}
198201
}
199202
}
203+
204+
205+
def test_extract_errors() -> None:
206+
"""
207+
Test that custom error messages are extracted correctly.
208+
"""
209+
210+
msg = ": mismatched input 'fromm'. Expecting: "
211+
result = DatabricksNativeEngineSpec.extract_errors(Exception(msg))
212+
213+
assert result == [
214+
SupersetError(
215+
message=": mismatched input 'fromm'. Expecting: ",
216+
error_type=SupersetErrorType.GENERIC_DB_ENGINE_ERROR,
217+
level=ErrorLevel.ERROR,
218+
extra={
219+
"engine_name": "Databricks",
220+
"issue_codes": [
221+
{
222+
"code": 1002,
223+
"message": "Issue 1002 - The database returned an unexpected error.",
224+
}
225+
],
226+
},
227+
)
228+
]
229+
230+
231+
def test_extract_errors_with_context() -> None:
232+
"""
233+
Test that custom error messages are extracted correctly with context.
234+
"""
235+
236+
msg = ": mismatched input 'fromm'. Expecting: "
237+
context = {"hostname": "foo"}
238+
result = DatabricksNativeEngineSpec.extract_errors(Exception(msg), context)
239+
240+
assert result == [
241+
SupersetError(
242+
message=": mismatched input 'fromm'. Expecting: ",
243+
error_type=SupersetErrorType.GENERIC_DB_ENGINE_ERROR,
244+
level=ErrorLevel.ERROR,
245+
extra={
246+
"engine_name": "Databricks",
247+
"issue_codes": [
248+
{
249+
"code": 1002,
250+
"message": "Issue 1002 - The database returned an unexpected error.",
251+
}
252+
],
253+
},
254+
)
255+
]

0 commit comments

Comments
 (0)