Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: freeze the UUID of examples DB #15724

Merged
merged 1 commit into from Jul 27, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
21 changes: 14 additions & 7 deletions superset/commands/importers/v1/examples.py
Expand Up @@ -70,7 +70,7 @@ def run(self) -> None:
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,
Expand All @@ -86,16 +86,23 @@ def _import(
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
)
Expand Down
4 changes: 4 additions & 0 deletions superset/constants.py
Expand Up @@ -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
Expand Down
Expand Up @@ -73,4 +73,4 @@ columns:
description: null
python_date_format: null
version: 1.0.0
database_uuid: 566ca280-3da8-967e-4aa4-4b349218736a
database_uuid: a2dc77af-e654-49bb-b321-40f6b559a1ee
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Other datasets inside superset/examples/configs/datasets/examples already had the UUID set to this, so I kept it and updated this one.

10 changes: 9 additions & 1 deletion superset/utils/core.py
Expand Up @@ -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,
Expand Down Expand Up @@ -1167,9 +1168,16 @@ def get_or_create_db(
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:
Expand Down