You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

77 lines
2.5 KiB

4 years ago
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