chore: set UUID of examples DB (#15724)
diff --git a/superset/commands/importers/v1/examples.py b/superset/commands/importers/v1/examples.py
index 1571a21..f84f529 100644
--- a/superset/commands/importers/v1/examples.py
+++ b/superset/commands/importers/v1/examples.py
@@ -70,7 +70,7 @@
db.session.rollback()
raise self.import_error()
- # pylint: disable=too-many-locals, arguments-differ
+ # pylint: disable=too-many-locals, arguments-differ, too-many-branches
@staticmethod
def _import(
session: Session,
@@ -86,16 +86,23 @@
database_ids[str(database.uuid)] = database.id
# import datasets
- # TODO (betodealmeida): once we have all examples being imported we can
- # have a stable UUID for the database stored in the dataset YAML; for
- # now we need to fetch the current ID.
- examples_id = (
- db.session.query(Database).filter_by(database_name="examples").one().id
+ # If database_uuid is not in the list of UUIDs it means that the examples
+ # database was created before its UUID was frozen, so it has a random UUID.
+ # We need to determine its ID so we can point the dataset to it.
+ examples_db = (
+ db.session.query(Database).filter_by(database_name="examples").first()
)
dataset_info: Dict[str, Dict[str, Any]] = {}
for file_name, config in configs.items():
if file_name.startswith("datasets/"):
- config["database_id"] = examples_id
+ # find the ID of the corresponding database
+ if config["database_uuid"] not in database_ids:
+ if examples_db is None:
+ raise Exception("Cannot find examples database")
+ config["database_id"] = examples_db.id
+ else:
+ config["database_id"] = database_ids[config["database_uuid"]]
+
dataset = import_dataset(
session, config, overwrite=overwrite, force_data=force_data
)
diff --git a/superset/constants.py b/superset/constants.py
index a4f0ad1..7defc34 100644
--- a/superset/constants.py
+++ b/superset/constants.py
@@ -21,6 +21,10 @@
NULL_STRING = "<NULL>"
+# UUID for the examples database
+EXAMPLES_DB_UUID = "a2dc77af-e654-49bb-b321-40f6b559a1ee"
+
+
class RouteMethod: # pylint: disable=too-few-public-methods
"""
Route methods are a FAB concept around ModelView and RestModelView
diff --git a/superset/examples/configs/datasets/examples/users_channels-uzooNNtSRO.yaml b/superset/examples/configs/datasets/examples/users_channels-uzooNNtSRO.yaml
index f54d061..152ca32 100644
--- a/superset/examples/configs/datasets/examples/users_channels-uzooNNtSRO.yaml
+++ b/superset/examples/configs/datasets/examples/users_channels-uzooNNtSRO.yaml
@@ -73,4 +73,4 @@
description: null
python_date_format: null
version: 1.0.0
-database_uuid: 566ca280-3da8-967e-4aa4-4b349218736a
+database_uuid: a2dc77af-e654-49bb-b321-40f6b559a1ee
diff --git a/superset/utils/core.py b/superset/utils/core.py
index 4371640..0c4c18f 100644
--- a/superset/utils/core.py
+++ b/superset/utils/core.py
@@ -85,6 +85,7 @@
import _thread # pylint: disable=C0411
from superset.constants import (
+ EXAMPLES_DB_UUID,
EXTRA_FORM_DATA_APPEND_KEYS,
EXTRA_FORM_DATA_OVERRIDE_EXTRA_KEYS,
EXTRA_FORM_DATA_OVERRIDE_REGULAR_MAPPINGS,
@@ -1168,9 +1169,16 @@
db.session.query(models.Database).filter_by(database_name=database_name).first()
)
+ # databases with a fixed UUID
+ uuids = {
+ "examples": EXAMPLES_DB_UUID,
+ }
+
if not database and always_create:
logger.info("Creating database reference for %s", database_name)
- database = models.Database(database_name=database_name)
+ database = models.Database(
+ database_name=database_name, uuid=uuids.get(database_name)
+ )
db.session.add(database)
if database: