rbbt-util 5.5.47 → 5.5.48
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/lib/rbbt/persist.rb +11 -11
- data/lib/rbbt/persist/tsv.rb +83 -7
- data/lib/rbbt/resource.rb +2 -1
- data/lib/rbbt/tsv/accessor.rb +0 -2
- data/lib/rbbt/tsv/index.rb +1 -188
- data/lib/rbbt/tsv/manipulate.rb +17 -4
- data/lib/rbbt/tsv/util.rb +23 -2
- data/lib/rbbt/util/misc.rb +26 -20
- data/test/rbbt/association/test_index.rb +4 -2
- data/test/rbbt/test_association.rb +10 -4
- data/test/rbbt/test_knowledge_base.rb +10 -5
- data/test/rbbt/test_tsv.rb +0 -2
- data/test/rbbt/tsv/test_attach.rb +2 -2
- data/test/rbbt/tsv/test_filter.rb +3 -1
- data/test/rbbt/tsv/test_index.rb +4 -4
- data/test/rbbt/util/test_filecache.rb +1 -0
- data/test/rbbt/workflow/test_step.rb +1 -1
- data/test/test_helper.rb +5 -4
- metadata +2 -4
- data/test/test_rbbt.rb +0 -10
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
N2M0YzQ0ZDZhNzU1NjA0ZmFkZWQ2NGYyN2E5YWRlY2VmZTc3MTc1NA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ZWY5ZGUwYTNmODQ2Y2IzN2UxYWUyOTdjMjBkY2ZlZjJlYzZhMTViMQ==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
NWQxMDI1NGI3YzQwZTRhNDIwZmNkNjIyNjkzMmQ4MDk3MzlmN2EyYjk1YzI1
|
10
|
+
OTdiYjk5NmQ2NTViN2IzOTI0Nzc1ZWEyOGFmNzdlZDkyYTE3OGM2MDQ0Njgz
|
11
|
+
MTAzMDljN2Y4OTNmMWJiNGM4MTAyMWM4ZGFkNGVkYWFhZjA3Nzc=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ZmY0OTBjNzUxNjRlZmY3NTNkZDY3ZmIwNDY0ZmFkOWVlZjgyZDNkZWIwMGFk
|
14
|
+
ODQxZTI3ZDdlZGIwNWY3OWY1NTcyZTI1M2NlYjY5Y2FkMDlhYWExNTgyMTZi
|
15
|
+
MTBjODc4ODRkZDNkNDJjNDAyNTE4MjJjODg1YTQzN2I2ZjA2MWE=
|
data/lib/rbbt/persist.rb
CHANGED
@@ -129,16 +129,16 @@ module Persist
|
|
129
129
|
when :nil
|
130
130
|
nil
|
131
131
|
when :boolean
|
132
|
-
|
132
|
+
Misc.sensiblewrite(path, content ? "true" : "false")
|
133
133
|
when :fwt
|
134
134
|
content.file.seek 0
|
135
|
-
|
135
|
+
Misc.sensiblewrite(path, content.file.read)
|
136
136
|
when :tsv
|
137
|
-
|
137
|
+
Misc.sensiblewrite(path, content.to_s)
|
138
138
|
when :annotations
|
139
|
-
|
139
|
+
Misc.sensiblewrite(path, Annotated.tsv(content, :all).to_s)
|
140
140
|
when :string, :text
|
141
|
-
|
141
|
+
Misc.sensiblewrite(path, content)
|
142
142
|
when :binary
|
143
143
|
content.force_encoding("ASCII-8BIT") if content.respond_to? :force_encoding
|
144
144
|
f = File.open(path, 'wb')
|
@@ -147,18 +147,18 @@ module Persist
|
|
147
147
|
content
|
148
148
|
when :array
|
149
149
|
if content.empty?
|
150
|
-
|
150
|
+
Misc.sensiblewrite(path, "")
|
151
151
|
else
|
152
|
-
|
152
|
+
Misc.sensiblewrite(path, content * "\n" + "\n")
|
153
153
|
end
|
154
154
|
when :marshal_tsv
|
155
|
-
|
155
|
+
Misc.sensiblewrite(path, Marshal.dump(content.dup))
|
156
156
|
when :marshal
|
157
|
-
|
157
|
+
Misc.sensiblewrite(path, Marshal.dump(content))
|
158
158
|
when :yaml
|
159
|
-
|
159
|
+
Misc.sensiblewrite(path, YAML.dump(content))
|
160
160
|
when :float, :integer, :tsv
|
161
|
-
|
161
|
+
Misc.sensiblewrite(path, content.to_s)
|
162
162
|
else
|
163
163
|
raise "Unknown persistence: #{ type }"
|
164
164
|
end
|
data/lib/rbbt/persist/tsv.rb
CHANGED
@@ -102,7 +102,6 @@ module Persist
|
|
102
102
|
end
|
103
103
|
end
|
104
104
|
|
105
|
-
|
106
105
|
def write_and_close
|
107
106
|
lock_filename = Persist.persistence_path(persistence_path, {:dir => TSV.lock_dir})
|
108
107
|
Misc.lock(lock_filename) do
|
@@ -190,7 +189,9 @@ module Persist
|
|
190
189
|
|
191
190
|
FileUtils.rm path if File.exists? path
|
192
191
|
|
193
|
-
|
192
|
+
tmp_path = path + '.persist'
|
193
|
+
|
194
|
+
data = open_tokyocabinet(tmp_path, true, persist_options[:serializer], persist_options[:engine] || TokyoCabinet::HDB)
|
194
195
|
data.serializer = :type if TSV === data and data.serializer.nil?
|
195
196
|
|
196
197
|
data.close
|
@@ -210,13 +211,14 @@ module Persist
|
|
210
211
|
end
|
211
212
|
rescue Exception
|
212
213
|
Log.error "Captured error during persist_tsv. Erasing: #{path}"
|
213
|
-
FileUtils.rm
|
214
|
+
FileUtils.rm tmp_path if tmp_path and File.exists? tmp_path
|
214
215
|
raise $!
|
215
216
|
ensure
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
217
|
+
data.close if data.respond_to? :close
|
218
|
+
if tmp_path
|
219
|
+
FileUtils.mv tmp_path, path if File.exists? tmp_path and not File.exists? path
|
220
|
+
tsv = TC_CONNECTIONS[path] = TC_CONNECTIONS.delete tmp_path
|
221
|
+
tsv.persistence_path = path
|
220
222
|
end
|
221
223
|
end
|
222
224
|
|
@@ -225,4 +227,78 @@ module Persist
|
|
225
227
|
|
226
228
|
data
|
227
229
|
end
|
230
|
+
|
231
|
+
def self.get_filename(source)
|
232
|
+
case
|
233
|
+
when Path === source
|
234
|
+
source
|
235
|
+
when (source.respond_to?(:filename) and source.filename)
|
236
|
+
source.filename
|
237
|
+
when source.respond_to?(:cmd)
|
238
|
+
"CMD-#{Misc.digest(source.cmd)}"
|
239
|
+
when TSV === source
|
240
|
+
"TSV[#{Misc.digest Misc.fingerprint(source)}]"
|
241
|
+
end || source.object_id.to_s
|
242
|
+
end
|
243
|
+
|
244
|
+
def self.persist_tsv(source, filename, options = {}, persist_options = {}, &block)
|
245
|
+
persist_options[:prefix] ||= "TSV"
|
246
|
+
|
247
|
+
if data = persist_options[:data]
|
248
|
+
yield data
|
249
|
+
return data
|
250
|
+
end
|
251
|
+
|
252
|
+
filename ||= get_filename(source)
|
253
|
+
|
254
|
+
path = persistence_path(filename, persist_options, options)
|
255
|
+
|
256
|
+
lock_filename = Persist.persistence_path(path, {:dir => TSV.lock_dir})
|
257
|
+
|
258
|
+
if not persist_options[:persist]
|
259
|
+
data = {}
|
260
|
+
|
261
|
+
yield(data)
|
262
|
+
|
263
|
+
return data
|
264
|
+
end
|
265
|
+
|
266
|
+
if is_persisted? path and not persist_options[:update]
|
267
|
+
Log.debug "TSV persistence up-to-date: #{ path }"
|
268
|
+
return open_tokyocabinet(path, false, nil, persist_options[:engine] || TokyoCabinet::HDB)
|
269
|
+
end
|
270
|
+
|
271
|
+
Misc.lock lock_filename do
|
272
|
+
begin
|
273
|
+
if is_persisted? path
|
274
|
+
Log.debug "TSV persistence up-to-date: #{ path }"
|
275
|
+
return open_tokyocabinet(path, false, nil, persist_options[:engine] || TokyoCabinet::HDB)
|
276
|
+
end
|
277
|
+
|
278
|
+
FileUtils.rm path if File.exists? path
|
279
|
+
|
280
|
+
Log.medium "TSV persistence creating: #{ path }"
|
281
|
+
|
282
|
+
tmp_path = path + '.persist'
|
283
|
+
|
284
|
+
data = open_tokyocabinet(tmp_path, true, persist_options[:serializer], persist_options[:engine] || TokyoCabinet::HDB)
|
285
|
+
data.serializer = :type if TSV === data and data.serializer.nil?
|
286
|
+
|
287
|
+
data.write_and_read do
|
288
|
+
yield data
|
289
|
+
end
|
290
|
+
|
291
|
+
FileUtils.mv tmp_path, path if File.exists? tmp_path and not File.exists? path
|
292
|
+
tsv = TC_CONNECTIONS[path] = TC_CONNECTIONS.delete tmp_path
|
293
|
+
tsv.persistence_path = path
|
294
|
+
|
295
|
+
data
|
296
|
+
rescue Exception
|
297
|
+
Log.error "Captured error during persist_tsv. Erasing: #{path}"
|
298
|
+
FileUtils.rm tmp_path if tmp_path and File.exists? tmp_path
|
299
|
+
FileUtils.rm path if path and File.exists? path
|
300
|
+
raise $!
|
301
|
+
end
|
302
|
+
end
|
303
|
+
end
|
228
304
|
end
|
data/lib/rbbt/resource.rb
CHANGED
@@ -63,7 +63,8 @@ module Resource
|
|
63
63
|
|
64
64
|
case response
|
65
65
|
when Net::HTTPSuccess then
|
66
|
-
|
66
|
+
#Misc.sensiblewrite(final_path, response.body)
|
67
|
+
Misc.sensiblewrite(final_path){ Net::HTTP.get_response(URI(url)).body }
|
67
68
|
when Net::HTTPRedirection then
|
68
69
|
location = response['location']
|
69
70
|
Log.debug("Feching directory from: #{location}. Into: #{final_path}")
|
data/lib/rbbt/tsv/accessor.rb
CHANGED
data/lib/rbbt/tsv/index.rb
CHANGED
@@ -126,7 +126,7 @@ module TSV
|
|
126
126
|
data_options = Misc.pull_keys options, :data
|
127
127
|
identifiers = TSV.open(file, data_options)
|
128
128
|
identifiers.with_monitor :desc => "Creating Index for #{ file }" do
|
129
|
-
identifiers.index(options.merge :persist_data => data, :persist => persist_options[:persist])
|
129
|
+
index = identifiers.index(options.merge :persist_data => data, :persist => persist_options[:persist])
|
130
130
|
end
|
131
131
|
end
|
132
132
|
end
|
@@ -273,192 +273,5 @@ module TSV
|
|
273
273
|
tsv.range_index(start_field, end_field, options)
|
274
274
|
end
|
275
275
|
end
|
276
|
-
|
277
|
-
|
278
|
-
# def self.field_matches(tsv, values)
|
279
|
-
# values = [values] if not Array === values
|
280
|
-
# Log.debug "Matcing #{values.length} values to #{tsv.filename}"
|
281
|
-
#
|
282
|
-
# if values.flatten.sort[0..9].compact.collect{|n| n.to_i} == (1..10).to_a
|
283
|
-
# return {}
|
284
|
-
# end
|
285
|
-
#
|
286
|
-
# key_field = tsv.key_field
|
287
|
-
# fields = tsv.fields
|
288
|
-
#
|
289
|
-
# field_values = {}
|
290
|
-
# fields.each{|field|
|
291
|
-
# field_values[field] = []
|
292
|
-
# }
|
293
|
-
#
|
294
|
-
# if tsv.type == :double
|
295
|
-
# tsv.through do |key,entry_values|
|
296
|
-
# fields.zip(entry_values).each do |field,entry_field_values|
|
297
|
-
# field_values[field].concat entry_field_values unless entry_field_values.nil?
|
298
|
-
# end
|
299
|
-
# end
|
300
|
-
# else
|
301
|
-
# tsv.through do |key,entry_values|
|
302
|
-
# fields.zip(entry_values).each do |field,entry_field_values|
|
303
|
-
# field_values[field] << entry_field_values
|
304
|
-
# end
|
305
|
-
# end
|
306
|
-
# end
|
307
|
-
#
|
308
|
-
# field_values.each do |field,field_value_list|
|
309
|
-
# field_value_list.replace(values & field_value_list.flatten.uniq)
|
310
|
-
# end
|
311
|
-
#
|
312
|
-
# field_values[key_field] = values & tsv.keys
|
313
|
-
#
|
314
|
-
# field_values
|
315
|
-
# end
|
316
|
-
#
|
317
|
-
# def field_matches(values)
|
318
|
-
# TSV.field_matches(self, values)
|
319
|
-
# end
|
320
|
-
#
|
321
|
-
# def guess_field(values)
|
322
|
-
# field_matches(values).sort_by{|field, matches| matches.uniq.length}.last
|
323
|
-
# end
|
324
|
-
#
|
325
|
-
# def pos_index(pos_field = nil, options = {})
|
326
|
-
# pos_field ||= "Position"
|
327
|
-
#
|
328
|
-
# options = Misc.add_defaults options,
|
329
|
-
# :persistence => true, :persistence_file => nil, :persistence_update => false
|
330
|
-
#
|
331
|
-
# prefix = "Pos[#{pos_field}]"
|
332
|
-
#
|
333
|
-
# Persistence.persist(filename, prefix, :fwt, options.merge({
|
334
|
-
# :pos_field => pos_field,
|
335
|
-
# :filters => (self.respond_to?(:filters)? filters.collect{|f| [f.match, f.value]} : [])
|
336
|
-
# })) do |file, options, filename|
|
337
|
-
# pos_field = options[:pos_field]
|
338
|
-
# value_size = 0
|
339
|
-
# index_data = []
|
340
|
-
#
|
341
|
-
# through :key, pos_field do |key, values|
|
342
|
-
# value_size = key.length if key.length > value_size
|
343
|
-
#
|
344
|
-
# pos = values.first
|
345
|
-
# if Array === pos
|
346
|
-
# pos.each do |p|
|
347
|
-
# index_data << [key, p.to_i]
|
348
|
-
# end
|
349
|
-
# else
|
350
|
-
# index_data << [key, pos.to_i]
|
351
|
-
# end
|
352
|
-
# end
|
353
|
-
#
|
354
|
-
# index = FixWidthTable.get(:memory, value_size, false)
|
355
|
-
# index.add_point index_data
|
356
|
-
# index.read
|
357
|
-
# index
|
358
|
-
# end
|
359
|
-
# end
|
360
|
-
#
|
361
|
-
# def self.pos_index(file, pos_field = nil, options = {})
|
362
|
-
# options = Misc.add_defaults options,
|
363
|
-
# :persistence => true, :persistence_file => nil, :persistence_update => false, :persistence_source => file, :tsv_serializer => :list,
|
364
|
-
# :data_persistence => false, :data_persistence_file => nil, :data_persistence_update => false, :data_persistence_source => file
|
365
|
-
#
|
366
|
-
# #options_data = {
|
367
|
-
# # :cast => Misc.process_options(options, :data_cast),
|
368
|
-
# # :persistence => Misc.process_options(options, :data_persistence),
|
369
|
-
# # :monitor => Misc.process_options(options, :data_monitor),
|
370
|
-
# # :persistence_file => Misc.process_options(options, :data_persistence_file),
|
371
|
-
# # :persistence_update => Misc.process_options(options, :data_persistence_update),
|
372
|
-
# # :in_situ_persistence => Misc.process_options(options,:data_in_situ_persistence),
|
373
|
-
# # :persistence_source => Misc.process_options(options, :data_persistence_source),
|
374
|
-
# # :importtsv => Misc.process_options(options, :data_importtsv),
|
375
|
-
# #}
|
376
|
-
#
|
377
|
-
# options_data = Misc.pull_data_keys(options)
|
378
|
-
#
|
379
|
-
# prefix = "Pos[#{pos_field}]"
|
380
|
-
#
|
381
|
-
# new = Persistence.persist(file, prefix, :fwt, options.merge({:pos_field => pos_field})) do |file, options, filename|
|
382
|
-
# tsv = TSV.new(file, :list, options_data)
|
383
|
-
#
|
384
|
-
# if options.include?(:filters) and Array === options[:filters] and not options[:filters].empty?
|
385
|
-
# tsv.filter
|
386
|
-
# options[:filters].each do |match, value, persistence|
|
387
|
-
# tsv.add_filter(match, value, persistence)
|
388
|
-
# end
|
389
|
-
# end
|
390
|
-
#
|
391
|
-
# tsv.pos_index options[:pos_field], options.merge(:persistence => false, :persistence_file => nil)
|
392
|
-
# end
|
393
|
-
# end
|
394
|
-
#
|
395
|
-
# def range_index(start_field = nil, end_field = nil, options = {})
|
396
|
-
# start_field ||= "Start"
|
397
|
-
# end_field ||= "End"
|
398
|
-
# options = Misc.add_defaults options,
|
399
|
-
# :persistence => true, :persistence_file => nil, :persistence_update => false
|
400
|
-
#
|
401
|
-
# prefix = "Range[#{start_field}-#{end_field}]"
|
402
|
-
#
|
403
|
-
# Persistence.persist(filename, prefix, :fwt, options.merge({
|
404
|
-
# :start_field => start_field, :end_field => end_field,
|
405
|
-
# :filters => (self.respond_to?(:filters)? filters.collect{|f| [f.match, f.value]} : [])
|
406
|
-
# })) do |file, options, filename|
|
407
|
-
# start_field, end_field = options.values_at :start_field, :end_field
|
408
|
-
#
|
409
|
-
# value_size = 0
|
410
|
-
# index_data = []
|
411
|
-
#
|
412
|
-
# through :key, [start_field, end_field] do |key, values|
|
413
|
-
# value_size = key.length if key.length > value_size
|
414
|
-
#
|
415
|
-
# start_pos, end_pos = values
|
416
|
-
#
|
417
|
-
# if Array === start_pos
|
418
|
-
# start_pos.zip(end_pos).each do |s,e|
|
419
|
-
# index_data << [key, [s.to_i, e.to_i]]
|
420
|
-
# end
|
421
|
-
# else
|
422
|
-
# index_data << [key, [start_pos.to_i, end_pos.to_i]]
|
423
|
-
# end
|
424
|
-
# end
|
425
|
-
#
|
426
|
-
# index = FixWidthTable.get(:memory, value_size, true)
|
427
|
-
# index.add_range index_data
|
428
|
-
# index.read
|
429
|
-
# index
|
430
|
-
# end
|
431
|
-
# end
|
432
|
-
#
|
433
|
-
# def self.range_index(file, start_field = nil, end_field = nil, options = {})
|
434
|
-
# options = Misc.add_defaults options,
|
435
|
-
# :persistence => true, :persistence_file => nil, :persistence_update => false, :persistence_source => file, :tsv_serializer => :list,
|
436
|
-
# :data_persistence => false, :data_persistence_file => nil, :data_persistence_update => false, :data_persistence_source => file
|
437
|
-
#
|
438
|
-
# options_data = {
|
439
|
-
# :persistence => Misc.process_options(options, :data_persistence),
|
440
|
-
# :persistence_file => Misc.process_options(options, :data_persistence_file),
|
441
|
-
# :persistence_update => Misc.process_options(options, :data_persistence_update),
|
442
|
-
# :persistence_source => Misc.process_options(options, :data_persistence_source),
|
443
|
-
# }
|
444
|
-
#
|
445
|
-
# prefix = "Range[#{start_field}-#{end_field}]"
|
446
|
-
#
|
447
|
-
# options_data[:type] = :flat if options[:order] == false
|
448
|
-
#
|
449
|
-
# Persistence.persist(file, prefix, :fwt, options.merge({:start_field => start_field, :end_field => end_field})) do |file, options, filename|
|
450
|
-
# tsv = TSV.new(file, :list, options_data)
|
451
|
-
#
|
452
|
-
# if options.include?(:filters) and Array === options[:filters] and not options[:filters].empty?
|
453
|
-
# tsv.filter
|
454
|
-
# options[:filters].each do |match, value, persistence|
|
455
|
-
# tsv.add_filter(match, value, persistence)
|
456
|
-
# end
|
457
|
-
# end
|
458
|
-
#
|
459
|
-
# tsv.range_index options[:start_field], options[:end_field], options.merge(:persistence => false, :persistence_file => nil)
|
460
|
-
# end
|
461
|
-
# end
|
462
|
-
#
|
463
276
|
end
|
464
277
|
|
data/lib/rbbt/tsv/manipulate.rb
CHANGED
@@ -449,18 +449,31 @@ module TSV
|
|
449
449
|
|
450
450
|
when (String === method and method =~ /name:(.*)/)
|
451
451
|
name = $1
|
452
|
+
old_unnamed = self.unnamed
|
453
|
+
self.unnamed = false
|
452
454
|
if name.strip =~ /^\/(.*)\/$/
|
453
455
|
regexp = Regexp.new $1
|
454
456
|
through :key, key do |key, values|
|
455
|
-
|
456
|
-
|
457
|
+
case type
|
458
|
+
when :single
|
459
|
+
values = values.annotate([values])
|
460
|
+
when :double
|
461
|
+
values = values[0]
|
462
|
+
end
|
463
|
+
new[key] = self[key] if invert ^ (values.select{|v| v.name =~ regexp}.any?)
|
457
464
|
end
|
458
465
|
else
|
459
466
|
through :key, key do |key, values|
|
460
|
-
|
461
|
-
|
467
|
+
case type
|
468
|
+
when :single
|
469
|
+
values = values.annotate([values])
|
470
|
+
when :double
|
471
|
+
values = values[0]
|
472
|
+
end
|
473
|
+
new[key] = self[key] if invert ^ (values.select{|v| v.name == name}.any?)
|
462
474
|
end
|
463
475
|
end
|
476
|
+
self.unnamed = old_unnamed
|
464
477
|
|
465
478
|
when String === method
|
466
479
|
with_unnamed do
|
data/lib/rbbt/tsv/util.rb
CHANGED
@@ -81,6 +81,29 @@ module TSV
|
|
81
81
|
TSV.identify_field(key_field, fields, field)
|
82
82
|
end
|
83
83
|
|
84
|
+
def to_list
|
85
|
+
new = {}
|
86
|
+
case type
|
87
|
+
when :double
|
88
|
+
through do |k,v|
|
89
|
+
new[k] = v.collect{|e| e.first}
|
90
|
+
end
|
91
|
+
when :flat
|
92
|
+
through do |k,v|
|
93
|
+
new[k] = [v.first]
|
94
|
+
end
|
95
|
+
when :single
|
96
|
+
through do |k,v|
|
97
|
+
new[k] = [v]
|
98
|
+
end
|
99
|
+
when :list
|
100
|
+
self
|
101
|
+
end
|
102
|
+
self.annotate(new)
|
103
|
+
new.type = :list
|
104
|
+
new
|
105
|
+
end
|
106
|
+
|
84
107
|
def to_double
|
85
108
|
new = {}
|
86
109
|
case type
|
@@ -154,6 +177,4 @@ module TSV
|
|
154
177
|
new
|
155
178
|
end
|
156
179
|
|
157
|
-
|
158
|
-
|
159
180
|
end
|
data/lib/rbbt/util/misc.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'lockfile'
|
2
2
|
require 'net/smtp'
|
3
3
|
require 'digest/md5'
|
4
|
+
require 'narray'
|
4
5
|
require 'cgi'
|
5
6
|
|
6
7
|
class Hash
|
@@ -477,7 +478,6 @@ end
|
|
477
478
|
}
|
478
479
|
|
479
480
|
def self.fast_align(reference, sequence)
|
480
|
-
require 'narray'
|
481
481
|
init_gap = -1
|
482
482
|
gap = -2
|
483
483
|
diff = -2
|
@@ -488,7 +488,6 @@ end
|
|
488
488
|
|
489
489
|
a = NArray.int(cols, rows)
|
490
490
|
|
491
|
-
|
492
491
|
for spos in 0..cols-1 do a[spos, 0] = spos * init_gap end
|
493
492
|
for rpos in 0..rows-1 do a[0, rpos] = rpos * init_gap end
|
494
493
|
|
@@ -905,7 +904,8 @@ end
|
|
905
904
|
|
906
905
|
res = nil
|
907
906
|
|
908
|
-
|
907
|
+
lock_path = File.expand_path(file + '.lock')
|
908
|
+
lockfile = Lockfile.new(lock_path)
|
909
909
|
|
910
910
|
begin
|
911
911
|
if File.exists? lockfile and
|
@@ -917,15 +917,21 @@ end
|
|
917
917
|
end
|
918
918
|
rescue
|
919
919
|
Log.warn("Error checking lockfile #{lockfile}: #{$!.message}. Removing. Content: #{begin Open.read(lockfile) rescue "Could not open file" end}")
|
920
|
-
FileUtils.rm lockfile if File.exists?
|
920
|
+
FileUtils.rm lockfile if File.exists?(lockfile)
|
921
921
|
end
|
922
922
|
|
923
|
-
|
924
|
-
|
923
|
+
begin
|
924
|
+
lockfile.lock do
|
925
|
+
res = yield file, *args
|
926
|
+
end
|
927
|
+
rescue Interrupt
|
928
|
+
Log.error "Process #{Process.pid} interrupted while in lock: #{ lock_path }"
|
929
|
+
raise $!
|
925
930
|
end
|
926
931
|
|
927
932
|
res
|
928
933
|
end
|
934
|
+
|
929
935
|
|
930
936
|
LOCK_REPO_SERIALIZER=Marshal
|
931
937
|
|
@@ -1011,32 +1017,32 @@ end
|
|
1011
1017
|
end
|
1012
1018
|
end
|
1013
1019
|
|
1014
|
-
def self.sensiblewrite(path, content)
|
1020
|
+
def self.sensiblewrite(path, content = nil)
|
1021
|
+
return if File.exists? path
|
1015
1022
|
Misc.lock path + '.sensible_write' do
|
1016
1023
|
if not File.exists? path
|
1017
1024
|
begin
|
1018
1025
|
tmp_path = path + '.tmp'
|
1026
|
+
content = yield if block_given?
|
1019
1027
|
case
|
1020
1028
|
when String === content
|
1021
1029
|
File.open(tmp_path, 'w') do |f| f.write content end
|
1022
1030
|
when (IO === content or StringIO === content)
|
1023
|
-
File.open(tmp_path, 'w') do |f|
|
1024
|
-
|
1025
|
-
|
1031
|
+
File.open(tmp_path, 'w') do |f|
|
1032
|
+
while l = content.gets; f.write l; end
|
1033
|
+
end
|
1034
|
+
else
|
1035
|
+
File.open(tmp_path, 'w') do |f| end
|
1036
|
+
end
|
1037
|
+
FileUtils.mv tmp_path, path
|
1038
|
+
rescue Exception
|
1039
|
+
FileUtils.rm_f tmp_path if File.exists? tmp_path
|
1040
|
+
FileUtils.rm_f path if File.exists? path
|
1041
|
+
raise $!
|
1026
1042
|
end
|
1027
|
-
FileUtils.mv tmp_path, path
|
1028
|
-
rescue Interrupt
|
1029
|
-
FileUtils.rm_f tmp_path if File.exists? tmp_path
|
1030
|
-
FileUtils.rm_f path if File.exists? path
|
1031
|
-
raise "Interrupted (Ctrl-c)"
|
1032
|
-
rescue Exception
|
1033
|
-
FileUtils.rm_f tmp_path if File.exists? tmp_path
|
1034
|
-
FileUtils.rm_f path if File.exists? path
|
1035
|
-
raise $!
|
1036
1043
|
end
|
1037
1044
|
end
|
1038
1045
|
end
|
1039
|
-
end
|
1040
1046
|
|
1041
1047
|
def self.add_defaults(options, defaults = {})
|
1042
1048
|
case
|
@@ -3,11 +3,13 @@ require 'rbbt/workflow'
|
|
3
3
|
require 'rbbt/association'
|
4
4
|
require 'rbbt/association/index'
|
5
5
|
|
6
|
+
gem 'rbbt-sources'
|
7
|
+
Workflow.require_workflow "Genomics"
|
8
|
+
require 'rbbt/entity/gene'
|
9
|
+
|
6
10
|
class TestAssociationIndex < Test::Unit::TestCase
|
7
11
|
|
8
12
|
def setup
|
9
|
-
Workflow.require_workflow "Genomics"
|
10
|
-
require 'rbbt/entity/gene'
|
11
13
|
end
|
12
14
|
|
13
15
|
def teardown
|
@@ -1,13 +1,20 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
|
2
|
+
require 'rbbt/util/tmpfile'
|
3
|
+
require 'test/unit'
|
4
|
+
|
2
5
|
require 'rbbt/workflow'
|
6
|
+
require 'rbbt/entity'
|
7
|
+
|
3
8
|
require 'rbbt/association'
|
4
9
|
require 'rbbt/knowledge_base'
|
5
|
-
require 'rbbt/entity'
|
6
|
-
require 'rbbt/util/tmpfile'
|
7
|
-
require 'test/unit'
|
8
10
|
|
11
|
+
gem 'rbbt-sources'
|
12
|
+
gem 'rbbt-phgx'
|
13
|
+
|
14
|
+
Log.severity=0
|
9
15
|
Workflow.require_workflow "Genomics"
|
10
16
|
require 'rbbt/entity/gene'
|
17
|
+
require 'rbbt/sources/pina'
|
11
18
|
|
12
19
|
TEST_ASSOCIATIONS =<<-EOF
|
13
20
|
#: :sep=" "#:namespace=Hsa/jan2013
|
@@ -51,7 +58,6 @@ class TestAssociations < Test::Unit::TestCase
|
|
51
58
|
end
|
52
59
|
|
53
60
|
def test_target_open
|
54
|
-
require 'rbbt/sources/pina'
|
55
61
|
|
56
62
|
database = Association.open(Pina.protein_protein,{
|
57
63
|
:undirected => false,
|
@@ -2,20 +2,25 @@ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '../..', 'lib'))
|
|
2
2
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
3
3
|
require 'test/unit'
|
4
4
|
require 'rbbt/knowledge_base'
|
5
|
+
|
6
|
+
gem 'rbbt-sources'
|
7
|
+
gem 'rbbt-phgx'
|
8
|
+
gem 'rest-client'
|
9
|
+
|
5
10
|
require 'rbbt/sources/pina'
|
11
|
+
require 'rbbt/workflow'
|
12
|
+
Workflow.require_workflow "Genomics"
|
13
|
+
require 'genomics_kb'
|
6
14
|
|
7
15
|
class TestKnowledgeBase < Test::Unit::TestCase
|
8
16
|
def setup
|
9
|
-
require 'rbbt/workflow'
|
10
|
-
Workflow.require_workflow "Genomics"
|
11
|
-
require 'genomics_kb'
|
12
|
-
|
13
|
-
|
14
17
|
KnowledgeBase.knowledge_base_dir = Rbbt.tmp.knowledge_base_test.find
|
15
18
|
@kb = Genomics.knowledge_base
|
16
19
|
end
|
17
20
|
|
18
21
|
def test_register
|
22
|
+
require 'rbbt/sources/pina'
|
23
|
+
|
19
24
|
TmpFile.with_file do |dir|
|
20
25
|
kb = KnowledgeBase.new dir
|
21
26
|
|
data/test/rbbt/test_tsv.rb
CHANGED
@@ -173,7 +173,6 @@ row1 1
|
|
173
173
|
row2 4
|
174
174
|
EOF
|
175
175
|
|
176
|
-
require 'rbbt/sources/organism'
|
177
176
|
TmpFile.with_file(content) do |filename|
|
178
177
|
tsv = TSV.open(filename, :sep => /\s+/, :cast => :to_i, :type => :single, :fields => "Value")
|
179
178
|
assert_equal 1, tsv["row1"]
|
@@ -192,7 +191,6 @@ row1 1 2
|
|
192
191
|
row2 4
|
193
192
|
EOF
|
194
193
|
|
195
|
-
require 'rbbt/sources/organism'
|
196
194
|
TmpFile.with_file(content) do |filename|
|
197
195
|
tsv = TSV.open(filename, :sep => /\s+/, :type => :single, :key_field => "Value", :fields => ["Id"])
|
198
196
|
assert_equal "row1", tsv["1"]
|
@@ -217,9 +217,9 @@ row2 E
|
|
217
217
|
tsv1 = Rbbt.tmp.test.test1.data.tsv :double, :sep => /\s+/
|
218
218
|
tsv2 = Rbbt.tmp.test.test2.data.tsv :double, :sep => /\s+/
|
219
219
|
|
220
|
-
tsv2.identifiers = Rbbt.tmp.test.test2.identifiers.produce.find
|
220
|
+
tsv2.identifiers = Rbbt.tmp.test.test2.identifiers.produce.find #.to_s
|
221
221
|
|
222
|
-
tsv1.attach tsv2, :fields => ["OtherID"]
|
222
|
+
tsv1.attach tsv2, :fields => ["OtherID"] #, :persist_input => true
|
223
223
|
|
224
224
|
assert_equal tsv1.fields, %w(ValueA ValueB OtherID)
|
225
225
|
assert_equal %w(Id1 Id2), tsv1["row1"]["OtherID"]
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require File.join(File.expand_path(File.dirname(__FILE__)), '../..', 'test_helper.rb')
|
2
|
+
require 'rbbt/tsv'
|
2
3
|
require 'rbbt/tsv/filter'
|
3
4
|
|
4
5
|
class TestTSVFilters < Test::Unit::TestCase
|
@@ -129,9 +130,10 @@ row2 A B
|
|
129
130
|
tsv.filter
|
130
131
|
tsv.add_filter "field:ValueA", ["A"], Rbbt.tmp.test.Filter.fieldValueA.find(:user)
|
131
132
|
|
133
|
+
puts tsv
|
132
134
|
elem = []
|
133
135
|
tsv.through do |k,v| elem << k end
|
134
|
-
assert_equal
|
136
|
+
assert_equal 1, elem.size
|
135
137
|
end
|
136
138
|
end
|
137
139
|
|
data/test/rbbt/tsv/test_index.rb
CHANGED
@@ -112,13 +112,13 @@ row3 A a|B Id4
|
|
112
112
|
def test_index_static
|
113
113
|
content =<<-EOF
|
114
114
|
#Id ValueA ValueB OtherID
|
115
|
-
row1 a|aa|aaa b|
|
116
|
-
row2 A
|
117
|
-
row3
|
115
|
+
row1 a|aa|aaa b|B Id1
|
116
|
+
row2 A bb Id3
|
117
|
+
row3 AA bb Id4
|
118
118
|
EOF
|
119
119
|
|
120
120
|
TmpFile.with_file(content) do |filename|
|
121
|
-
index = TSV.index(filename, :target => "OtherID", :data_sep => /\s+/, :order => true, :persist =>
|
121
|
+
index = TSV.index(filename, :target => "OtherID", :data_sep => /\s+/, :order => true, :persist => true, :data_persist => true)
|
122
122
|
assert_equal "Id1", index['a']
|
123
123
|
assert_equal "Id3", index['A']
|
124
124
|
assert_equal "OtherID", index.fields.first
|
data/test/test_helper.rb
CHANGED
@@ -1,11 +1,12 @@
|
|
1
1
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
2
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
3
|
-
|
3
|
+
|
4
4
|
require 'test/unit'
|
5
|
-
require 'rbbt/util/log'
|
6
|
-
require 'rbbt/util/tmpfile'
|
7
|
-
require 'rbbt/resource/path'
|
8
5
|
require 'fileutils'
|
6
|
+
require 'rubygems'
|
7
|
+
|
8
|
+
require 'rbbt'
|
9
|
+
require 'rbbt/resource/path'
|
9
10
|
|
10
11
|
class Test::Unit::TestCase
|
11
12
|
include FileUtils
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
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.48
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Miguel Vazquez
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-11-
|
11
|
+
date: 2013-11-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -232,7 +232,6 @@ files:
|
|
232
232
|
- test/rbbt/workflow/test_step.rb
|
233
233
|
- test/rbbt/workflow/test_task.rb
|
234
234
|
- test/test_helper.rb
|
235
|
-
- test/test_rbbt.rb
|
236
235
|
homepage: http://github.com/mikisvaz/rbbt-util
|
237
236
|
licenses:
|
238
237
|
- MIT
|
@@ -291,5 +290,4 @@ test_files:
|
|
291
290
|
- test/rbbt/util/test_chain_methods.rb
|
292
291
|
- test/rbbt/util/test_R.rb
|
293
292
|
- test/rbbt/util/test_simpleDSL.rb
|
294
|
-
- test/test_rbbt.rb
|
295
293
|
- test/test_helper.rb
|