mirror of
https://github.com/apache/superset.git
synced 2024-09-17 19:19:38 -04:00
73 lines
2.5 KiB
Python
73 lines
2.5 KiB
Python
# -*- coding: utf-8 -*-
|
|
# pylint: disable=C,R,W
|
|
from __future__ import absolute_import
|
|
from __future__ import division
|
|
from __future__ import print_function
|
|
from __future__ import unicode_literals
|
|
|
|
import logging
|
|
|
|
from superset.connectors.druid.models import DruidCluster
|
|
from superset.models.core import Database
|
|
|
|
|
|
DATABASES_KEY = 'databases'
|
|
DRUID_CLUSTERS_KEY = 'druid_clusters'
|
|
|
|
|
|
def export_schema_to_dict(back_references):
|
|
"""Exports the supported import/export schema to a dictionary"""
|
|
databases = [Database.export_schema(recursive=True,
|
|
include_parent_ref=back_references)]
|
|
clusters = [DruidCluster.export_schema(recursive=True,
|
|
include_parent_ref=back_references)]
|
|
data = dict()
|
|
if databases:
|
|
data[DATABASES_KEY] = databases
|
|
if clusters:
|
|
data[DRUID_CLUSTERS_KEY] = clusters
|
|
return data
|
|
|
|
|
|
def export_to_dict(session,
|
|
recursive,
|
|
back_references,
|
|
include_defaults):
|
|
"""Exports databases and druid clusters to a dictionary"""
|
|
logging.info('Starting export')
|
|
dbs = session.query(Database)
|
|
databases = [database.export_to_dict(recursive=recursive,
|
|
include_parent_ref=back_references,
|
|
include_defaults=include_defaults) for database in dbs]
|
|
logging.info('Exported %d %s', len(databases), DATABASES_KEY)
|
|
cls = session.query(DruidCluster)
|
|
clusters = [cluster.export_to_dict(recursive=recursive,
|
|
include_parent_ref=back_references,
|
|
include_defaults=include_defaults) for cluster in cls]
|
|
logging.info('Exported %d %s', len(clusters), DRUID_CLUSTERS_KEY)
|
|
data = dict()
|
|
if databases:
|
|
data[DATABASES_KEY] = databases
|
|
if clusters:
|
|
data[DRUID_CLUSTERS_KEY] = clusters
|
|
return data
|
|
|
|
|
|
def import_from_dict(session, data, sync=[]):
|
|
"""Imports databases and druid clusters from dictionary"""
|
|
if isinstance(data, dict):
|
|
logging.info('Importing %d %s',
|
|
len(data.get(DATABASES_KEY, [])),
|
|
DATABASES_KEY)
|
|
for database in data.get(DATABASES_KEY, []):
|
|
Database.import_from_dict(session, database, sync=sync)
|
|
|
|
logging.info('Importing %d %s',
|
|
len(data.get(DRUID_CLUSTERS_KEY, [])),
|
|
DRUID_CLUSTERS_KEY)
|
|
for datasource in data.get(DRUID_CLUSTERS_KEY, []):
|
|
DruidCluster.import_from_dict(session, datasource, sync=sync)
|
|
session.commit()
|
|
else:
|
|
logging.info('Supplied object is not a dictionary.')
|