rbbt-util 5.5.49 → 5.5.50
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 +8 -8
- data/lib/rbbt/resource.rb +23 -16
- data/lib/rbbt/util/cmd.rb +1 -2
- data/lib/rbbt/util/misc.rb +8 -4
- data/lib/rbbt/util/tar.rb +126 -0
- data/share/unicorn.rb +1 -0
- data/test/rbbt/util/test_misc.rb +43 -33
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
NGM4ZjliYTA2Y2UxYzNiZWY2NWM0N2Q5ZTI3MTFhNGU2ODI2Nzk3ZQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
NmI0MTM4MjRhYTM3NjJmMWRiN2NjOTg3NDNjYTYxYjhjN2IzNDRhOQ==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
NTc0MThjZDQ5ZTMyMjM0MjM2ZTFhMDZiYTg5YzU5ZDJmZGE1Y2ExNTZmZWU0
|
10
|
+
M2RkOWI3NTJkNmU3NWVkYzFiZDRiY2M2YTExMTg4MmQ1M2U4N2Y3YWRmN2U4
|
11
|
+
NDFiMjFiNzRhMmJmNzgwOTEyYzM2MDk2YjkxNzIxMTY5YjA0YmY=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
M2UyM2MyMmZjODBhZjU4N2MzNzA1MTcyMWZlYTEzYTU3MmVmNWRlZGY5ZmU1
|
14
|
+
MWU1MTIyMzNiNTQyMzBiNDc4OGZjNmE3NDZhNjk3YTk3MTU2ODNmMjY1NmRj
|
15
|
+
NTliMWJiOTBiZDRjYmQwZTg1NWEyZDM3NmZlMzUzZTQ3NzIwNTI=
|
data/lib/rbbt/resource.rb
CHANGED
@@ -58,27 +58,34 @@ module Resource
|
|
58
58
|
def get_from_server(path, final_path)
|
59
59
|
url = File.join(remote_server, '/resource/', self.to_s, 'get_file')
|
60
60
|
url << "?" << Misc.hash2GET_params(:file => path, :create => false)
|
61
|
+
|
61
62
|
begin
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
63
|
+
Net::HTTP.get_response URI(url) do |response|
|
64
|
+
case response
|
65
|
+
when Net::HTTPSuccess, Net::HTTPOK
|
66
|
+
|
67
|
+
Misc.sensiblewrite(final_path) do |file|
|
68
|
+
response.read_body do |chunk|
|
69
|
+
file.write chunk
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
when Net::HTTPRedirection, Net::HTTPFound
|
74
|
+
location = response['location']
|
75
|
+
Log.debug("Feching directory from: #{location}. Into: #{final_path}")
|
76
|
+
FileUtils.mkdir_p final_path unless File.exists? final_path
|
77
|
+
Misc.in_dir final_path do
|
78
|
+
CMD.cmd('tar xvfz -', :in => Open.open(location))
|
79
|
+
end
|
80
|
+
else
|
81
|
+
exit
|
82
|
+
raise "Response not understood: #{response.inspect}"
|
83
|
+
end
|
77
84
|
end
|
78
|
-
return true
|
79
85
|
rescue
|
80
86
|
Log.warn "Could not retrieve (#{self.to_s}) #{ path } from #{ remote_server }"
|
81
87
|
Log.error $!.message
|
88
|
+
Log.error $!.backtrace * "\n"
|
82
89
|
FileUtils.rm_rf final_path if File.exists? final_path
|
83
90
|
return false
|
84
91
|
end
|
data/lib/rbbt/util/cmd.rb
CHANGED
data/lib/rbbt/util/misc.rb
CHANGED
@@ -3,6 +3,9 @@ require 'net/smtp'
|
|
3
3
|
require 'digest/md5'
|
4
4
|
require 'narray'
|
5
5
|
require 'cgi'
|
6
|
+
require 'zlib'
|
7
|
+
require 'rubygems/package'
|
8
|
+
require 'rbbt/util/tar'
|
6
9
|
|
7
10
|
class Hash
|
8
11
|
def chunked_values_at(keys, max = 5000)
|
@@ -1017,16 +1020,17 @@ end
|
|
1017
1020
|
end
|
1018
1021
|
end
|
1019
1022
|
|
1020
|
-
def self.sensiblewrite(path, content = nil)
|
1023
|
+
def self.sensiblewrite(path, content = nil, &block)
|
1021
1024
|
return if File.exists? path
|
1022
1025
|
Misc.lock path + '.sensible_write' do
|
1023
1026
|
if not File.exists? path
|
1024
1027
|
begin
|
1025
|
-
tmp_path = path + '.
|
1026
|
-
content = yield if block_given?
|
1028
|
+
tmp_path = path + '.sensible_write'
|
1027
1029
|
case
|
1030
|
+
when block_given?
|
1031
|
+
File.open(tmp_path, 'w', &block)
|
1028
1032
|
when String === content
|
1029
|
-
File.open(tmp_path, 'w') do |f|
|
1033
|
+
File.open(tmp_path, 'w') do |f| f.write content end
|
1030
1034
|
when (IO === content or StringIO === content)
|
1031
1035
|
File.open(tmp_path, 'w') do |f|
|
1032
1036
|
while l = content.gets; f.write l; end
|
@@ -0,0 +1,126 @@
|
|
1
|
+
require 'rubygems/package'
|
2
|
+
require 'zlib'
|
3
|
+
require 'fileutils'
|
4
|
+
|
5
|
+
# SOURCE: https://gist.github.com/sinisterchipmunk/1335041
|
6
|
+
# Adapted for Rbbt
|
7
|
+
|
8
|
+
module Misc
|
9
|
+
# Creates a tar file in memory recursively
|
10
|
+
# from the given path.
|
11
|
+
#
|
12
|
+
# Returns a StringIO whose underlying String
|
13
|
+
# is the contents of the tar file.
|
14
|
+
def self.tar(path, tarfile = nil)
|
15
|
+
tarfile ||= StringIO.new("")
|
16
|
+
|
17
|
+
Gem::Package::TarWriter.new(tarfile) do |tar|
|
18
|
+
Dir[File.join(path, "**/*")].each do |file|
|
19
|
+
mode = File.stat(file).mode
|
20
|
+
relative_file = file.sub /^#{Regexp::escape path}\/?/, ''
|
21
|
+
|
22
|
+
if File.directory?(file)
|
23
|
+
tar.mkdir relative_file, mode
|
24
|
+
else
|
25
|
+
tar.add_file relative_file, mode do |tf|
|
26
|
+
File.open(file, "rb") { |f| tf.write f.read }
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
tarfile.rewind
|
33
|
+
|
34
|
+
tarfile
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.tarize(path, gz = nil)
|
38
|
+
gz ||= StringIO.new('wb')
|
39
|
+
|
40
|
+
tar = Misc.in_dir(path) do self.tar('.') end
|
41
|
+
|
42
|
+
tar.rewind
|
43
|
+
|
44
|
+
string = tar.string
|
45
|
+
ddd string.size
|
46
|
+
|
47
|
+
#chunk_size = 1024
|
48
|
+
#Zlib::GzipWriter.wrap(gz) do |writer|
|
49
|
+
# while chunk = tar.read(chunk_size) do
|
50
|
+
# writer.write chunk
|
51
|
+
# end
|
52
|
+
# writer.close
|
53
|
+
#end
|
54
|
+
z = Zlib::GzipWriter.new(gz)
|
55
|
+
z.write string
|
56
|
+
z.close
|
57
|
+
|
58
|
+
gz.reopen('read')
|
59
|
+
gz.rewind
|
60
|
+
|
61
|
+
|
62
|
+
gz
|
63
|
+
end
|
64
|
+
|
65
|
+
def self.tarize(path)
|
66
|
+
Misc.in_dir(path) do
|
67
|
+
CMD.cmd("tar cvfz - '.'", :pipe => true)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
# gzips the underlying string in the given StringIO,
|
72
|
+
# returning a new StringIO representing the
|
73
|
+
# compressed file.
|
74
|
+
def self.gzip(tarfile)
|
75
|
+
gz = StringIO.new("")
|
76
|
+
z = Zlib::GzipWriter.new(gz)
|
77
|
+
z.write tarfile.string
|
78
|
+
z.close # this is necessary!
|
79
|
+
|
80
|
+
# z was closed to write the gzip footer, so
|
81
|
+
# now we need a new StringIO
|
82
|
+
StringIO.new gz.string
|
83
|
+
end
|
84
|
+
|
85
|
+
# un-gzips the given IO, returning the
|
86
|
+
# decompressed version as a StringIO
|
87
|
+
def ungzip(tarfile)
|
88
|
+
z = Zlib::GzipReader.new(tarfile)
|
89
|
+
unzipped = StringIO.new(z.read)
|
90
|
+
z.close
|
91
|
+
unzipped
|
92
|
+
end
|
93
|
+
|
94
|
+
# untars the given IO into the specified
|
95
|
+
# directory
|
96
|
+
def untar(io, destination)
|
97
|
+
Gem::Package::TarReader.new io do |tar|
|
98
|
+
tar.each do |tarfile|
|
99
|
+
destination_file = File.join destination, tarfile.full_name
|
100
|
+
|
101
|
+
if tarfile.directory?
|
102
|
+
FileUtils.mkdir_p destination_file
|
103
|
+
else
|
104
|
+
destination_directory = File.dirname(destination_file)
|
105
|
+
FileUtils.mkdir_p destination_directory unless File.directory?(destination_directory)
|
106
|
+
File.open destination_file, "wb" do |f|
|
107
|
+
f.print tarfile.read
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
|
116
|
+
### Usage Example: ###
|
117
|
+
#
|
118
|
+
# include Util::Tar
|
119
|
+
#
|
120
|
+
# io = tar("./Desktop") # io is a TAR of files
|
121
|
+
# gz = gzip(io) # gz is a TGZ
|
122
|
+
#
|
123
|
+
# io = ungzip(gz) # io is a TAR
|
124
|
+
# untar(io, "./untarred") # files are untarred
|
125
|
+
#
|
126
|
+
|
data/share/unicorn.rb
CHANGED
data/test/rbbt/util/test_misc.rb
CHANGED
@@ -6,11 +6,11 @@ require 'rbbt/entity'
|
|
6
6
|
|
7
7
|
class TestMisc < Test::Unit::TestCase
|
8
8
|
|
9
|
-
def
|
9
|
+
def _test_humanize
|
10
10
|
assert_equal "mutation_enrichment", Misc.humanize("MutationEnrichment")
|
11
11
|
end
|
12
12
|
|
13
|
-
def
|
13
|
+
def _test_fixutf8
|
14
14
|
string = "abc\xffdef"
|
15
15
|
string = string.force_encoding("UTF-8") if string.respond_to? :force_encoding
|
16
16
|
assert(! string.valid_encoding?) if string.respond_to? :valid_encoding?
|
@@ -19,37 +19,37 @@ class TestMisc < Test::Unit::TestCase
|
|
19
19
|
assert( Misc.fixutf8(string).valid_encoding) if string.respond_to? :valid_encoding
|
20
20
|
end
|
21
21
|
|
22
|
-
def
|
22
|
+
def _test_colors_for
|
23
23
|
colors, used = Misc.colors_for([1,2,2,1,2,1,2,2,3,3,2,3,2])
|
24
24
|
assert_equal Misc::COLOR_LIST[1], used[2]
|
25
25
|
end
|
26
26
|
|
27
|
-
def
|
27
|
+
def _test_total_length
|
28
28
|
ranges = [(0..100), (50..150), (120..160)]
|
29
29
|
ranges = [(0..100), (50..150), (120..160), (51..70)]
|
30
30
|
assert_equal 161, Misc.total_length(ranges)
|
31
31
|
end
|
32
32
|
|
33
|
-
def
|
33
|
+
def _test_id_filename?
|
34
34
|
TmpFile.with_file("") do |file|
|
35
35
|
assert Misc.is_filename?(file)
|
36
36
|
assert ! Misc.is_filename?("TEST STRING")
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
40
|
-
def
|
40
|
+
def _test_merge_sorted_arrays
|
41
41
|
assert_equal [1,2,3,4], Misc.merge_sorted_arrays([1,3], [2,4])
|
42
42
|
end
|
43
43
|
|
44
|
-
def
|
44
|
+
def _test_intersect_sorted_arrays
|
45
45
|
assert_equal [2,4], Misc.intersect_sorted_arrays([1,2,3,4], [2,4])
|
46
46
|
end
|
47
47
|
|
48
|
-
def
|
48
|
+
def _test_sorted_array_matches
|
49
49
|
assert_equal [1,3], Misc.sorted_array_hits(%w(a b c d e), %w(b d))
|
50
50
|
end
|
51
51
|
|
52
|
-
def
|
52
|
+
def _test_binary_include?
|
53
53
|
a = %w(a b c d e).sort
|
54
54
|
assert Misc.binary_include?(a, "a")
|
55
55
|
assert(!Misc.binary_include?(a, "z"))
|
@@ -58,24 +58,24 @@ class TestMisc < Test::Unit::TestCase
|
|
58
58
|
assert(Misc.binary_include?(a, "d"))
|
59
59
|
end
|
60
60
|
|
61
|
-
def
|
61
|
+
def _test_process_to_hash
|
62
62
|
list = [1,2,3,4]
|
63
63
|
assert_equal 4, Misc.process_to_hash(list){|l| l.collect{|e| e * 2}}[2]
|
64
64
|
end
|
65
65
|
|
66
|
-
# def
|
66
|
+
# def _test_pdf2text_example
|
67
67
|
# assert PDF2Text.pdf2text(datafile_test('example.pdf')).read =~ /An Example Paper/i
|
68
68
|
# end
|
69
69
|
#
|
70
|
-
# def
|
70
|
+
# def _test_pdf2text_EPAR
|
71
71
|
# assert PDF2Text.pdf2text("http://www.ema.europa.eu/docs/en_GB/document_library/EPAR_-_Scientific_Discussion/human/000402/WC500033103.pdf").read =~ /Tamiflu/i
|
72
72
|
# end
|
73
73
|
#
|
74
|
-
# def
|
74
|
+
# def _test_pdf2text_wrong
|
75
75
|
# assert_raise CMD::CMDError do PDF2Text.pdf2text("http://www.ema.europa.eu/docs/en_GB#").read end
|
76
76
|
# end
|
77
77
|
|
78
|
-
def
|
78
|
+
def _test_string2hash
|
79
79
|
assert(Misc.string2hash("--user-agent=firefox").include? "--user-agent")
|
80
80
|
assert_equal(true, Misc.string2hash(":true")[:true])
|
81
81
|
assert_equal(true, Misc.string2hash("true")["true"])
|
@@ -93,17 +93,17 @@ class TestMisc < Test::Unit::TestCase
|
|
93
93
|
end
|
94
94
|
end
|
95
95
|
|
96
|
-
def
|
96
|
+
def _test_named_array
|
97
97
|
a = NamedArray.setup([1,2,3,4], %w(a b c d))
|
98
98
|
assert_equal(1, a['a'])
|
99
99
|
end
|
100
100
|
|
101
|
-
# def
|
101
|
+
# def _test_path_relative_to
|
102
102
|
# assert_equal "test/foo", Misc.path_relative_to('test/test/foo', 'test')
|
103
103
|
# end
|
104
104
|
|
105
|
-
# def
|
106
|
-
#
|
105
|
+
# def _test_chunk
|
106
|
+
# _test =<<-EOF
|
107
107
|
#This is an example file. Entries are separated by Entry
|
108
108
|
#-- Entry
|
109
109
|
#1
|
@@ -118,7 +118,7 @@ class TestMisc < Test::Unit::TestCase
|
|
118
118
|
# assert_equal "1\n2\n3", Misc.chunk(test, /^-- Entry/).first.strip
|
119
119
|
# end
|
120
120
|
|
121
|
-
def
|
121
|
+
def _test_hash2string
|
122
122
|
hash = {}
|
123
123
|
assert_equal hash, Misc.string2hash(Misc.hash2string(hash))
|
124
124
|
|
@@ -136,14 +136,14 @@ class TestMisc < Test::Unit::TestCase
|
|
136
136
|
|
137
137
|
end
|
138
138
|
|
139
|
-
def
|
139
|
+
def _test_merge
|
140
140
|
a = [[1],[2]]
|
141
141
|
a = NamedArray.setup a, %w(1 2)
|
142
142
|
a.merge [3,4]
|
143
143
|
assert_equal [1,3], a[0]
|
144
144
|
end
|
145
145
|
|
146
|
-
def
|
146
|
+
def _test_indiferent_hash
|
147
147
|
a = {:a => 1, "b" => 2}
|
148
148
|
a.extend IndiferentHash
|
149
149
|
|
@@ -153,7 +153,7 @@ class TestMisc < Test::Unit::TestCase
|
|
153
153
|
assert_equal 2, a[:b]
|
154
154
|
end
|
155
155
|
|
156
|
-
def
|
156
|
+
def _test_lockfile
|
157
157
|
|
158
158
|
TmpFile.with_file do |tmpfile|
|
159
159
|
pids = []
|
@@ -177,7 +177,7 @@ class TestMisc < Test::Unit::TestCase
|
|
177
177
|
end
|
178
178
|
end
|
179
179
|
|
180
|
-
def
|
180
|
+
def _test_positions2hash
|
181
181
|
inputs = Misc.positional2hash([:one, :two, :three], 1, :two => 2, :four => 4)
|
182
182
|
assert_equal 1, inputs[:one]
|
183
183
|
assert_equal 2, inputs[:two]
|
@@ -185,7 +185,7 @@ class TestMisc < Test::Unit::TestCase
|
|
185
185
|
assert_equal nil, inputs[:four]
|
186
186
|
end
|
187
187
|
|
188
|
-
def
|
188
|
+
def _test_mean
|
189
189
|
assert_equal 2, Misc.mean([1,2,3])
|
190
190
|
assert_equal 3, Misc.mean([1,2,3,4,5])
|
191
191
|
end
|
@@ -194,32 +194,32 @@ class TestMisc < Test::Unit::TestCase
|
|
194
194
|
assert_equal Math.sqrt(2), Misc.sd([1,3])
|
195
195
|
end
|
196
196
|
|
197
|
-
def
|
197
|
+
def _test_align_small
|
198
198
|
reference = "AABCDEBD"
|
199
199
|
sequence = "ABCD"
|
200
200
|
assert_equal '-ABCD---', Misc.fast_align(reference, sequence).last
|
201
201
|
end
|
202
202
|
|
203
|
-
def
|
203
|
+
def _test_align_real
|
204
204
|
reference = "SGNECNKAIDGNKDTFWHTFYGANGDPKPPPHTYTIDMKTTQNVNGLSMLPRQDGNQNGWIGRHEVYLSSDGTNW"
|
205
205
|
sequence = "TYTIDMKTTQNVNGLSML"
|
206
206
|
assert_equal "--------------------------------TYTIDMKTTQNVNGLSML-------------------------", Misc.fast_align(reference, sequence).last
|
207
207
|
end
|
208
208
|
|
209
|
-
def
|
209
|
+
def _test_divide
|
210
210
|
assert_equal 2, Misc.divide(%w(1 2 3 4 5 6 7 8 9),2).length
|
211
211
|
end
|
212
212
|
|
213
|
-
def
|
213
|
+
def _test_ordered_divide
|
214
214
|
assert_equal 5, Misc.ordered_divide(%w(1 2 3 4 5 6 7 8 9),2).length
|
215
215
|
end
|
216
216
|
|
217
|
-
def
|
217
|
+
def _test_collapse_ranges
|
218
218
|
ranges = [(0..100), (50..150), (51..61),(200..250), (300..324),(320..350)]
|
219
219
|
assert_equal [(0..150),(200..250), (300..350)], Misc.collapse_ranges(ranges)
|
220
220
|
end
|
221
221
|
|
222
|
-
def
|
222
|
+
def _test_humanize
|
223
223
|
str1 = "test_string"
|
224
224
|
str2 = "TEST_string"
|
225
225
|
str3 = "test"
|
@@ -229,18 +229,28 @@ class TestMisc < Test::Unit::TestCase
|
|
229
229
|
assert_equal "Test", Misc.humanize(str3)
|
230
230
|
end
|
231
231
|
|
232
|
-
def
|
232
|
+
def _test_snake_case
|
233
233
|
str1 = "ACRONIMTest"
|
234
234
|
str2 = "ACRONIM_test"
|
235
235
|
assert_equal "ACRONIM_test", Misc.snake_case(str1)
|
236
236
|
assert_equal "ACRONIM_test", Misc.snake_case(str2)
|
237
237
|
end
|
238
238
|
|
239
|
-
def
|
239
|
+
def _test_correct_vcf_mutations
|
240
240
|
assert_equal [737407, ["-----", "-----G", "-----GTTAAT"]], Misc.correct_vcf_mutation(737406, "GTTAAT", "G,GG,GGTTAAT")
|
241
241
|
end
|
242
242
|
|
243
|
-
def
|
243
|
+
def _test_fingerprint
|
244
244
|
puts Misc.fingerprint({:a => 1})
|
245
245
|
end
|
246
|
+
|
247
|
+
def test_tarize
|
248
|
+
path = File.expand_path('/home/mvazquezg/git/rbbt-util/lib')
|
249
|
+
stream = Misc.tarize(path)
|
250
|
+
TmpFile.with_file do |res|
|
251
|
+
Misc.in_dir(res) do
|
252
|
+
CMD.cmd("tar xvfz - ", :in => stream)
|
253
|
+
end
|
254
|
+
end
|
255
|
+
end
|
246
256
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rbbt-util
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.5.
|
4
|
+
version: 5.5.50
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Miguel Vazquez
|
@@ -163,6 +163,7 @@ files:
|
|
163
163
|
- lib/rbbt/util/semaphore.rb
|
164
164
|
- lib/rbbt/util/simpleDSL.rb
|
165
165
|
- lib/rbbt/util/simpleopt.rb
|
166
|
+
- lib/rbbt/util/tar.rb
|
166
167
|
- lib/rbbt/util/task/job.rb
|
167
168
|
- lib/rbbt/util/tmpfile.rb
|
168
169
|
- lib/rbbt/workflow.rb
|