77 lines
2.5 KiB
Ruby
77 lines
2.5 KiB
Ruby
|
module Carto
|
||
|
module DataImportExporterConfiguration
|
||
|
EXPORTED_DATA_IMPORT_ATTRIBUTES = [
|
||
|
:data_source, :data_type, :table_name, :state, :success, :updated_at, :created_at, :error_code, :queue_id,
|
||
|
:tables_created_count, :table_names, :append, :migrate_table, :table_copy, :from_query, :id, :service_name,
|
||
|
:service_item_id, :stats, :type_guessing, :quoted_fields_guessing, :content_guessing, :host, :collision_strategy,
|
||
|
:upload_host, :resque_ppid, :create_visualization, :visualization_id, :user_defined_limits, :import_extra_options,
|
||
|
:original_url, :privacy, :cartodbfy_time, :http_response_code, :rejected_layers, :runner_warnings, :server
|
||
|
].freeze
|
||
|
|
||
|
MAX_LOG_SIZE = 8192
|
||
|
end
|
||
|
|
||
|
module DataImportImporter
|
||
|
include DataImportExporterConfiguration
|
||
|
|
||
|
private
|
||
|
|
||
|
def build_data_import_from_hash(exported_data_import)
|
||
|
return nil unless exported_data_import
|
||
|
|
||
|
di = DataImport.new(exported_data_import.slice(*EXPORTED_DATA_IMPORT_ATTRIBUTES).except(:id))
|
||
|
|
||
|
di.log = build_log_from_hash(exported_data_import[:log])
|
||
|
di.external_data_imports = exported_data_import[:external_data_imports].map do |edi|
|
||
|
build_external_data_import_from_hash(edi)
|
||
|
end
|
||
|
|
||
|
di.id = exported_data_import[:id]
|
||
|
di
|
||
|
end
|
||
|
|
||
|
def build_external_data_import_from_hash(exported_external_data_import)
|
||
|
Carto::ExternalDataImport.new(external_source_id: exported_external_data_import[:external_source_id])
|
||
|
end
|
||
|
|
||
|
def build_log_from_hash(exported_log)
|
||
|
return nil unless exported_log
|
||
|
|
||
|
Carto::Log.new(type: exported_log[:type], entries: exported_log[:entries])
|
||
|
end
|
||
|
end
|
||
|
|
||
|
module DataImportExporter
|
||
|
include DataImportExporterConfiguration
|
||
|
|
||
|
private
|
||
|
|
||
|
def export_data_import(data_import)
|
||
|
return nil unless data_import
|
||
|
|
||
|
data_import_hash = EXPORTED_DATA_IMPORT_ATTRIBUTES.map { |att| [att, data_import.attributes[att.to_s]] }.to_h
|
||
|
data_import_hash[:log] = export_log(data_import.log)
|
||
|
data_import_hash[:external_data_imports] = data_import.external_data_imports.map do |edi|
|
||
|
export_external_data_import(edi)
|
||
|
end
|
||
|
|
||
|
data_import_hash
|
||
|
end
|
||
|
|
||
|
def export_external_data_import(external_data_import)
|
||
|
{
|
||
|
external_source_id: external_data_import.external_source_id
|
||
|
}
|
||
|
end
|
||
|
|
||
|
def export_log(log)
|
||
|
return nil unless log
|
||
|
|
||
|
{
|
||
|
type: log.type,
|
||
|
entries: log.entries && log.entries.length > MAX_LOG_SIZE ? log.entries.slice(-MAX_LOG_SIZE..-1) : log.entries
|
||
|
}
|
||
|
end
|
||
|
end
|
||
|
end
|