text: # -*- 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.')
  