miga-base 0.2.0.9 → 0.2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Rakefile +3 -0
- data/actions/add_result.rb +37 -0
- data/actions/add_taxonomy.rb +63 -0
- data/actions/create_dataset.rb +49 -0
- data/actions/create_project.rb +46 -0
- data/actions/daemon.rb +50 -0
- data/actions/date.rb +14 -0
- data/actions/{download_dataset → download_dataset.rb} +5 -28
- data/actions/find_datasets.rb +41 -0
- data/actions/import_datasets.rb +47 -0
- data/actions/index_taxonomy.rb +46 -0
- data/actions/list_datasets.rb +50 -0
- data/actions/list_files.rb +43 -0
- data/actions/project_info.rb +40 -0
- data/actions/unlink_dataset.rb +28 -0
- data/bin/miga +129 -33
- data/lib/miga/daemon.rb +48 -34
- data/lib/miga/dataset.rb +7 -123
- data/lib/miga/dataset_result.rb +177 -0
- data/lib/miga/project.rb +32 -12
- data/lib/miga/version.rb +2 -2
- data/scripts/_distances_functions.bash +82 -0
- data/scripts/_distances_noref_nomulti.bash +96 -67
- data/scripts/_distances_ref_nomulti.bash +54 -85
- data/scripts/assembly.bash +16 -3
- data/scripts/clade_finding.bash +20 -18
- data/scripts/distances.bash +2 -1
- data/scripts/init.bash +2 -6
- data/scripts/subclades.bash +4 -5
- data/test/common_test.rb +2 -2
- data/test/daemon_test.rb +73 -1
- data/test/project_test.rb +26 -2
- data/test/taxonomy_test.rb +10 -0
- data/test/test_helper.rb +1 -1
- data/utils/subclades-compile.rb +4 -2
- data/utils/subclades.R +140 -158
- metadata +48 -44
- data/actions/add_result +0 -58
- data/actions/add_taxonomy +0 -83
- data/actions/create_dataset +0 -61
- data/actions/create_project +0 -67
- data/actions/daemon +0 -66
- data/actions/find_datasets +0 -61
- data/actions/import_datasets +0 -83
- data/actions/index_taxonomy +0 -68
- data/actions/list_datasets +0 -81
- data/actions/list_files +0 -63
- data/actions/unlink_dataset +0 -49
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f914d4f05c7c1cb97b6036fa1af3bb5c6e95c341
|
4
|
+
data.tar.gz: 3812c256d78cbe8125ee5aa14a1785c3de57918f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cdc6692724bb6b7c39a313c35eaabe51405d104d8af465618983a83601435af66ca1f7eca0a3e9fbc19b24ce13cbde8f9962beaf643ad1f9e3970bb10067f671
|
7
|
+
data.tar.gz: 45e19af2b3e14e225c9f6a89193b0c400fe8ac685296314b4320885a563ab2b3c4472563a45f98c5a7d15edd74573cf1f9176a59905a2764a809d6bc3850b90d
|
data/Rakefile
CHANGED
@@ -0,0 +1,37 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# @package MiGA
|
4
|
+
# @license Artistic-2.0
|
5
|
+
|
6
|
+
o = {q:true}
|
7
|
+
opts = OptionParser.new do |opt|
|
8
|
+
opt_banner(opt)
|
9
|
+
opt_object(opt, o, [:project, :dataset_opt])
|
10
|
+
opt.on("-r", "--result STRING",
|
11
|
+
"(Mandatory) Name of the result to add.",
|
12
|
+
"Recognized names for dataset-specific results include:",
|
13
|
+
*MiGA::Dataset.RESULT_DIRS.keys.map{|n| " ~ #{n}"},
|
14
|
+
"Recognized names for project-wide results include:",
|
15
|
+
*MiGA::Project.RESULT_DIRS.keys.map{|n| " ~ #{n}"}){ |v| o[:name]=v }
|
16
|
+
opt_common(opt, o)
|
17
|
+
end.parse!
|
18
|
+
|
19
|
+
##=> Main <=
|
20
|
+
opts.parse!
|
21
|
+
opt_require(o, project:"-P", name:"-r")
|
22
|
+
|
23
|
+
$stderr.puts "Loading project." unless o[:q]
|
24
|
+
p = MiGA::Project.load(o[:project])
|
25
|
+
raise "Impossible to load project: #{o[:project]}" if p.nil?
|
26
|
+
|
27
|
+
$stderr.puts "Registering result." unless o[:q]
|
28
|
+
if o[:dataset].nil?
|
29
|
+
r = p.add_result o[:name].to_sym
|
30
|
+
else
|
31
|
+
d = p.dataset(o[:dataset])
|
32
|
+
r = d.add_result o[:name].to_sym
|
33
|
+
end
|
34
|
+
|
35
|
+
raise "Cannot add result, incomplete expected files." if r.nil?
|
36
|
+
|
37
|
+
$stderr.puts "Done." unless o[:q]
|
@@ -0,0 +1,63 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# @package MiGA
|
4
|
+
# @license Artistic-2.0
|
5
|
+
|
6
|
+
o = {q:true}
|
7
|
+
OptionParser.new do |opt|
|
8
|
+
opt_banner(opt)
|
9
|
+
opt_object(opt, o, [:project, :dataset_opt])
|
10
|
+
opt.on("-s", "--tax-string STRING",
|
11
|
+
"String corresponding to the taxonomy of the dataset.",
|
12
|
+
"The MiGA format of string taxonomy is a space-delimited",
|
13
|
+
"set of 'rank:name' pairs."){ |v| o[:taxstring]=v }
|
14
|
+
opt.on("-t", "--tax-file PATH",
|
15
|
+
"(Mandatory unless -D and -s are provided) Tab-delimited file containing",
|
16
|
+
"datasets taxonomy. Each row corresponds to a datasets and each column",
|
17
|
+
"corresponds to a rank. The first row must be a header with the rank ",
|
18
|
+
"names, and the first column must contain dataset names."
|
19
|
+
){ |v| o[:taxfile]=v }
|
20
|
+
opt_common(opt, o)
|
21
|
+
end.parse!
|
22
|
+
|
23
|
+
##=> Main <=
|
24
|
+
opt_require(o, project:"-P")
|
25
|
+
raise "-D is mandatory unless -t is provided." if
|
26
|
+
o[:dataset].nil? and o[:taxfile].nil?
|
27
|
+
raise "-s is mandatory unless -t is provided." if
|
28
|
+
o[:taxstring].nil? and o[:taxfile].nil?
|
29
|
+
|
30
|
+
$stderr.puts "Loading project." unless o[:q]
|
31
|
+
p = MiGA::Project.load(o[:project])
|
32
|
+
raise "Impossible to load project: #{o[:project]}" if p.nil?
|
33
|
+
|
34
|
+
if not o[:taxfile].nil?
|
35
|
+
$stderr.puts "Reading tax-file and registering taxonomy." unless o[:q]
|
36
|
+
tfh = File.open(o[:taxfile], "r")
|
37
|
+
header = nil
|
38
|
+
tfh.each_line do |ln|
|
39
|
+
next if ln =~ /^\s*?$/
|
40
|
+
r = ln.chomp.split(/\t/, -1)
|
41
|
+
dn = r.shift
|
42
|
+
if header.nil?
|
43
|
+
header = r
|
44
|
+
next
|
45
|
+
end
|
46
|
+
d = p.dataset dn
|
47
|
+
if d.nil?
|
48
|
+
warn "Impossible to find dataset at line #{$.}: #{dn}. Ignoring..."
|
49
|
+
next
|
50
|
+
end
|
51
|
+
d.metadata[:tax] = MiGA::Taxonomy.new(r, header)
|
52
|
+
d.save
|
53
|
+
$stderr.puts " #{d.name} registered." unless o[:q]
|
54
|
+
end
|
55
|
+
tfh.close
|
56
|
+
else
|
57
|
+
$stderr.puts "Registering taxonomy." unless o[:q]
|
58
|
+
d = p.dataset o[:dataset]
|
59
|
+
d.metadata[:tax] = MiGA::Taxonomy.new(o[:taxstring])
|
60
|
+
d.save
|
61
|
+
end
|
62
|
+
|
63
|
+
$stderr.puts "Done." unless o[:q]
|
@@ -0,0 +1,49 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# @package MiGA
|
4
|
+
# @license Artistic-2.0
|
5
|
+
|
6
|
+
o = {q:true, ref:true, update:false}
|
7
|
+
OptionParser.new do |opt|
|
8
|
+
opt_banner(opt)
|
9
|
+
opt_object(opt, o, [:project, :dataset, :dataset_type])
|
10
|
+
opt.on("-q", "--query",
|
11
|
+
"If set, the dataset is registered as a query, not a reference dataset."
|
12
|
+
){ |v| o[:ref]=!v }
|
13
|
+
opt.on("-d", "--description STRING",
|
14
|
+
"Description of the dataset."){ |v| o[:description]=v }
|
15
|
+
opt.on("-u", "--user STRING",
|
16
|
+
"Owner of the dataset."){ |v| o[:user]=v }
|
17
|
+
opt.on("-c", "--comments STRING",
|
18
|
+
"Comments on the dataset."){ |v| o[:comments]=v }
|
19
|
+
opt.on("--update",
|
20
|
+
"Updates the dataset if it already exists."){ o[:update]=true }
|
21
|
+
opt_common(opt, o)
|
22
|
+
end.parse!
|
23
|
+
|
24
|
+
##=> Main <=
|
25
|
+
opt_require(o)
|
26
|
+
|
27
|
+
$stderr.puts "Loading project." unless o[:q]
|
28
|
+
p = MiGA::Project.load(o[:project])
|
29
|
+
raise "Impossible to load project: #{o[:project]}" if p.nil?
|
30
|
+
|
31
|
+
raise "Dataset already exists, aborting." unless
|
32
|
+
o[:update] or not MiGA::Dataset.exist?(p, o[:dataset])
|
33
|
+
$stderr.puts "Loading dataset." unless o[:q]
|
34
|
+
d = o[:update] ? p.dataset(o[:dataset]) :
|
35
|
+
MiGA::Dataset.new(p, o[:dataset], o[:ref], {})
|
36
|
+
raise "Dataset does not exist." if d.nil?
|
37
|
+
[:type, :description, :user, :comments].each do |k|
|
38
|
+
d.metadata[k]=o[k] unless o[k].nil?
|
39
|
+
end
|
40
|
+
|
41
|
+
if o[:update]
|
42
|
+
d.save
|
43
|
+
else
|
44
|
+
p.add_dataset(o[:dataset])
|
45
|
+
end
|
46
|
+
res = d.first_preprocessing(true)
|
47
|
+
$stderr.puts "- #{res}" unless o[:q]
|
48
|
+
|
49
|
+
$stderr.puts "Done." unless o[:q]
|
@@ -0,0 +1,46 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# @package MiGA
|
4
|
+
# @license Artistic-2.0
|
5
|
+
|
6
|
+
o = {q:true, update:false}
|
7
|
+
OptionParser.new do |opt|
|
8
|
+
opt_banner(opt)
|
9
|
+
opt_object(opt, o, [:project, :project_type])
|
10
|
+
opt.on("-n", "--name STRING",
|
11
|
+
"Name of the project."){ |v| o[:name]=v }
|
12
|
+
opt.on("-d", "--description STRING",
|
13
|
+
"Description of the project."){ |v| o[:description]=v }
|
14
|
+
opt.on("-u", "--user STRING", "Owner of the project."){ |v| o[:user]=v }
|
15
|
+
opt.on("-c", "--comments STRING",
|
16
|
+
"Comments on the project."){ |v| o[:comments]=v }
|
17
|
+
opt.on("--update",
|
18
|
+
"Updates the project if it already exists."){ o[:update]=true }
|
19
|
+
opt_common(opt, o)
|
20
|
+
end.parse!
|
21
|
+
|
22
|
+
##=> Main <=
|
23
|
+
opt_require(o, project:"-P")
|
24
|
+
|
25
|
+
unless File.exist? "#{ENV["HOME"]}/.miga_rc" and
|
26
|
+
File.exist? "#{ENV["HOME"]}/.miga_daemon.json"
|
27
|
+
puts "You must initialize MiGA before creating the first project.\n" +
|
28
|
+
"Do you want to initialize MiGA now? (yes / no)"
|
29
|
+
`'#{File.dirname(__FILE__)}/../scripts/init.bash'` if
|
30
|
+
$stdin.gets.chomp == 'yes'
|
31
|
+
end
|
32
|
+
|
33
|
+
$stderr.puts "Creating project." unless o[:q]
|
34
|
+
raise "Project already exists, aborting." unless
|
35
|
+
o[:update] or not MiGA::Project.exist? o[:project]
|
36
|
+
p = MiGA::Project.new(o[:project], o[:update])
|
37
|
+
# The following check is redundant with MiGA::Project#create,
|
38
|
+
# but allows upgrading projects from (very) early code versions
|
39
|
+
o[:name] = File.basename(p.path) if
|
40
|
+
o[:update] and o[:name].nil?
|
41
|
+
[:name, :description, :user, :comments, :type].each do |k|
|
42
|
+
p.metadata[k] = o[k] unless o[k].nil?
|
43
|
+
end
|
44
|
+
p.save
|
45
|
+
|
46
|
+
$stderr.puts "Done." unless o[:q]
|
data/actions/daemon.rb
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# @package MiGA
|
4
|
+
# @license Artistic-2.0
|
5
|
+
|
6
|
+
require "miga/daemon"
|
7
|
+
|
8
|
+
task = ARGV.shift unless ["-h","--help"].include? ARGV.first
|
9
|
+
ARGV << "-h" if ARGV.empty?
|
10
|
+
o = {q:true, daemon_opts:[]}
|
11
|
+
OptionParser.new do |opt|
|
12
|
+
opt_banner(opt)
|
13
|
+
opt.separator "task:"
|
14
|
+
{ start: "Start an instance of the application.",
|
15
|
+
stop: "Start an instance of the application.",
|
16
|
+
restart: "Stop all instances and restart them afterwards.",
|
17
|
+
reload: "Send a SIGHUP to all instances of the application.",
|
18
|
+
run: "Start the application and stay on top.",
|
19
|
+
zap: "Set the application to a stopped state.",
|
20
|
+
status: "Show status (PID) of application instances."
|
21
|
+
}.each{ |k,v| opt.separator sprintf " %*s%s", -33, k, v }
|
22
|
+
opt.separator ""
|
23
|
+
opt.separator "MiGA options:"
|
24
|
+
opt_object(opt, o, [:project])
|
25
|
+
opt.on("--latency INT",
|
26
|
+
"Number of seconds the daemon will be sleeping."
|
27
|
+
){ |v| o[:latency]=v.to_i }
|
28
|
+
opt.on("--max-jobs INT",
|
29
|
+
"Maximum number of jobs to use simultaneously."){ |v| o[:maxjobs]=v.to_i }
|
30
|
+
opt.on("--ppn INT",
|
31
|
+
"Maximum number of cores to use in a single job."){ |v| o[:ppn]=v.to_i }
|
32
|
+
opt_common(opt, o)
|
33
|
+
opt.separator "Daemon options:"
|
34
|
+
opt.on("-t", "--ontop",
|
35
|
+
"Stay on top (does not daemonize)"){ o[:daemon_opts] << '-t' }
|
36
|
+
opt.on("-f", "--force", "Force operation"){ o[:daemon_opts] << '-f' }
|
37
|
+
opt.on("-n", "--no_wait",
|
38
|
+
"Do not wait for processes to stop"){ o[:daemon_opts] << '-n' }
|
39
|
+
end.parse!
|
40
|
+
|
41
|
+
##=> Main <=
|
42
|
+
opt_require(o, project:"-P")
|
43
|
+
|
44
|
+
raise "Project doesn't exist, aborting." unless MiGA::Project.exist? o[:project]
|
45
|
+
p = MiGA::Project.new(o[:project])
|
46
|
+
d = MiGA::Daemon.new(p)
|
47
|
+
[:latency, :maxjobs, :ppn].each do |k|
|
48
|
+
d.runopts(k, o[k]) unless o[k].nil?
|
49
|
+
end
|
50
|
+
d.daemon(task, o[:daemon_opts])
|
data/actions/date.rb
ADDED
@@ -7,16 +7,8 @@ require "miga/remote_dataset"
|
|
7
7
|
|
8
8
|
o = {q:true, query:false, universe: :ebi, db: :embl}
|
9
9
|
OptionParser.new do |opt|
|
10
|
-
opt
|
11
|
-
|
12
|
-
|
13
|
-
Usage: #{$0} #{File.basename(__FILE__)} [options]
|
14
|
-
BAN
|
15
|
-
opt.separator ""
|
16
|
-
opt.on("-P", "--project PATH",
|
17
|
-
"(Mandatory) Path to the project to use."){ |v| o[:project]=v }
|
18
|
-
opt.on("-D", "--dataset STRING",
|
19
|
-
"(Mandatory unless -F) ID of the dataset to create."){ |v| o[:dataset]=v }
|
10
|
+
opt_banner(opt)
|
11
|
+
opt_object(opt, o, [:project, :dataset, :dataset_type])
|
20
12
|
opt.on("-I", "--ids ID1,ID2,...",
|
21
13
|
"(Mandatory unless -F) IDs in the remote database separated by commas."
|
22
14
|
){ |v| o[:ids]=v }
|
@@ -31,10 +23,6 @@ BAN
|
|
31
23
|
"The long form of all the options are supported as header (without the --)",
|
32
24
|
"including dataset, ids, universe, and db. For query use true/false values."
|
33
25
|
){ |v| o[:file] = v }
|
34
|
-
opt.on("-t", "--type STRING",
|
35
|
-
"Type of dataset. Recognized types include:",
|
36
|
-
*MiGA::Dataset.KNOWN_TYPES.map{ |k,v| "~ #{k}: #{v[:description]}" }
|
37
|
-
){ |v| o[:type]=v.to_sym }
|
38
26
|
opt.on("-q", "--query",
|
39
27
|
"If set, the dataset is registered as a query, not a reference dataset."
|
40
28
|
){ |v| o[:query]=v }
|
@@ -46,20 +34,11 @@ BAN
|
|
46
34
|
"Owner of the dataset."){ |v| o[:user]=v }
|
47
35
|
opt.on("-c", "--comments STRING",
|
48
36
|
"Comments on the dataset."){ |v| o[:comments]=v }
|
49
|
-
opt
|
50
|
-
"Print additional information to STDERR."){ o[:q]=false }
|
51
|
-
opt.on("-d", "--debug INT", "Print debugging information to STDERR.") do |v|
|
52
|
-
v.to_i>1 ? MiGA::MiGA.DEBUG_TRACE_ON : MiGA::MiGA.DEBUG_ON
|
53
|
-
end
|
54
|
-
opt.on("-h", "--help", "Display this screen.") do
|
55
|
-
puts opt
|
56
|
-
exit
|
57
|
-
end
|
58
|
-
opt.separator ""
|
37
|
+
opt_common(opt, o)
|
59
38
|
end.parse!
|
60
39
|
|
61
40
|
|
62
|
-
|
41
|
+
##=> Main <=
|
63
42
|
glob = [o]
|
64
43
|
unless o[:file].nil?
|
65
44
|
glob = []
|
@@ -81,9 +60,7 @@ unless o[:file].nil?
|
|
81
60
|
end
|
82
61
|
|
83
62
|
glob.each do |o_i|
|
84
|
-
|
85
|
-
raise "-D is mandatory." if o_i[:dataset].nil?
|
86
|
-
raise "-I is mandatory." if o_i[:ids].nil?
|
63
|
+
opt_require(o_i, project:"-P", dataset:"-D", ids:"-I")
|
87
64
|
|
88
65
|
$stderr.puts "Dataset: #{o_i[:dataset]}" unless o_i[:q]
|
89
66
|
$stderr.puts "Loading project." unless o_i[:q]
|
@@ -0,0 +1,41 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# @package MiGA
|
4
|
+
# @license Artistic-2.0
|
5
|
+
|
6
|
+
o = {q:true, add:false, ref:true}
|
7
|
+
OptionParser.new do |opt|
|
8
|
+
opt_banner(opt)
|
9
|
+
opt_object(opt, o, [:project, :dataset_type])
|
10
|
+
opt.on("-a", "--add",
|
11
|
+
"Register the datasets found. By default, only lists them (dry run)."
|
12
|
+
){ |v| o[:add]=v }
|
13
|
+
opt.on("-q", "--query",
|
14
|
+
"If set, all datasets are registered as query datasets."
|
15
|
+
){ |v| o[:ref]=!v }
|
16
|
+
opt.on("-u", "--user STRING", "Owner of the dataset."){ |v| o[:user]=v }
|
17
|
+
opt_common(opt, o)
|
18
|
+
end.parse!
|
19
|
+
|
20
|
+
##=> Main <=
|
21
|
+
opt_require(o, project:"-P")
|
22
|
+
|
23
|
+
$stderr.puts "Loading project." unless o[:q]
|
24
|
+
p = MiGA::Project.load(o[:project])
|
25
|
+
raise "Impossible to load project: #{o[:project]}" if p.nil?
|
26
|
+
|
27
|
+
$stderr.puts "Finding datasets." unless o[:q]
|
28
|
+
ud = p.unregistered_datasets
|
29
|
+
ud.each do |dn|
|
30
|
+
puts dn
|
31
|
+
if o[:add]
|
32
|
+
md = {}
|
33
|
+
[:type, :user].each{ |k| md[k]=o[k] unless o[k].nil? }
|
34
|
+
d = MiGA::Dataset.new(p, dn, o[:ref], md)
|
35
|
+
p.add_dataset(dn)
|
36
|
+
res = d.first_preprocessing(true)
|
37
|
+
puts "- #{res}" unless o[:q]
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
$stderr.puts "Done." unless o[:q]
|
@@ -0,0 +1,47 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# @package MiGA
|
4
|
+
# @license Artistic-2.0
|
5
|
+
|
6
|
+
o = {q:true, info:false, force:false, method: :hardlink }
|
7
|
+
OptionParser.new do |opt|
|
8
|
+
opt_banner(opt)
|
9
|
+
opt_object(opt, o, [:project, :dataset_opt])
|
10
|
+
opt.on("-Q", "--project-target PATH",
|
11
|
+
"(Mandatory) Path to the project where to link the dataset."
|
12
|
+
){ |v| o[:project2]=v }
|
13
|
+
opt.on("-f", "--force",
|
14
|
+
"Forces linking, even if dataset's preprocessing is incomplete."
|
15
|
+
){ |v| o[:force]=v }
|
16
|
+
opt.on("-s", "--symlink",
|
17
|
+
"Creates symlinks instead of the default hard links."
|
18
|
+
){ o[:method] = :symlink }
|
19
|
+
opt.on("-c", "--copy",
|
20
|
+
"Creates copies instead of the default hard links."){ o[:method] = :copy }
|
21
|
+
opt_filter_datasets(opt, o)
|
22
|
+
opt_common(opt, o)
|
23
|
+
end.parse!
|
24
|
+
|
25
|
+
##=> Main <=
|
26
|
+
opt_require(o, project:"-P", project2:"-Q")
|
27
|
+
|
28
|
+
$stderr.puts "Loading project." unless o[:q]
|
29
|
+
p = MiGA::Project.load(o[:project])
|
30
|
+
raise "Impossible to load project: #{o[:project]}" if p.nil?
|
31
|
+
q = MiGA::Project.load(o[:project2])
|
32
|
+
raise "Impossible to load project: #{o[:project2]}" if q.nil?
|
33
|
+
|
34
|
+
$stderr.puts "Listing dataset." unless o[:q]
|
35
|
+
if o[:dataset].nil?
|
36
|
+
ds = p.datasets
|
37
|
+
else
|
38
|
+
ds = [p.dataset(o[:dataset])]
|
39
|
+
end
|
40
|
+
ds = filter_datasets!(ds, o)
|
41
|
+
ds.each do |d|
|
42
|
+
next unless o[:force] or d.done_preprocessing?
|
43
|
+
puts d.name
|
44
|
+
q.import_dataset(d, o[:method])
|
45
|
+
end
|
46
|
+
|
47
|
+
$stderr.puts "Done." unless o[:q]
|