mirror of
https://github.com/apache/superset.git
synced 2026-04-19 16:14:52 +00:00
feat: export datasets as ZIP files (#11332)
* Export datasets as ZIP files * Add logging when failing to parse extra * Fix logging
This commit is contained in:
@@ -17,6 +17,7 @@
|
||||
# isort:skip_file
|
||||
|
||||
import json
|
||||
import logging
|
||||
from typing import Iterator, List, Tuple
|
||||
|
||||
import yaml
|
||||
@@ -27,6 +28,8 @@ from superset.databases.dao import DatabaseDAO
|
||||
from superset.utils.dict_import_export import IMPORT_EXPORT_VERSION, sanitize
|
||||
from superset.models.core import Database
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class ExportDatabasesCommand(BaseCommand):
|
||||
def __init__(self, database_ids: List[int]):
|
||||
@@ -37,8 +40,8 @@ class ExportDatabasesCommand(BaseCommand):
|
||||
|
||||
@staticmethod
|
||||
def export_database(database: Database) -> Iterator[Tuple[str, str]]:
|
||||
name = sanitize(database.database_name)
|
||||
file_name = f"databases/{name}.yaml"
|
||||
database_slug = sanitize(database.database_name)
|
||||
file_name = f"databases/{database_slug}.yaml"
|
||||
|
||||
payload = database.export_to_dict(
|
||||
recursive=False,
|
||||
@@ -52,18 +55,16 @@ class ExportDatabasesCommand(BaseCommand):
|
||||
try:
|
||||
payload["extra"] = json.loads(payload["extra"])
|
||||
except json.decoder.JSONDecodeError:
|
||||
pass
|
||||
logger.info("Unable to decode `extra` field: %s", payload["extra"])
|
||||
|
||||
payload["version"] = IMPORT_EXPORT_VERSION
|
||||
|
||||
file_content = yaml.safe_dump(payload, sort_keys=False)
|
||||
yield file_name, file_content
|
||||
|
||||
# TODO (betodealmeida): reuse logic from ExportDatasetCommand once
|
||||
# it's implemented
|
||||
for dataset in database.tables:
|
||||
name = sanitize(dataset.table_name)
|
||||
file_name = f"datasets/{name}.yaml"
|
||||
dataset_slug = sanitize(dataset.table_name)
|
||||
file_name = f"datasets/{database_slug}/{dataset_slug}.yaml"
|
||||
|
||||
payload = dataset.export_to_dict(
|
||||
recursive=True,
|
||||
|
||||
Reference in New Issue
Block a user