miga-base 0.2.0.6 → 0.2.0.7
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/Gemfile +3 -0
- data/LICENSE +201 -0
- data/README.md +17 -335
- data/Rakefile +31 -0
- data/actions/add_result +2 -5
- data/actions/add_taxonomy +4 -7
- data/actions/create_dataset +5 -6
- data/actions/create_project +2 -5
- data/actions/daemon +2 -5
- data/actions/download_dataset +88 -58
- data/actions/find_datasets +36 -38
- data/actions/import_datasets +2 -5
- data/actions/index_taxonomy +2 -5
- data/actions/list_datasets +47 -49
- data/actions/list_files +7 -11
- data/actions/unlink_dataset +2 -5
- data/bin/miga +1 -1
- data/lib/miga/common.rb +132 -0
- data/lib/miga/daemon.rb +229 -168
- data/lib/miga/dataset.rb +354 -277
- data/lib/miga/gui.rb +346 -269
- data/lib/miga/metadata.rb +115 -71
- data/lib/miga/project.rb +361 -259
- data/lib/miga/remote_dataset.rb +200 -148
- data/lib/miga/result.rb +150 -99
- data/lib/miga/tax_index.rb +124 -67
- data/lib/miga/taxonomy.rb +129 -100
- data/lib/miga/version.rb +57 -0
- data/lib/miga.rb +2 -77
- data/scripts/_distances_noref_nomulti.bash +2 -0
- data/scripts/_distances_ref_nomulti.bash +2 -0
- data/scripts/aai_distances.bash +1 -0
- data/scripts/ani_distances.bash +1 -0
- data/scripts/assembly.bash +1 -0
- data/scripts/cds.bash +1 -0
- data/scripts/clade_finding.bash +17 -1
- data/scripts/distances.bash +1 -0
- data/scripts/essential_genes.bash +1 -0
- data/scripts/haai_distances.bash +1 -0
- data/scripts/init.bash +2 -0
- data/scripts/mytaxa.bash +1 -0
- data/scripts/mytaxa_scan.bash +1 -0
- data/scripts/ogs.bash +1 -0
- data/scripts/read_quality.bash +1 -0
- data/scripts/ssu.bash +1 -0
- data/scripts/subclades.bash +1 -0
- data/scripts/trimmed_fasta.bash +1 -0
- data/scripts/trimmed_reads.bash +1 -0
- data/test/common_test.rb +82 -0
- data/test/daemon_test.rb +53 -0
- data/test/dataset_test.rb +156 -0
- data/test/jruby_gui_test.rb +20 -0
- data/test/metadata_test.rb +48 -0
- data/test/project_test.rb +54 -0
- data/test/remote_dataset_test.rb +41 -0
- data/test/tax_index_test.rb +44 -0
- data/test/taxonomy_test.rb +36 -0
- data/test/test_helper.rb +32 -0
- metadata +53 -38
data/lib/miga/metadata.rb
CHANGED
@@ -1,74 +1,118 @@
|
|
1
|
-
#
|
2
1
|
# @package MiGA
|
3
|
-
# @
|
4
|
-
# @license artistic license 2.0
|
5
|
-
# @update Jul-06-2015
|
6
|
-
#
|
2
|
+
# @license Artistic-2.0
|
7
3
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
end
|
4
|
+
##
|
5
|
+
# Metadata associated to objects like MiGA::Project, MiGA::Dataset, and
|
6
|
+
# MiGA::Result.
|
7
|
+
class MiGA::Metadata < MiGA::MiGA
|
8
|
+
# Class-level
|
9
|
+
|
10
|
+
##
|
11
|
+
# Does the metadata described in +path+ already exist?
|
12
|
+
def self.exist?(path) File.size? path end
|
13
|
+
|
14
|
+
##
|
15
|
+
# Load the metadata described in +path+ and return MiGA::Metadata if it
|
16
|
+
# exists, or nil otherwise.
|
17
|
+
def self.load(path)
|
18
|
+
return nil unless Metadata.exist? path
|
19
|
+
MiGA::Metadata.new(path)
|
20
|
+
end
|
21
|
+
|
22
|
+
# Instance-level
|
23
|
+
|
24
|
+
##
|
25
|
+
# Path to the JSON file describing the metadata.
|
26
|
+
attr_reader :path
|
27
|
+
|
28
|
+
##
|
29
|
+
# Parsed data as a Hash.
|
30
|
+
attr_reader :data
|
31
|
+
|
32
|
+
##
|
33
|
+
# Initiate a MiGA::Metadata object with description in +path+. It will create
|
34
|
+
# it if it doesn't exist.
|
35
|
+
def initialize(path, defaults={})
|
36
|
+
@path = File.absolute_path(path)
|
37
|
+
@data = {}
|
38
|
+
defaults.each_pair{ |k,v| self[k]=v }
|
39
|
+
self.create unless File.size? self.path
|
40
|
+
self.load
|
41
|
+
end
|
42
|
+
|
43
|
+
##
|
44
|
+
# Reset :created field and save the current data.
|
45
|
+
def create
|
46
|
+
@data[:created] = Time.now.to_s
|
47
|
+
self.save
|
48
|
+
end
|
49
|
+
|
50
|
+
##
|
51
|
+
# Save the metadata into #path.
|
52
|
+
def save
|
53
|
+
MiGA.DEBUG "Metadata.save #{path}"
|
54
|
+
@data[:updated] = Time.now.to_s
|
55
|
+
json = JSON.pretty_generate(data)
|
56
|
+
sleeper = 0.0
|
57
|
+
while File.exist?(lock_file)
|
58
|
+
sleeper += 0.1 if sleeper <= 10.0
|
59
|
+
sleep(sleeper.to_i)
|
60
|
+
end
|
61
|
+
FileUtils.touch lock_file
|
62
|
+
ofh = File.open(path + ".tmp", "w")
|
63
|
+
ofh.puts json
|
64
|
+
ofh.close
|
65
|
+
raise "Lock-racing detected for #{path}." unless
|
66
|
+
File.exist?(path + ".tmp") and File.exist?(lock_file)
|
67
|
+
File.rename(path + ".tmp", path)
|
68
|
+
File.unlink(lock_file)
|
69
|
+
end
|
74
70
|
|
71
|
+
##
|
72
|
+
# (Re-)load metadata stored in #path.
|
73
|
+
def load
|
74
|
+
sleeper = 0.0
|
75
|
+
while File.exist? lock_file
|
76
|
+
sleeper += 0.1 if sleeper <= 10.0
|
77
|
+
sleep(sleeper.to_i)
|
78
|
+
end
|
79
|
+
# :symbolize_names does not play nicely with :create_additions
|
80
|
+
tmp = JSON.parse(File.read(path),
|
81
|
+
{:symbolize_names=>false, :create_additions=>true})
|
82
|
+
@data = {}
|
83
|
+
tmp.each_pair{ |k,v| self[k] = v }
|
84
|
+
end
|
85
|
+
|
86
|
+
##
|
87
|
+
# Delete file at #path.
|
88
|
+
def remove!
|
89
|
+
MiGA.DEBUG "Metadata.remove! #{self.path}"
|
90
|
+
File.unlink(self.path)
|
91
|
+
nil
|
92
|
+
end
|
93
|
+
|
94
|
+
##
|
95
|
+
# Lock file for the metadata.
|
96
|
+
def lock_file ; path + ".lock" ; end
|
97
|
+
|
98
|
+
##
|
99
|
+
# Return the value of +k+ in #data.
|
100
|
+
def [](k) data[k.to_sym] end
|
101
|
+
|
102
|
+
##
|
103
|
+
# Set the value of +k+ to +v+.
|
104
|
+
def []=(k,v)
|
105
|
+
k = k.to_sym
|
106
|
+
# Protect the special field :name
|
107
|
+
v=v.miga_name if k==:name
|
108
|
+
# Symbolize the special field :type
|
109
|
+
v=v.to_sym if k==:type
|
110
|
+
# Register and return
|
111
|
+
@data[k]=v
|
112
|
+
end
|
113
|
+
|
114
|
+
##
|
115
|
+
# Iterate +blk+ for each data with 2 arguments key and value.
|
116
|
+
def each(&blk) data.each{ |k,v| blk.call(k,v) } ; end
|
117
|
+
|
118
|
+
end
|