This commit is contained in:
Volobuev Andrey
2025-04-01 15:20:19 +03:00
commit 992073d2f5
10 changed files with 1028 additions and 0 deletions

99
migration_script.py Normal file
View File

@@ -0,0 +1,99 @@
from superset_tool.models import SupersetConfig
from superset_tool.client import SupersetClient
from superset_tool.exceptions import AuthenticationError
from superset_tool.utils.fileio import save_and_unpack_dashboard, update_db_yaml, archive_exports, sync_for_git
import os
import keyring
from pathlib import Path
database_config={"PROD":
{
"database_name": "Prod Clickhouse",
"sqlalchemy_uri": "clickhousedb+connect://clicketl:XXXXXXXXXX@rgm-s-khclk.hq.root.ad:443/dm",
"uuid": "b9b67cb5-9874-4dc6-87bd-354fc33be6f9",
"allow_ctas": "true",
"allow_cvas": "true",
"allow_dml": "true"
},
"DEV": {
"database_name": "Dev Clickhouse",
"sqlalchemy_uri": "clickhousedb+connect://dwhuser:XXXXXXXXXX@10.66.229.179:8123/dm",
"uuid": "b9b67cb5-9874-4dc6-87bd-354fc33be6f9",
"database_uuid": "b9b67cb5-9874-4dc6-87bd-354fc33be6f9",
"allow_ctas": "true",
"allow_cvas": "true",
"allow_dml": "true"
}
}
# Конфигурация для Dev
dev_config = SupersetConfig(
base_url="https://devta.bi.dwh.rusal.com/api/v1",
auth={
"provider": "db",
"username": "migrate_user",
"password": keyring.get_password("system", "dev migrate"),
"refresh": True
},
verify_ssl=False
)
# Конфигурация для Prod
prod_config = SupersetConfig(
base_url="https://prodta.bi.dwh.rusal.com/api/v1",
auth={
"provider": "db",
"username": "migrate_user",
"password": keyring.get_password("system", "prod migrate"),
"refresh": True
},
verify_ssl=False
)
# Конфигурация для Sandbox
sandbox_config = SupersetConfig(
base_url="https://sandboxta.bi.dwh.rusal.com/api/v1",
auth={
"provider": "db",
"username": "migrate_user",
"password": keyring.get_password("system", "sandbox migrate"),
"refresh": True
},
verify_ssl=False
)
# Инициализация клиента
dev_client = SupersetClient(dev_config)
#prod_client = SupersetClient(prod_config)
dashboard_slug = "IM0010"
#dashboard_id = 53
dashboard_meta = dev_client.get_dashboard(dashboard_slug)
print(dashboard_meta)
# print(dashboard_meta["dashboard_title"])
#dashboard_id = dashboard_meta["id"]
# zip_content, filename = prod_client.export_dashboard(dashboard_id)
# superset_repo = "H:\\Superset\\repo\\"
# # print(f"Экспортируем дашборд ID = {dashboard_id}...")
# # #Сохранение и распаковка
# zip_path, unpacked_path = save_and_unpack_dashboard(
# zip_content=zip_content,
# original_filename=filename,
# output_dir=f"dashboards\{dashboard_slug}"
# )
# dest_path = os.path.join(superset_repo,dashboard_slug)
# source_path = os.path.join(unpacked_path,Path(filename).stem)
# print(dest_path)
# print(source_path)
# sync_for_git(source_path=source_path,destination_path=dest_path,verbose=True)
# print(f"Сохранено в: {zip_path}")
# print(f"Распаковано в: {unpacked_path}")
# update_db_yaml(prod_config.database_config, path = unpacked_path,verbose=False)
# prod_client.import_dashboard(zip_path)
# archive_exports("dashboards", max_files=3)