miga-base 0.7.4.0 → 0.7.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/miga/cli.rb +10 -8
- data/lib/miga/cli/action.rb +2 -3
- data/lib/miga/cli/action/about.rb +5 -6
- data/lib/miga/cli/action/add.rb +18 -12
- data/lib/miga/cli/action/add_result.rb +2 -3
- data/lib/miga/cli/action/archive.rb +1 -2
- data/lib/miga/cli/action/classify_wf.rb +8 -6
- data/lib/miga/cli/action/console.rb +0 -1
- data/lib/miga/cli/action/daemon.rb +7 -7
- data/lib/miga/cli/action/date.rb +0 -1
- data/lib/miga/cli/action/derep_wf.rb +5 -4
- data/lib/miga/cli/action/doctor.rb +28 -20
- data/lib/miga/cli/action/doctor/base.rb +29 -6
- data/lib/miga/cli/action/edit.rb +1 -2
- data/lib/miga/cli/action/files.rb +8 -8
- data/lib/miga/cli/action/find.rb +5 -6
- data/lib/miga/cli/action/generic.rb +7 -7
- data/lib/miga/cli/action/get.rb +20 -17
- data/lib/miga/cli/action/get_db.rb +8 -2
- data/lib/miga/cli/action/index_wf.rb +1 -1
- data/lib/miga/cli/action/init.rb +34 -29
- data/lib/miga/cli/action/init/daemon_helper.rb +65 -43
- data/lib/miga/cli/action/lair.rb +7 -7
- data/lib/miga/cli/action/ln.rb +6 -6
- data/lib/miga/cli/action/ls.rb +1 -2
- data/lib/miga/cli/action/ncbi_get.rb +11 -3
- data/lib/miga/cli/action/new.rb +4 -4
- data/lib/miga/cli/action/next_step.rb +0 -1
- data/lib/miga/cli/action/preproc_wf.rb +3 -3
- data/lib/miga/cli/action/quality_wf.rb +1 -1
- data/lib/miga/cli/action/rm.rb +2 -3
- data/lib/miga/cli/action/run.rb +8 -8
- data/lib/miga/cli/action/stats.rb +3 -3
- data/lib/miga/cli/action/summary.rb +7 -6
- data/lib/miga/cli/action/tax_dist.rb +8 -4
- data/lib/miga/cli/action/tax_index.rb +3 -4
- data/lib/miga/cli/action/tax_set.rb +7 -6
- data/lib/miga/cli/action/tax_test.rb +6 -5
- data/lib/miga/cli/action/wf.rb +21 -19
- data/lib/miga/cli/base.rb +34 -32
- data/lib/miga/cli/objects_helper.rb +24 -17
- data/lib/miga/cli/opt_helper.rb +3 -2
- data/lib/miga/common.rb +2 -5
- data/lib/miga/common/base.rb +15 -16
- data/lib/miga/common/format.rb +8 -5
- data/lib/miga/common/hooks.rb +1 -4
- data/lib/miga/common/path.rb +4 -9
- data/lib/miga/common/with_daemon.rb +5 -2
- data/lib/miga/common/with_daemon_class.rb +1 -1
- data/lib/miga/common/with_result.rb +2 -1
- data/lib/miga/daemon.rb +51 -35
- data/lib/miga/daemon/base.rb +0 -2
- data/lib/miga/dataset.rb +47 -37
- data/lib/miga/dataset/base.rb +52 -37
- data/lib/miga/dataset/hooks.rb +3 -4
- data/lib/miga/dataset/result.rb +17 -1
- data/lib/miga/json.rb +5 -7
- data/lib/miga/lair.rb +4 -0
- data/lib/miga/metadata.rb +4 -3
- data/lib/miga/project.rb +29 -20
- data/lib/miga/project/base.rb +52 -37
- data/lib/miga/project/dataset.rb +27 -13
- data/lib/miga/project/hooks.rb +0 -3
- data/lib/miga/project/result.rb +14 -5
- data/lib/miga/remote_dataset.rb +85 -72
- data/lib/miga/remote_dataset/base.rb +11 -13
- data/lib/miga/remote_dataset/download.rb +33 -12
- data/lib/miga/result.rb +34 -25
- data/lib/miga/result/base.rb +0 -2
- data/lib/miga/result/dates.rb +1 -3
- data/lib/miga/result/source.rb +15 -16
- data/lib/miga/result/stats.rb +36 -25
- data/lib/miga/tax_dist.rb +6 -3
- data/lib/miga/tax_index.rb +17 -17
- data/lib/miga/taxonomy.rb +6 -1
- data/lib/miga/taxonomy/base.rb +19 -15
- data/lib/miga/version.rb +19 -16
- data/test/common_test.rb +3 -11
- data/test/daemon_helper.rb +38 -0
- data/test/daemon_test.rb +73 -101
- data/test/dataset_test.rb +58 -59
- data/test/format_test.rb +3 -11
- data/test/hook_test.rb +50 -55
- data/test/json_test.rb +7 -8
- data/test/lair_test.rb +22 -28
- data/test/metadata_test.rb +6 -14
- data/test/project_test.rb +33 -39
- data/test/remote_dataset_test.rb +20 -28
- data/test/result_stats_test.rb +17 -27
- data/test/result_test.rb +41 -34
- data/test/tax_dist_test.rb +0 -2
- data/test/tax_index_test.rb +4 -10
- data/test/taxonomy_test.rb +7 -9
- data/test/test_helper.rb +42 -1
- data/test/with_daemon_test.rb +14 -22
- data/utils/cleanup-databases.rb +6 -5
- data/utils/distance/base.rb +0 -1
- data/utils/distance/commands.rb +19 -12
- data/utils/distance/database.rb +24 -21
- data/utils/distance/pipeline.rb +12 -9
- data/utils/distance/runner.rb +14 -13
- data/utils/distance/temporal.rb +1 -3
- data/utils/distances.rb +1 -1
- data/utils/domain-ess-genes.rb +7 -7
- data/utils/index_metadata.rb +4 -2
- data/utils/mytaxa_scan.rb +18 -16
- data/utils/representatives.rb +5 -4
- data/utils/requirements.txt +1 -1
- data/utils/subclade/base.rb +0 -1
- data/utils/subclade/pipeline.rb +7 -6
- data/utils/subclade/runner.rb +9 -9
- data/utils/subclade/temporal.rb +0 -2
- data/utils/subclades-compile.rb +39 -37
- data/utils/subclades.rb +1 -1
- metadata +3 -2
@@ -1,4 +1,3 @@
|
|
1
|
-
|
2
1
|
require 'miga/cli/action'
|
3
2
|
require 'sqlite3'
|
4
3
|
|
@@ -8,13 +7,34 @@ end
|
|
8
7
|
module MiGA::Cli::Action::Doctor::Base
|
9
8
|
##
|
10
9
|
# Check the database in +db_file+ maintains integrity for the
|
11
|
-
# tables saving +metric+ (:ani or :aai)
|
12
|
-
|
10
|
+
# tables saving +metric+ (:ani or :aai) and call +blk+ if the
|
11
|
+
# file is corrupt or doesn't contain the expected structure
|
12
|
+
def check_sqlite3_database(db_file, metric, &blk)
|
13
13
|
SQLite3::Database.new(db_file) do |conn|
|
14
14
|
conn.execute("select count(*) from #{metric}").first
|
15
15
|
end
|
16
|
-
rescue SQLite3::SQLException
|
17
|
-
|
16
|
+
rescue SQLite3::SQLException, SQLite3::CorruptException
|
17
|
+
blk.call
|
18
|
+
end
|
19
|
+
|
20
|
+
def each_database_file(dataset, &blk)
|
21
|
+
ref_db = { '01.haai' => :aai, '02.aai' => :aai, '03.ani' => :ani }
|
22
|
+
qry_db = { '.haai.db' => :aai, '.aai.db' => :aai, '.ani.db' => :ani }
|
23
|
+
base = File.join(dataset.project.path, 'data', '09.distances')
|
24
|
+
result = :distances
|
25
|
+
if dataset.ref?
|
26
|
+
file_db = "#{dataset.name}.db"
|
27
|
+
ref_db.each do |dir, metric|
|
28
|
+
file = File.join(base, dir, file_db)
|
29
|
+
blk[file, metric, result] if File.exist? file
|
30
|
+
end
|
31
|
+
base = File.join(base, '05.taxonomy')
|
32
|
+
result = :taxonomy
|
33
|
+
end
|
34
|
+
qry_db.each do |ext, metric|
|
35
|
+
file = File.join(base, "#{dataset.name}#{ext}")
|
36
|
+
blk[file, metric, result] if File.exist? file
|
37
|
+
end
|
18
38
|
end
|
19
39
|
|
20
40
|
##
|
@@ -33,8 +53,10 @@ module MiGA::Cli::Action::Doctor::Base
|
|
33
53
|
lineno = 0
|
34
54
|
fh.each_line do |ln|
|
35
55
|
next if (lineno += 1) == 1
|
56
|
+
|
36
57
|
r = ln.split("\t")
|
37
58
|
next unless [1, 2].map { |i| p.dataset(r[i]).nil? }.any?
|
59
|
+
|
38
60
|
[1, 2].each do |i|
|
39
61
|
if p.dataset(r[i]).nil? || !p.dataset(r[i]).active?
|
40
62
|
notok[r[i]] = true
|
@@ -53,6 +75,7 @@ module MiGA::Cli::Action::Doctor::Base
|
|
53
75
|
# This is a subtask of +check_dist+
|
54
76
|
def check_dist_fix(cli, p, fix)
|
55
77
|
return if fix.empty?
|
78
|
+
|
56
79
|
cli.say("- Fixing #{fix.size} datasets")
|
57
80
|
fix.each do |d_n|
|
58
81
|
cli.say " > Fixing #{d_n}."
|
@@ -66,6 +89,7 @@ module MiGA::Cli::Action::Doctor::Base
|
|
66
89
|
# This is a subtask of +check_dist+
|
67
90
|
def check_dist_recompute(cli, res, notok)
|
68
91
|
return if notok.empty?
|
92
|
+
|
69
93
|
cli.say '- Unregistered datasets detected: '
|
70
94
|
if notok.size <= 5
|
71
95
|
notok.each { |i| cli.say " > #{i}" }
|
@@ -76,4 +100,3 @@ module MiGA::Cli::Action::Doctor::Base
|
|
76
100
|
res.remove!
|
77
101
|
end
|
78
102
|
end
|
79
|
-
|
data/lib/miga/cli/action/edit.rb
CHANGED
@@ -4,7 +4,6 @@
|
|
4
4
|
require 'miga/cli/action'
|
5
5
|
|
6
6
|
class MiGA::Cli::Action::Edit < MiGA::Cli::Action
|
7
|
-
|
8
7
|
def parse_cli
|
9
8
|
cli.parse do |opt|
|
10
9
|
cli.opt_object(opt, [:project, :dataset_opt])
|
@@ -28,7 +27,7 @@ class MiGA::Cli::Action::Edit < MiGA::Cli::Action
|
|
28
27
|
obj = cli.load_project_or_dataset
|
29
28
|
unless cli[:activate].nil?
|
30
29
|
cli.ensure_par({ dataset: '-D' },
|
31
|
-
|
30
|
+
'%<name>s is mandatory with --[in-]activate: please provide %<flag>s')
|
32
31
|
cli[:activate] ? obj.activate! : obj.inactivate!
|
33
32
|
end
|
34
33
|
cli.add_metadata(obj)
|
@@ -4,27 +4,27 @@
|
|
4
4
|
require 'miga/cli/action'
|
5
5
|
|
6
6
|
class MiGA::Cli::Action::Files < MiGA::Cli::Action
|
7
|
-
|
8
7
|
def parse_cli
|
9
|
-
cli.defaults = {details: false, json: true}
|
8
|
+
cli.defaults = { details: false, json: true }
|
10
9
|
cli.parse do |opt|
|
11
10
|
cli.opt_object(opt, [:project, :dataset_opt])
|
12
11
|
opt.on(
|
13
12
|
'-i', '--info',
|
14
13
|
'Print additional details for each file'
|
15
|
-
|
16
|
-
opt.on(
|
14
|
+
) { |v| cli[:details] = v }
|
15
|
+
opt.on(
|
16
|
+
'--[no-]json',
|
17
17
|
'Include (or not) JSON files containing results metadata',
|
18
18
|
'JSON files are included by default'
|
19
|
-
|
19
|
+
) { |v| cli[:json] = v }
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
23
|
def perform
|
24
24
|
cli.load_project_or_dataset.each_result do |sym, res|
|
25
|
-
cli.puts "#{
|
26
|
-
res.each_file do |k,f|
|
27
|
-
cli.puts "#{
|
25
|
+
cli.puts "#{"#{sym}\tjson\t" if cli[:details]}#{res.path}" if cli[:json]
|
26
|
+
res.each_file do |k, f|
|
27
|
+
cli.puts "#{"#{sym}\t#{k}\t" if cli[:details]}#{res.dir}/#{f}"
|
28
28
|
end
|
29
29
|
end
|
30
30
|
end
|
data/lib/miga/cli/action/find.rb
CHANGED
@@ -4,29 +4,28 @@
|
|
4
4
|
require 'miga/cli/action'
|
5
5
|
|
6
6
|
class MiGA::Cli::Action::Find < MiGA::Cli::Action
|
7
|
-
|
8
7
|
def parse_cli
|
9
|
-
cli.defaults = {add: false, ref: true}
|
8
|
+
cli.defaults = { add: false, ref: true }
|
10
9
|
cli.parse do |opt|
|
11
10
|
cli.opt_object(opt, [:project, :dataset_type])
|
12
11
|
opt.on(
|
13
12
|
'-a', '--add',
|
14
13
|
'Register the datasets found',
|
15
14
|
'By default, only lists them (dry run)'
|
16
|
-
|
15
|
+
) { |v| cli[:add] = v }
|
17
16
|
opt.on(
|
18
17
|
'-q', '--query',
|
19
18
|
'Register datasets as query'
|
20
|
-
|
19
|
+
) { |v| cli[:ref] = !v }
|
21
20
|
opt.on(
|
22
21
|
'-u', '--user STRING',
|
23
22
|
'Owner of the dataset.'
|
24
|
-
|
23
|
+
) { |v| cli[:user] = v }
|
25
24
|
opt.on(
|
26
25
|
'-m', '--metadata STRING',
|
27
26
|
'Metadata as key-value pairs separated by = and delimited by comma',
|
28
27
|
'Values are saved as strings except for booleans (true / false) or nil'
|
29
|
-
|
28
|
+
) { |v| cli[:metadata] = v }
|
30
29
|
end
|
31
30
|
end
|
32
31
|
|
@@ -4,31 +4,31 @@
|
|
4
4
|
require 'miga/cli/action'
|
5
5
|
|
6
6
|
class MiGA::Cli::Action::Generic < MiGA::Cli::Action
|
7
|
-
|
8
7
|
def parse_cli
|
9
8
|
cli.opt_common = false
|
10
9
|
cli.parse do |opt|
|
11
|
-
descriptions = cli.class.TASK_DESC.keep_if { |k,v| k != :generic }
|
10
|
+
descriptions = cli.class.TASK_DESC.keep_if { |k, v| k != :generic }
|
12
11
|
opt.separator MiGA::MiGA.tabulate(
|
13
|
-
[:action, :description], descriptions
|
12
|
+
[:action, :description], descriptions
|
13
|
+
).join("\n")
|
14
14
|
opt.separator ''
|
15
15
|
opt.separator 'generic options:'
|
16
16
|
opt.on(
|
17
17
|
'-h', '--help',
|
18
18
|
'Display this screen'
|
19
|
-
|
19
|
+
) { puts opt; exit }
|
20
20
|
opt.on(
|
21
21
|
'-v', '--version',
|
22
22
|
'Show MiGA version'
|
23
|
-
|
23
|
+
) { puts MiGA::MiGA.VERSION; exit }
|
24
24
|
opt.on(
|
25
25
|
'-V', '--long-version',
|
26
26
|
'Show complete MiGA version'
|
27
|
-
|
27
|
+
) { |v| puts MiGA::MiGA.LONG_VERSION; exit }
|
28
28
|
opt.on(
|
29
29
|
'-C', '--citation',
|
30
30
|
'How to cite MiGA'
|
31
|
-
|
31
|
+
) { |v| puts MiGA::MiGA.CITATION; exit }
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
data/lib/miga/cli/action/get.rb
CHANGED
@@ -5,24 +5,23 @@ require 'miga/cli/action'
|
|
5
5
|
require 'miga/remote_dataset'
|
6
6
|
|
7
7
|
class MiGA::Cli::Action::Get < MiGA::Cli::Action
|
8
|
-
|
9
8
|
def parse_cli
|
10
|
-
cli.defaults = {query: false, universe: :ncbi, db: :nuccore,
|
11
|
-
|
9
|
+
cli.defaults = { query: false, universe: :ncbi, db: :nuccore,
|
10
|
+
get_md: false, only_md: false }
|
12
11
|
cli.parse do |opt|
|
13
12
|
cli.opt_object(opt, [:project, :dataset, :dataset_type])
|
14
13
|
opt.on(
|
15
14
|
'-I', '--ids ID1,ID2,...', Array,
|
16
15
|
'(Mandatory unless -F) IDs in the remote database separated by commas'
|
17
|
-
|
16
|
+
) { |v| cli[:ids] = v }
|
18
17
|
opt.on(
|
19
18
|
'-U', '--universe STRING',
|
20
19
|
"Universe of the remote database. By default: #{cli[:universe]}"
|
21
|
-
|
20
|
+
) { |v| cli[:universe] = v.to_sym }
|
22
21
|
opt.on(
|
23
22
|
'--db STRING',
|
24
23
|
"Name of the remote database. By default: #{cli[:db]}"
|
25
|
-
|
24
|
+
) { |v| cli[:db] = v.to_sym }
|
26
25
|
opt.on(
|
27
26
|
'-F', '--file PATH',
|
28
27
|
'Tab-delimited file (with header) listing the datasets to download',
|
@@ -30,39 +29,40 @@ class MiGA::Cli::Action::Get < MiGA::Cli::Action
|
|
30
29
|
'including: dataset, ids, universe, db, metadata',
|
31
30
|
'For flags without value (like query) use true/false',
|
32
31
|
'Unsupported values are: project, file, verbose, help, and debug'
|
33
|
-
|
32
|
+
) { |v| cli[:file] = v }
|
34
33
|
opt.on(
|
35
34
|
'-q', '--query',
|
36
35
|
'Register the dataset as a query, not a reference dataset'
|
37
|
-
|
38
|
-
opt.on(
|
36
|
+
) { |v| cli[:query] = v }
|
37
|
+
opt.on(
|
38
|
+
'--ignore-dup',
|
39
39
|
'Ignore datasets that already exist'
|
40
|
-
|
40
|
+
) { |v| cli[:ignore_dup] = v }
|
41
41
|
opt.on(
|
42
42
|
'-d', '--description STRING',
|
43
43
|
'Description of the dataset'
|
44
|
-
|
44
|
+
) { |v| cli[:description] = v }
|
45
45
|
opt.on(
|
46
46
|
'-c', '--comments STRING',
|
47
47
|
'Comments on the dataset'
|
48
|
-
|
48
|
+
) { |v| cli[:comments] = v }
|
49
49
|
opt.on(
|
50
50
|
'-m', '--metadata STRING',
|
51
51
|
'Metadata as key-value pairs separated by = and delimited by comma',
|
52
52
|
'Values are saved as strings except for booleans (true / false) or nil'
|
53
|
-
|
53
|
+
) { |v| cli[:metadata] = v }
|
54
54
|
opt.on(
|
55
55
|
'--get-metadata',
|
56
56
|
'Only download and update metadata for existing datasets'
|
57
|
-
|
57
|
+
) { |v| cli[:get_md] = v }
|
58
58
|
opt.on(
|
59
59
|
'--only-metadata',
|
60
60
|
'Create datasets without input data but retrieve all metadata'
|
61
|
-
|
61
|
+
) { |v| cli[:only_md] = v }
|
62
62
|
opt.on(
|
63
63
|
'--api-key STRING',
|
64
64
|
'API key for the given universe'
|
65
|
-
|
65
|
+
) { |v| cli[:api_key] = v }
|
66
66
|
end
|
67
67
|
end
|
68
68
|
|
@@ -72,6 +72,7 @@ class MiGA::Cli::Action::Get < MiGA::Cli::Action
|
|
72
72
|
glob.each do |sub_cli|
|
73
73
|
rd = create_remote_dataset(sub_cli)
|
74
74
|
next if rd.nil?
|
75
|
+
|
75
76
|
if sub_cli[:get_md]
|
76
77
|
update_metadata(sub_cli, p, rd)
|
77
78
|
else
|
@@ -84,13 +85,14 @@ class MiGA::Cli::Action::Get < MiGA::Cli::Action
|
|
84
85
|
|
85
86
|
def get_sub_cli
|
86
87
|
return [cli] if cli[:file].nil?
|
88
|
+
|
87
89
|
glob = []
|
88
90
|
File.open(cli[:file], 'r') do |fh|
|
89
91
|
h = nil
|
90
92
|
fh.each do |ln|
|
91
93
|
r = ln.chomp.split(/\t/)
|
92
94
|
if h.nil?
|
93
|
-
|
95
|
+
h = r
|
94
96
|
else
|
95
97
|
argv_i = [self.name]
|
96
98
|
h.each_with_index do |field, k|
|
@@ -132,6 +134,7 @@ class MiGA::Cli::Action::Get < MiGA::Cli::Action
|
|
132
134
|
sub_cli.say 'Updating dataset'
|
133
135
|
d = p.dataset(sub_cli[:dataset])
|
134
136
|
return if d.nil?
|
137
|
+
|
135
138
|
md = sub_cli.add_metadata(d).metadata.data
|
136
139
|
rd.update_metadata(d, md)
|
137
140
|
end
|
@@ -7,7 +7,6 @@ require 'digest/md5'
|
|
7
7
|
require 'open-uri'
|
8
8
|
|
9
9
|
class MiGA::Cli::Action::GetDb < MiGA::Cli::Action
|
10
|
-
|
11
10
|
def parse_cli
|
12
11
|
cli.defaults = {
|
13
12
|
database: :recommended,
|
@@ -81,6 +80,7 @@ class MiGA::Cli::Action::GetDb < MiGA::Cli::Action
|
|
81
80
|
cli.say "Connecting to '#{cli[:host]}'"
|
82
81
|
uri = URI.parse(cli[:host])
|
83
82
|
raise 'Only FTP hosts are supported' unless uri.scheme == 'ftp'
|
83
|
+
|
84
84
|
ftp = Net::FTP.new(uri.host)
|
85
85
|
ftp.passive = true
|
86
86
|
ftp.login
|
@@ -113,11 +113,13 @@ class MiGA::Cli::Action::GetDb < MiGA::Cli::Action
|
|
113
113
|
[:recommended, :test].each do |n|
|
114
114
|
if cli[:database] == n
|
115
115
|
raise "This host has no #{n} database" if manif[n].nil?
|
116
|
+
|
116
117
|
cli[:database] = manif[n].to_sym
|
117
118
|
end
|
118
119
|
end
|
119
120
|
db = manif[:databases][cli[:database]]
|
120
121
|
raise 'Cannot find database in this host' if db.nil?
|
122
|
+
|
121
123
|
db
|
122
124
|
end
|
123
125
|
|
@@ -127,12 +129,14 @@ class MiGA::Cli::Action::GetDb < MiGA::Cli::Action
|
|
127
129
|
end
|
128
130
|
ver = db[:versions][cli[:version]]
|
129
131
|
raise 'Cannot find database version' if ver.nil?
|
132
|
+
|
130
133
|
cli.puts "# Database size: #{version_size(ver)}"
|
131
134
|
ver
|
132
135
|
end
|
133
136
|
|
134
137
|
def list_databases(manif)
|
135
138
|
return false unless cli[:list_databases]
|
139
|
+
|
136
140
|
cli.puts "# Recommended database: #{manif[:recommended]}"
|
137
141
|
cli.puts ''
|
138
142
|
cli.table(
|
@@ -146,6 +150,7 @@ class MiGA::Cli::Action::GetDb < MiGA::Cli::Action
|
|
146
150
|
|
147
151
|
def list_versions(db)
|
148
152
|
return false unless cli[:list_versions]
|
153
|
+
|
149
154
|
cli.puts "# Database: #{cli[:database]}"
|
150
155
|
cli.puts ''
|
151
156
|
cli.table(
|
@@ -159,6 +164,7 @@ class MiGA::Cli::Action::GetDb < MiGA::Cli::Action
|
|
159
164
|
|
160
165
|
def check_target
|
161
166
|
return false if cli[:overwrite]
|
167
|
+
|
162
168
|
file = File.expand_path(cli[:database], cli[:local])
|
163
169
|
if Dir.exist? file
|
164
170
|
warn "The target directory already exists: #{file}"
|
@@ -201,7 +207,7 @@ class MiGA::Cli::Action::GetDb < MiGA::Cli::Action
|
|
201
207
|
reg[:databases][cli[:database]] ||= {}
|
202
208
|
reg[:databases][cli[:database]][:manif_last_update] = manif[:last_update]
|
203
209
|
reg[:databases][cli[:database]][:manif_host] = manif[:host]
|
204
|
-
db.each { |k,v| reg[:databases][cli[:database]][k] = v }
|
210
|
+
db.each { |k, v| reg[:databases][cli[:database]][k] = v }
|
205
211
|
reg[:databases][cli[:database]][:local_version] = ver
|
206
212
|
MiGA::Json.generate(reg, local_manif)
|
207
213
|
end
|
@@ -17,7 +17,7 @@ class MiGA::Cli::Action::IndexWf < MiGA::Cli::Action
|
|
17
17
|
) { |v| cli[:mytaxa] = v }
|
18
18
|
opts_for_wf_distances(opt)
|
19
19
|
opts_for_wf(opt, 'Input genome assemblies (nucleotides, FastA)',
|
20
|
-
|
20
|
+
cleanup: false, project_type: true)
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
data/lib/miga/cli/action/init.rb
CHANGED
@@ -7,44 +7,44 @@ require 'shellwords'
|
|
7
7
|
class MiGA::Cli::Action::Init < MiGA::Cli::Action
|
8
8
|
require 'miga/cli/action/init/daemon_helper'
|
9
9
|
include MiGA::Cli::Action::Init::DaemonHelper
|
10
|
-
|
10
|
+
|
11
11
|
def parse_cli
|
12
12
|
cli.interactive = true
|
13
13
|
cli.defaults = { mytaxa: nil,
|
14
|
-
|
15
|
-
|
14
|
+
config: File.expand_path('.miga_modules', ENV['HOME']),
|
15
|
+
ask: false, auto: false, dtype: :bash }
|
16
16
|
cli.parse do |opt|
|
17
17
|
opt.on(
|
18
18
|
'-c', '--config PATH',
|
19
19
|
'Path to the Bash configuration file',
|
20
20
|
"By default: #{cli[:config]}"
|
21
|
-
){ |v| cli[:config] = v }
|
21
|
+
) { |v| cli[:config] = v }
|
22
22
|
opt.on(
|
23
23
|
'--[no-]mytaxa',
|
24
24
|
'Should I try setting up MyTaxa its dependencies?',
|
25
25
|
'By default: interactive (true if --auto)'
|
26
|
-
){ |v| cli[:mytaxa] = v }
|
26
|
+
) { |v| cli[:mytaxa] = v }
|
27
27
|
opt.on(
|
28
28
|
'--daemon-type STRING',
|
29
29
|
'Type of daemon launcher, one of: bash, ssh, qsub, msub, slurm',
|
30
30
|
"By default: interactive (#{cli[:dtype]} if --auto)"
|
31
|
-
){ |v| cli[:dtype] = v.to_sym }
|
31
|
+
) { |v| cli[:dtype] = v.to_sym }
|
32
32
|
opt.on(
|
33
33
|
'--ask-all',
|
34
34
|
'Ask for the location of all software',
|
35
35
|
'By default, only the locations missing in PATH are requested'
|
36
|
-
){ |v| cli[:ask] = v }
|
36
|
+
) { |v| cli[:ask] = v }
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
40
40
|
def perform
|
41
|
-
cli.puts
|
42
|
-
===[ Welcome to MiGA, the Microbial Genome Atlas ]===
|
41
|
+
cli.puts <<~BANNER
|
42
|
+
===[ Welcome to MiGA, the Microbial Genome Atlas ]===
|
43
43
|
|
44
|
-
I'm the initialization script, and I'll sniff around your computer to
|
45
|
-
make sure you have all the requirements for MiGA data processing.
|
44
|
+
I'm the initialization script, and I'll sniff around your computer to
|
45
|
+
make sure you have all the requirements for MiGA data processing.
|
46
46
|
|
47
|
-
BANNER
|
47
|
+
BANNER
|
48
48
|
list_requirements
|
49
49
|
rc_fh = open_rc_file
|
50
50
|
check_configuration_script rc_fh
|
@@ -67,7 +67,7 @@ BANNER
|
|
67
67
|
|
68
68
|
def run_r_cmd(cli, paths, cmd)
|
69
69
|
run_cmd(cli,
|
70
|
-
|
70
|
+
"echo #{cmd.shellescape} | #{paths['R'].shellescape} --vanilla -q 2>&1")
|
71
71
|
end
|
72
72
|
|
73
73
|
def test_r_package(cli, paths, pkg)
|
@@ -82,7 +82,7 @@ BANNER
|
|
82
82
|
|
83
83
|
def test_ruby_gem(cli, paths, pkg)
|
84
84
|
run_cmd(cli,
|
85
|
-
|
85
|
+
"#{paths['ruby'].shellescape} -r #{pkg.shellescape} -e '' 2>/dev/null")
|
86
86
|
$?.success?
|
87
87
|
end
|
88
88
|
|
@@ -95,8 +95,9 @@ BANNER
|
|
95
95
|
|
96
96
|
def list_requirements
|
97
97
|
if cli.ask_user(
|
98
|
-
|
99
|
-
|
98
|
+
'Would you like to see all the requirements before starting?',
|
99
|
+
'no', %w(yes no)
|
100
|
+
) == 'yes'
|
100
101
|
cli.puts ''
|
101
102
|
req_path = File.expand_path('utils/requirements.txt', MiGA.root_path)
|
102
103
|
File.open(req_path, 'r') do |fh|
|
@@ -112,26 +113,28 @@ BANNER
|
|
112
113
|
rc_path = File.expand_path('.miga_rc', ENV['HOME'])
|
113
114
|
if File.exist? rc_path
|
114
115
|
if cli.ask_user(
|
115
|
-
|
116
|
-
|
116
|
+
'I found a previous configuration. Do you want to continue?',
|
117
|
+
'yes', %w(yes no)
|
118
|
+
) == 'no'
|
117
119
|
cli.puts 'OK, see you soon!'
|
118
120
|
exit(0)
|
119
121
|
end
|
120
122
|
end
|
121
123
|
rc_fh = File.open(rc_path, 'w')
|
122
|
-
rc_fh.puts
|
123
|
-
#!/bin/bash
|
124
|
-
# `miga init` made this on #{Time.now}
|
124
|
+
rc_fh.puts <<~BASH
|
125
|
+
#!/bin/bash
|
126
|
+
# `miga init` made this on #{Time.now}
|
125
127
|
|
126
|
-
BASH
|
128
|
+
BASH
|
127
129
|
rc_fh
|
128
130
|
end
|
129
131
|
|
130
132
|
def check_configuration_script(rc_fh)
|
131
133
|
unless File.exist? cli[:config]
|
132
134
|
cli[:config] = cli.ask_user(
|
133
|
-
|
134
|
-
|
135
|
+
'Is there a script I need to load at startup?',
|
136
|
+
cli[:config]
|
137
|
+
)
|
135
138
|
end
|
136
139
|
if File.exist? cli[:config]
|
137
140
|
cli[:config] = File.expand_path(cli[:config])
|
@@ -154,8 +157,10 @@ BASH
|
|
154
157
|
File.open(req_path, 'r') do |fh|
|
155
158
|
fh.each_line do |ln|
|
156
159
|
next if $. < 3
|
160
|
+
|
157
161
|
r = ln.chomp.split(/\t+/)
|
158
162
|
next if r[0] =~ /\(opt\)$/ && !cli[:mytaxa]
|
163
|
+
|
159
164
|
cli.print "Testing #{r[0]}#{" (#{r[3]})" if r[3]}... "
|
160
165
|
path = find_software(r[1])
|
161
166
|
paths[r[1]] = File.expand_path(r[1], path).shellescape
|
@@ -256,13 +261,13 @@ BASH
|
|
256
261
|
end
|
257
262
|
|
258
263
|
def close_rc_file(rc_fh)
|
259
|
-
rc_fh.puts
|
264
|
+
rc_fh.puts <<~FOOT
|
260
265
|
|
261
|
-
MIGA_CONFIG_VERSION='#{MiGA::MiGA.VERSION}'
|
262
|
-
MIGA_CONFIG_LONGVERSION='#{MiGA::MiGA.LONG_VERSION}'
|
263
|
-
MIGA_CONFIG_DATE='#{Time.now}'
|
266
|
+
MIGA_CONFIG_VERSION='#{MiGA::MiGA.VERSION}'
|
267
|
+
MIGA_CONFIG_LONGVERSION='#{MiGA::MiGA.LONG_VERSION}'
|
268
|
+
MIGA_CONFIG_DATE='#{Time.now}'
|
264
269
|
|
265
|
-
FOOT
|
270
|
+
FOOT
|
266
271
|
rc_fh.close
|
267
272
|
end
|
268
273
|
end
|