This is an automated email from the ASF dual-hosted git repository.
elizabeth pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/superset.git
The following commit(s) were added to refs/heads/master by this push:
new 2e5016713a chore: log warnings for database tables api (#30410)
2e5016713a is described below
commit 2e5016713aac8086f352028736023d2019962f1b
Author: Elizabeth Thompson <[email protected]>
AuthorDate: Mon Sep 30 13:52:17 2024 -0700
chore: log warnings for database tables api (#30410)
---
superset/commands/database/exceptions.py | 2 +-
superset/commands/database/tables.py | 2 +-
superset/databases/api.py | 18 +++++-------------
tests/integration_tests/databases/api_tests.py | 13 +++++++++++--
4 files changed, 18 insertions(+), 17 deletions(-)
diff --git a/superset/commands/database/exceptions.py
b/superset/commands/database/exceptions.py
index 216252c70d..5285deb0f9 100644
--- a/superset/commands/database/exceptions.py
+++ b/superset/commands/database/exceptions.py
@@ -158,7 +158,7 @@ class
DatabaseTestConnectionUnexpectedError(SupersetErrorsException):
message = _("Unexpected error occurred, please check your logs for
details")
-class DatabaseTablesUnexpectedError(Exception):
+class DatabaseTablesUnexpectedError(CommandException):
status = 422
message = _("Unexpected error occurred, please check your logs for
details")
diff --git a/superset/commands/database/tables.py
b/superset/commands/database/tables.py
index 80f1748898..b28d4f065f 100644
--- a/superset/commands/database/tables.py
+++ b/superset/commands/database/tables.py
@@ -130,7 +130,7 @@ class TablesDatabaseCommand(BaseCommand):
except SupersetException:
raise
except Exception as ex:
- raise DatabaseTablesUnexpectedError(ex) from ex
+ raise DatabaseTablesUnexpectedError(str(ex)) from ex
def validate(self) -> None:
self._model = cast(Database, DatabaseDAO.find_by_id(self._db_id))
diff --git a/superset/databases/api.py b/superset/databases/api.py
index b58e46bf3f..88188bed57 100644
--- a/superset/databases/api.py
+++ b/superset/databases/api.py
@@ -41,7 +41,6 @@ from superset.commands.database.exceptions import (
DatabaseDeleteFailedError,
DatabaseInvalidError,
DatabaseNotFoundError,
- DatabaseTablesUnexpectedError,
DatabaseUpdateFailedError,
InvalidParametersError,
)
@@ -131,7 +130,7 @@ from superset.views.base_api import (
requires_json,
statsd_metrics,
)
-from superset.views.error_handling import json_error_response
+from superset.views.error_handling import handle_api_exception,
json_error_response
from superset.views.filters import BaseFilterRelatedUsers, FilterRelatedOwners
logger = logging.getLogger(__name__)
@@ -755,9 +754,9 @@ class DatabaseRestApi(BaseSupersetModelRestApi):
@expose("/<int:pk>/tables/")
@protect()
- @safe
@rison(database_tables_query_schema)
@statsd_metrics
+ @handle_api_exception
@event_logger.log_this_with_context(
action=lambda self, *args, **kwargs: f"{self.__class__.__name__}"
f".tables",
log_to_statsd=False,
@@ -810,16 +809,9 @@ class DatabaseRestApi(BaseSupersetModelRestApi):
catalog_name = kwargs["rison"].get("catalog_name")
schema_name = kwargs["rison"].get("schema_name", "")
- try:
- command = TablesDatabaseCommand(pk, catalog_name, schema_name,
force)
- payload = command.run()
- return self.response(200, **payload)
- except DatabaseNotFoundError:
- return self.response_404()
- except SupersetException as ex:
- return self.response(ex.status, message=ex.message)
- except DatabaseTablesUnexpectedError as ex:
- return self.response_422(ex.message)
+ command = TablesDatabaseCommand(pk, catalog_name, schema_name, force)
+ payload = command.run()
+ return self.response(200, **payload)
@expose("/<int:pk>/table/<path:table_name>/<schema_name>/",
methods=("GET",))
@protect()
diff --git a/tests/integration_tests/databases/api_tests.py
b/tests/integration_tests/databases/api_tests.py
index bd99733d93..c5cd20b5dc 100644
--- a/tests/integration_tests/databases/api_tests.py
+++ b/tests/integration_tests/databases/api_tests.py
@@ -2005,7 +2005,8 @@ class TestDatabaseApi(SupersetTestCase):
self.assertEqual(option["type"], "table")
self.assertTrue(option["value"] in schemas)
- def test_database_tables_not_found(self):
+ @patch("superset.utils.log.logger")
+ def test_database_tables_not_found(self, logger_mock):
"""
Database API: Test database tables not found
"""
@@ -2014,6 +2015,9 @@ class TestDatabaseApi(SupersetTestCase):
uri =
f"api/v1/database/{example_db.id}/tables/?q={prison.dumps({'schema_name':
'non_existent'})}"
rv = self.client.get(uri)
self.assertEqual(rv.status_code, 404)
+ logger_mock.warning.assert_called_once_with(
+ "Database not found.", exc_info=True
+ )
def test_database_tables_invalid_query(self):
"""
@@ -2026,8 +2030,12 @@ class TestDatabaseApi(SupersetTestCase):
)
self.assertEqual(rv.status_code, 400)
+ @patch("superset.utils.log.logger")
@mock.patch("superset.security.manager.SupersetSecurityManager.can_access_database")
- def test_database_tables_unexpected_error(self, mock_can_access_database):
+ @mock.patch("superset.models.core.Database.get_all_table_names_in_schema")
+ def test_database_tables_unexpected_error(
+ self, mock_get_all_table_names_in_schema, mock_can_access_database,
logger_mock
+ ):
"""
Database API: Test database tables with unexpected error
"""
@@ -2039,6 +2047,7 @@ class TestDatabaseApi(SupersetTestCase):
f"api/v1/database/{database.id}/tables/?q={prison.dumps({'schema_name':
'main'})}"
)
self.assertEqual(rv.status_code, 422)
+ logger_mock.warning.assert_called_once_with("Test Error",
exc_info=True)
def test_test_connection(self):
"""