mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-09-09 22:55:34 +08:00
Experiment exporting works
This commit is contained in:
parent
0184c97c61
commit
5b496a85d3
4 changed files with 44 additions and 10 deletions
|
@ -1,18 +1,40 @@
|
|||
require 'fileutils'
|
||||
# frozen_string_literal: true
|
||||
|
||||
module ModelExporters
|
||||
class ExperimentExporter
|
||||
def initialize(experiment)
|
||||
@experiment = experiment
|
||||
class ExperimentExporter < ModelExporter
|
||||
def initialize(experiment_id)
|
||||
@experiment = Experiment.find_by_id(experiment_id)
|
||||
raise StandardError, 'Can not load experiment' unless @experiment
|
||||
|
||||
@assets_to_copy = []
|
||||
end
|
||||
|
||||
def experiment()
|
||||
def export_to_dir
|
||||
@asset_counter = 0
|
||||
@experiment.transaction(isolation: :serializable) do
|
||||
@dir_to_export = FileUtils.mkdir_p(
|
||||
File.join("tmp/experiment_#{@experiment.id}" \
|
||||
"_export_#{Time.now.to_i}")
|
||||
).first
|
||||
|
||||
# Writing JSON file with experiment structure
|
||||
File.write(
|
||||
File.join(@dir_to_export, 'experiment_export.json'),
|
||||
experiment.to_json
|
||||
)
|
||||
# Copying assets
|
||||
copy_files(@assets_to_copy, :file, File.join(@dir_to_export, 'assets')) do
|
||||
@asset_counter += 1
|
||||
end
|
||||
puts "Exported assets: #{@asset_counter}"
|
||||
puts 'Done!'
|
||||
end
|
||||
end
|
||||
|
||||
def experiment
|
||||
return {
|
||||
experiment: @experiment,
|
||||
my_modules: @experiment.my_modules.map { |m| my_module(m) },
|
||||
my_modules: @experiment.my_modules.map { |m| my_module(m) },
|
||||
my_module_groups: @experiment.my_module_groups
|
||||
}, @assets_to_copy
|
||||
end
|
||||
|
@ -60,6 +82,7 @@ module ModelExporters
|
|||
|
||||
def table(table)
|
||||
return {} if table.nil?
|
||||
|
||||
table_json = table.as_json(except: %i(contents data_vector))
|
||||
table_json['contents'] = Base64.encode64(table.contents)
|
||||
table_json['data_vector'] = Base64.encode64(table.data_vector)
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require 'fileutils'
|
||||
|
||||
module ModelExporters
|
||||
class ModelExporter
|
||||
def copy_files(assets, attachment_name, dir_name)
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require 'fileutils'
|
||||
|
||||
module ModelExporters
|
||||
class TeamExporter < ModelExporter
|
||||
def initialize(team_id)
|
||||
|
@ -93,7 +91,7 @@ module ModelExporters
|
|||
|
||||
def project(project)
|
||||
experiments = project.experiments.map do |e|
|
||||
experiment, assets = ExperimentExporter.new(e).experiment
|
||||
experiment, assets = ExperimentExporter.new(e.id).experiment
|
||||
@assets_to_copy << assets
|
||||
experiment
|
||||
end
|
||||
|
|
|
@ -86,7 +86,7 @@ namespace :data do
|
|||
"Exporting team with ID:#{args[:team_id]} to directory in tmp"
|
||||
)
|
||||
te = ModelExporters::TeamExporter.new(args[:team_id])
|
||||
te.export_to_dir if te
|
||||
te&.export_to_dir
|
||||
end
|
||||
|
||||
desc 'Import team from directory'
|
||||
|
@ -104,6 +104,17 @@ namespace :data do
|
|||
)
|
||||
team = Team.find_by_id(args[:team_id])
|
||||
raise StandardError, 'Can not load team' unless team
|
||||
|
||||
UserDataDeletion.delete_team_data(team) if team
|
||||
end
|
||||
|
||||
desc 'Export experiment to directory'
|
||||
task :experiment_export, [:experiment_id] => [:environment] do |_, args|
|
||||
Rails.logger.info(
|
||||
"Exporting experiment with ID:#{args[:experiment_id]} to directory in tmp"
|
||||
)
|
||||
ee = ModelExporters::ExperimentExporter.new(args[:experiment_id])
|
||||
ee&.export_to_dir
|
||||
end
|
||||
|
||||
end
|
||||
|
|
Loading…
Add table
Reference in a new issue