fix: Avoid 500 if end users write bad SQL (#26638)

This commit is contained in:
Igor Khrol
2024-01-18 13:23:23 -03:00
committed by Michael S. Molina
parent d9905c68eb
commit e683c23014
4 changed files with 45 additions and 4 deletions
@@ -23,10 +23,18 @@ from unittest.mock import Mock, patch
import pandas as pd
import pytest
from pytest_mock import MockerFixture
from requests.exceptions import ConnectionError as RequestsConnectionError
from sqlalchemy import types
from trino.exceptions import TrinoExternalError, TrinoInternalError, TrinoUserError
import superset.config
from superset.constants import QUERY_CANCEL_KEY, QUERY_EARLY_CANCEL_KEY, USER_AGENT
from superset.db_engine_specs.exceptions import (
SupersetDBAPIConnectionError,
SupersetDBAPIDatabaseError,
SupersetDBAPIOperationalError,
SupersetDBAPIProgrammingError,
)
from superset.utils.core import GenericDataType
from tests.unit_tests.db_engine_specs.utils import (
assert_column_spec,
@@ -411,3 +419,14 @@ def test_get_indexes_no_table():
db_mock, inspector_mock, "test_table", "test_schema"
)
assert result == []
def test_get_dbapi_exception_mapping():
from superset.db_engine_specs.trino import TrinoEngineSpec
mapping = TrinoEngineSpec.get_dbapi_exception_mapping()
assert mapping.get(TrinoUserError) == SupersetDBAPIProgrammingError
assert mapping.get(TrinoInternalError) == SupersetDBAPIDatabaseError
assert mapping.get(TrinoExternalError) == SupersetDBAPIOperationalError
assert mapping.get(RequestsConnectionError) == SupersetDBAPIConnectionError
assert mapping.get(Exception) is None