fix(assets import): Ensure old datasource ids are not referenced in imported charts (#25086)

This commit is contained in:
Jack Fragassi 2023-08-28 09:47:19 -07:00 committed by GitHub
parent b5bac6c876
commit b240b795b5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 11 additions and 1 deletions

View File

@ -79,6 +79,7 @@ class ImportAssetsCommand(BaseCommand):
)
self._configs: dict[str, Any] = {}
# pylint: disable=too-many-locals
@staticmethod
def _import(session: Session, configs: dict[str, Any]) -> None:
# import databases first
@ -110,7 +111,13 @@ class ImportAssetsCommand(BaseCommand):
chart_ids: dict[str, int] = {}
for file_name, config in configs.items():
if file_name.startswith("charts/"):
config.update(dataset_info[config["dataset_uuid"]])
dataset_dict = dataset_info[config["dataset_uuid"]]
config.update(dataset_dict)
# pylint: disable=line-too-long
dataset_uid = f"{dataset_dict['datasource_id']}__{dataset_dict['datasource_type']}"
config["params"].update({"datasource": dataset_uid})
if "query_context" in config:
del config["query_context"]
chart = import_chart(session, config, overwrite=True)
chart_ids[str(chart.uuid)] = chart.id

View File

@ -141,6 +141,9 @@ class TestImportAssetsCommand(SupersetTestCase):
dataset = chart.table
assert str(dataset.uuid) == dataset_config["uuid"]
assert chart.query_context is None
assert json.loads(chart.params)["datasource"] == dataset.uid
database = dataset.database
assert str(database.uuid) == database_config["uuid"]