12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- # pylint: disable=C,R,W
- 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.')
|