diff --git a/superset/models/helpers.py b/superset/models/helpers.py index 65d8a8c8cda..091a5d121a0 100644 --- a/superset/models/helpers.py +++ b/superset/models/helpers.py @@ -264,9 +264,15 @@ class UUIDMixin: # pylint: disable=too-few-public-methods # ``test_import_dataset``'s ``metric.uuid == uuid.UUID(...)`` # assertion (string-vs-UUID inequality). Coerce defensively here # so callers always see a ``UUID``, regardless of where the value - # came from. + # came from. Pass non-UUID-shaped strings through unchanged so test + # mocks with placeholder strings (e.g. ``"dashboard-uuid-7"``) + # still work — the SQL bind layer will surface a clearer error + # if such a value is ever written to the DB. if isinstance(value, str): - return uuid.UUID(value) + try: + return uuid.UUID(value) + except (ValueError, AttributeError): + return value return value @property diff --git a/tests/unit_tests/databases/commands/importers/v1/import_test.py b/tests/unit_tests/databases/commands/importers/v1/import_test.py index 90ca9584aba..03e2bbdde42 100644 --- a/tests/unit_tests/databases/commands/importers/v1/import_test.py +++ b/tests/unit_tests/databases/commands/importers/v1/import_test.py @@ -17,6 +17,7 @@ # pylint: disable=unused-argument, import-outside-toplevel, invalid-name import copy +import uuid import pytest from flask import current_app @@ -56,7 +57,7 @@ def test_import_database(mocker: MockerFixture, session: Session) -> None: assert database.allow_dml is True assert database.allow_file_upload is True assert database.extra == "{}" - assert database.uuid == "b8a1ccd3-779d-4ab7-8ad8-9ab119d7fe89" + assert database.uuid == uuid.UUID("b8a1ccd3-779d-4ab7-8ad8-9ab119d7fe89") assert database.is_managed_externally is False assert database.external_url is None @@ -89,7 +90,7 @@ def test_import_database_no_creds(mocker: MockerFixture, session: Session) -> No assert database.database_name == "imported_database_no_creds" assert database.sqlalchemy_uri == "bigquery://test-db/" assert database.extra == "{}" - assert database.uuid == "2ff17edc-f3fa-4609-a5ac-b484281225bc" + assert database.uuid == uuid.UUID("2ff17edc-f3fa-4609-a5ac-b484281225bc") def test_import_database_sqlite_invalid( diff --git a/tests/unit_tests/examples/generic_loader_test.py b/tests/unit_tests/examples/generic_loader_test.py index e921d748f3d..96d9e4d826f 100644 --- a/tests/unit_tests/examples/generic_loader_test.py +++ b/tests/unit_tests/examples/generic_loader_test.py @@ -16,6 +16,7 @@ # under the License. """Tests for generic_loader.py UUID threading functionality.""" +import uuid from unittest.mock import MagicMock, patch @@ -54,7 +55,7 @@ def test_load_parquet_table_sets_uuid_on_new_table(mock_db, mock_get_db): uuid=test_uuid, ) - assert tbl.uuid == test_uuid + assert tbl.uuid == uuid.UUID(test_uuid) @patch("superset.examples.generic_loader.get_example_database")