rbbt-util 5.27.1 → 5.27.6

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.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/lib/rbbt/annotations/util.rb +1 -2
  3. data/lib/rbbt/entity.rb +8 -5
  4. data/lib/rbbt/fix_width_table.rb +6 -5
  5. data/lib/rbbt/knowledge_base/entity.rb +3 -2
  6. data/lib/rbbt/knowledge_base/query.rb +9 -0
  7. data/lib/rbbt/persist.rb +2 -3
  8. data/lib/rbbt/persist/tsv.rb +5 -5
  9. data/lib/rbbt/persist/tsv/adapter.rb +136 -43
  10. data/lib/rbbt/persist/tsv/tokyocabinet.rb +5 -3
  11. data/lib/rbbt/resource.rb +8 -5
  12. data/lib/rbbt/resource/path.rb +3 -3
  13. data/lib/rbbt/tsv/accessor.rb +6 -6
  14. data/lib/rbbt/tsv/change_id.rb +3 -1
  15. data/lib/rbbt/tsv/parallel/traverse.rb +1 -1
  16. data/lib/rbbt/tsv/util.rb +1 -0
  17. data/lib/rbbt/util/misc/exceptions.rb +8 -0
  18. data/lib/rbbt/workflow.rb +1 -1
  19. data/lib/rbbt/workflow/accessor.rb +3 -1
  20. data/lib/rbbt/workflow/definition.rb +6 -0
  21. data/lib/rbbt/workflow/remote_workflow/driver/rest.rb +9 -3
  22. data/lib/rbbt/workflow/remote_workflow/remote_step.rb +9 -3
  23. data/lib/rbbt/workflow/remote_workflow/remote_step/rest.rb +7 -1
  24. data/lib/rbbt/workflow/step/accessor.rb +4 -0
  25. data/lib/rbbt/workflow/step/dependencies.rb +10 -6
  26. data/lib/rbbt/workflow/step/run.rb +2 -2
  27. data/lib/rbbt/workflow/task.rb +1 -1
  28. data/lib/rbbt/workflow/usage.rb +25 -8
  29. data/lib/rbbt/workflow/util/archive.rb +30 -4
  30. data/share/install/software/lib/install_helpers +9 -3
  31. data/share/rbbt_commands/migrate_job +3 -1
  32. data/share/rbbt_commands/system/status +3 -2
  33. data/share/rbbt_commands/tsv/get +33 -7
  34. data/share/rbbt_commands/workflow/monitor +3 -3
  35. data/share/rbbt_commands/workflow/task +1 -1
  36. data/test/rbbt/knowledge_base/test_query.rb +1 -1
  37. data/test/rbbt/test_entity.rb +14 -5
  38. data/test/rbbt/test_knowledge_base.rb +3 -3
  39. data/test/rbbt/workflow/step/test_dependencies.rb +40 -8
  40. data/test/rbbt/workflow/test_remote_workflow.rb +13 -1
  41. metadata +2 -2
@@ -71,7 +71,7 @@ get_pkg(){
71
71
  local url="$2"
72
72
 
73
73
  if [ ! -f "$OPT_SRC_DIR/$name.pkg" ]; then
74
- wget "$url" -O "$OPT_SRC_DIR/$name.pkg" || wget "$url" -O "$OPT_SRC_DIR/$name.pkg" --no-check-certificate
74
+ wget "$url" -O "$OPT_SRC_DIR/$name.pkg" || wget "$url" -O "$OPT_SRC_DIR/$name.pkg" --no-check-certificate || (rm -f "$OPT_SRC_DIR/$name.pkg"; echo "Error downloading"; exit -1)
75
75
  fi
76
76
  }
77
77
 
@@ -85,7 +85,7 @@ uncompress_pkg(){
85
85
  mkdir -p "$OPT_BUILD_DIR"
86
86
  cd "$OPT_BUILD_DIR"
87
87
 
88
- (tar xvfz $pkg || tar xvfJ $pkg || tar xvfj $pkg || unzip $pkg || echo "Error decompressing") 2> /dev/null
88
+ (tar xvfz $pkg || tar xvfJ $pkg || tar xvfj $pkg || unzip $pkg || (echo "Error decompressing" & cd & rmdir "$OPT_BUILD_DIR" & exit -1 ) ) 2> /dev/null
89
89
 
90
90
  cd "$old_pwd"
91
91
  }
@@ -203,8 +203,12 @@ prepare_make(){
203
203
  local old_pwd="`expand_path $(pwd)`"
204
204
  cd "`build_dir`"
205
205
 
206
+ [ -f bootstrap ] && (./bootstrap || exit -1)
207
+
206
208
  [ -d src -a ! -e CMakeLists.txt -a ! -e Makefile -a ! -e configure ] && cd src
207
209
 
210
+ [ -f bootstrap ] && (./bootstrap || exit -1)
211
+
208
212
  if [ -f config/m4 ]; then
209
213
  libtoolize --force
210
214
  aclocal
@@ -273,6 +277,8 @@ build_make(){
273
277
  setup "$name"
274
278
  clean_build
275
279
  fi
280
+
281
+ cd "$old_pwd"
276
282
  }
277
283
 
278
284
  buid_cmake(){
@@ -487,7 +493,7 @@ install_jar(){
487
493
  local url="$2"
488
494
 
489
495
  [ -d "$OPT_DIR/$name/" ] || mkdir -p "$OPT_DIR/$name/"
490
- wget "$url" -O "$OPT_DIR/$name/$name.jar" --no-check-certificate
496
+ wget "$url" -O "$OPT_DIR/jars/$name.jar" || wget "$url" -O "$OPT_DIR/jars/$name.jar" --no-check-certificate || (rm "$OPT_DIR/jars/$name.jar"; exit -1)
491
497
  link "$OPT_DIR/$name/$name.jar" "$OPT_JAR_DIR/$name.jar"
492
498
  }
493
499
 
@@ -3,7 +3,7 @@
3
3
  require 'rbbt-util'
4
4
  require 'rbbt/util/simpleopt'
5
5
  require 'rbbt/workflow'
6
- require 'rbbt/workflow/remote/ssh/get'
6
+ require 'rbbt/workflow/remote_workflow'
7
7
 
8
8
  $0 = "rbbt #{$previous_commands*""} #{ File.basename(__FILE__) }" if $previous_commands
9
9
 
@@ -34,4 +34,6 @@ end
34
34
 
35
35
  path, search_path, _sep, *other = ARGV
36
36
 
37
+ search_path = 'user' if search_path.nil?
38
+
37
39
  Step.migrate(path, search_path, options)
@@ -187,7 +187,7 @@ workflows.sort.each do |workflow,tasks|
187
187
  if info_fields and info_fields.any?
188
188
  info = begin
189
189
  Open.open(i[:info_file]) do |f|
190
- Step::INFO_SERIALIAZER.load(f)
190
+ Step::INFO_SERIALIZER.load(f)
191
191
  end
192
192
  rescue
193
193
  {:status => :noinfo}
@@ -198,9 +198,10 @@ workflows.sort.each do |workflow,tasks|
198
198
  else
199
199
  info = begin
200
200
  Open.open(i[:info_file]) do |f|
201
- Step::INFO_SERIALIAZER.load(f)
201
+ Step::INFO_SERIALIZER.load(f)
202
202
  end
203
203
  rescue
204
+ Log.exception $!
204
205
  {:status => :noinfo}
205
206
  end
206
207
  IndiferentHash.setup(info)
@@ -47,6 +47,28 @@ fields = options[:fields]
47
47
  key_field = options[:key_field]
48
48
  fields = fields.split(/[,|]/, -1) unless fields.nil?
49
49
 
50
+ if TSV === tsv
51
+ v = tsv[key]
52
+ fields ||= tsv.fields
53
+ puts Log.color(:blue, "Key: #{ key }")
54
+ if fields
55
+ if fields.length == 1
56
+ if options[:lines]
57
+ puts (Array === v ? v.flatten*"\n" : v.to_s )
58
+ else
59
+ puts (Array === v ? v.flatten*"\t" : v.to_s )
60
+ end
61
+ else
62
+ fields.zip(v).each do |field,v|
63
+ puts "#{Log.color :magenta, field+":"} #{v}"
64
+ end
65
+ end
66
+ else
67
+ puts "#{Log.color :magenta, "value:"} #{v}"
68
+ end
69
+ exit
70
+ end
71
+
50
72
  parser = TSV::Parser.new tsv, :key_field => key_field, :fields => fields, :type => options[:type], :header_hash => options[:header_hash], :sep => options[:sep]
51
73
  fields ||= parser.fields
52
74
 
@@ -54,15 +76,19 @@ TSV.traverse(parser) do |k,v|
54
76
  next unless k.include? key
55
77
  k = k.first if Array === k
56
78
  puts Log.color(:blue, "Key: #{ k }")
57
- if fields.length == 1
58
- if options[:lines]
59
- puts (Array === v ? v.flatten*"\n" : v.to_s )
79
+ if fields
80
+ if fields.length == 1
81
+ if options[:lines]
82
+ puts (Array === v ? v.flatten*"\n" : v.to_s )
83
+ else
84
+ puts (Array === v ? v.flatten*"\t" : v.to_s )
85
+ end
60
86
  else
61
- puts (Array === v ? v.flatten*"\t" : v.to_s )
87
+ fields.zip(v).each do |field,v|
88
+ puts "#{Log.color :magenta, field+":"} #{v}"
89
+ end
62
90
  end
63
91
  else
64
- fields.zip(v).each do |field,v|
65
- puts "#{Log.color :magenta, field+":"} #{v}"
66
- end
92
+ puts "#{Log.color :magenta, "value:"} #{Misc.fingerprint v}"
67
93
  end
68
94
  end
@@ -41,7 +41,7 @@ def list_jobs(options)
41
41
  clean_file = file.sub('.info','')
42
42
  begin
43
43
  next if File.exist? clean_file and $quick
44
- info = Step::INFO_SERIALIAZER.load(Open.read(file, :mode => 'rb'))
44
+ info = Step::INFO_SERIALIZER.load(Open.read(file, :mode => 'rb'))
45
45
  next if (File.exist?(clean_file) or info[:status] == :done) and (info[:children_pids].nil? or info[:children_done] or info[:children_pids].select{|pid| Misc.pid_exists? pid}.empty?)
46
46
  rescue Exception
47
47
  puts "Error parsing info file: #{ file }"
@@ -86,7 +86,7 @@ def clean_jobs(options)
86
86
  info = nil
87
87
  next if File.exist? clean_file
88
88
  begin
89
- info = Step::INFO_SERIALIAZER.load(Open.read(file, :mode => 'rb'))
89
+ info = Step::INFO_SERIALIZER.load(Open.read(file, :mode => 'rb'))
90
90
  rescue Exception
91
91
  Log.debug "Error process #{ file }"
92
92
  remove_job file if options[:errors]
@@ -117,7 +117,7 @@ begin
117
117
  end
118
118
  else
119
119
  if options[:file]
120
- info = Step::INFO_SERIALIAZER.load(Open.read(options[:file], :mode => 'rb'))
120
+ info = Step::INFO_SERIALIZER.load(Open.read(options[:file], :mode => 'rb'))
121
121
  print_job options[:file], info
122
122
  else
123
123
  list_jobs options
@@ -416,7 +416,7 @@ begin
416
416
 
417
417
  job.fork
418
418
  else
419
- job.produce
419
+ job.run(:stream)
420
420
  res = job
421
421
  end
422
422
 
@@ -24,7 +24,7 @@ TP53 NFKB1|GLI1 activation|activation true|true
24
24
 
25
25
  EFFECT_TSV = TSV.open EFFECT, EFFECT_OPTIONS.dup
26
26
 
27
- KNOWLEDGE_BASE = KnowledgeBase.new '/tmp/kb.foo2', "Hsa"
27
+ KNOWLEDGE_BASE = KnowledgeBase.new Rbbt.tmp.test.kb_foo2, "Hsa"
28
28
  KNOWLEDGE_BASE.format = {"Gene" => "Ensembl Gene ID"}
29
29
 
30
30
  KNOWLEDGE_BASE.register :effects, EFFECT_TSV, EFFECT_OPTIONS.dup
@@ -71,7 +71,9 @@ module ReversableString
71
71
  }
72
72
  end
73
73
  end
74
+
74
75
  persist :multiple_annotation_list, :annotations, :dir => TmpFile.tmp_file
76
+ #persist :multiple_annotation_list, :annotations, :dir => Rbbt.tmp.test.annots
75
77
  end
76
78
 
77
79
  class TestEntity < Test::Unit::TestCase
@@ -195,33 +197,40 @@ class TestEntity < Test::Unit::TestCase
195
197
  string3 = 'AAABBBCCC_3'
196
198
  string4 = 'AAABBBCCC_4'
197
199
 
200
+
201
+ $processed_multiple = []
202
+ Log.severity = 0
203
+
198
204
  array = ReversableString.setup([string1, string2])
199
205
  assert_equal [string1, string2].collect{|s| s.chars}, array.multiple_annotation_list
200
-
201
206
  assert_equal string1.length, array[0].multiple_annotation_list.length
202
207
  assert_equal $processed_multiple, [string1, string2]
203
208
 
204
209
  array = ReversableString.setup([string2, string3])
205
- assert_equal string2.length, array[0].multiple_annotation_list.length
210
+ assert_equal [string2, string3].collect{|s| s.chars}, array.multiple_annotation_list
211
+ assert_equal string3, array.multiple_annotation_list.last * ""
206
212
  assert_equal $processed_multiple, [string1, string2, string3]
207
213
 
214
+ $processed_multiple = []
208
215
  array = ReversableString.setup([string2, string3])
216
+ assert_equal [string2, string3].collect{|s| s.chars}, array.multiple_annotation_list
209
217
  assert_equal string2.length, array[0].multiple_annotation_list.length
210
- assert_equal $processed_multiple, [string1, string2, string3]
218
+ assert_equal $processed_multiple, []
211
219
 
212
220
  $processed_multiple = []
213
221
  array = ReversableString.setup([string2, string3, string4])
214
- assert_equal string2.length, array[0].multiple_annotation_list.length
222
+ assert_equal string2.length, array.multiple_annotation_list[0].length
215
223
  assert_equal $processed_multiple, [string4]
216
224
 
217
225
  string1 = 'aaabbbccc'
218
226
  string2 = 'AAABBBCCC'
219
227
  string3 = 'AAABBBCCC_3'
220
228
  string4 = 'AAABBBCCC_4'
229
+
221
230
  $processed_multiple = []
222
231
  array = ReversableString.setup([string2, string3, string4])
223
232
  assert_equal string2.length, array[0].multiple_annotation_list.length
224
- assert_equal $processed_multiple, [string4]
233
+ assert_equal $processed_multiple, []
225
234
 
226
235
  end
227
236
 
@@ -92,9 +92,9 @@ class TestKnowledgeBase < Test::Unit::TestCase
92
92
  assert downstream.length < downstream.follow(kb, :tfacts,false).flatten.length
93
93
 
94
94
  Misc.benchmark(50) do
95
- downstream.follow(kb, :tfacts,false)
96
- downstream.backtrack(kb, :tfacts,false)
97
- downstream.expand(kb, :tfacts,false)
95
+ downstream.follow(kb, :tfacts, false)
96
+ downstream.backtrack(kb, :tfacts, false)
97
+ downstream.expand(kb, :tfacts, false)
98
98
  end
99
99
 
100
100
  Misc.benchmark(50) do
@@ -40,8 +40,8 @@ module DepWorkflow
40
40
  end
41
41
  end
42
42
 
43
- dep :task2
44
43
  dep :task5
44
+ dep :task2
45
45
  task :task6 => :array do
46
46
  s1 = TSV.get_stream step(:task2)
47
47
  s2 = TSV.get_stream step(:task5)
@@ -81,6 +81,26 @@ module ComputeWorkflow
81
81
 
82
82
  end
83
83
 
84
+ module ResumeWorkflow
85
+ extend Workflow
86
+
87
+ resumable
88
+ task :resume => :string do
89
+ if file('foo').exists?
90
+ 'done'
91
+ else
92
+ Open.mkdir files_dir
93
+ Open.touch(file('foo'))
94
+ raise
95
+ end
96
+ end
97
+
98
+ dep :resume
99
+ task :reverse => :string do
100
+ step(:resume).load.reverse
101
+ end
102
+ end
103
+
84
104
  class TestWorkflowDependency < Test::Unit::TestCase
85
105
  def test_task1
86
106
  size = 10000
@@ -152,13 +172,14 @@ class TestWorkflowDependency < Test::Unit::TestCase
152
172
  Log.severity = 0
153
173
  TmpFile.with_file(content) do |input_file|
154
174
  begin
155
- job = DepWorkflow.job(:task6, "TEST", :input_file => input_file)
156
- job.run(:stream)
157
- io = TSV.get_stream job
158
- while line = io.gets
159
- last_line = line.strip
160
- end
161
- io.join
175
+ job = DepWorkflow.job(:task6, "TEST", :input_file => input_file)
176
+ job.recursive_clean
177
+ job.run(:stream)
178
+ io = TSV.get_stream job
179
+ while line = io.gets
180
+ last_line = line.strip
181
+ end
182
+ io.join
162
183
  rescue Exception
163
184
  job.abort
164
185
  raise $!
@@ -204,5 +225,16 @@ class TestWorkflowDependency < Test::Unit::TestCase
204
225
  assert_equal "Line #{size}\tTask1\tTask2", last_line
205
226
  end
206
227
  end
228
+
229
+ def test_resume
230
+ Log.severity = 0
231
+ job = ResumeWorkflow.job(:reverse)
232
+ job.recursive_clean
233
+ assert_raise do
234
+ job.run
235
+ end
236
+ assert job.dependencies.first.file('foo').exists?
237
+ assert_equal 'done'.reverse, job.run
238
+ end
207
239
  end
208
240
 
@@ -61,6 +61,18 @@ class TestRemoteWorkflow < Test::Unit::TestCase
61
61
  def test_rest
62
62
  Log.with_severity 0 do
63
63
 
64
+ remote_workflow_server(TestWFRest) do |client|
65
+ job = client.job(:hi, nil, {})
66
+ job.clean
67
+ job = client.job(:hi, nil, {})
68
+ assert ! job.done?
69
+ job.run
70
+ job.produce
71
+ job = client.job(:hi, nil, {})
72
+ assert job.done?
73
+ sleep 1
74
+ end
75
+
64
76
  remote_workflow_server(TestWFRest) do |client|
65
77
  assert_equal "Hello World", client.job(:hi, nil, {}).run.chomp
66
78
  assert_equal "Hello Miguel", client.job(:hi, nil, {:name => :Miguel}).run.chomp
@@ -78,7 +90,7 @@ class TestRemoteWorkflow < Test::Unit::TestCase
78
90
 
79
91
  def _test_ssh
80
92
  Log.severity = 0
81
- client = RemoteWorkflow.new "ssh://turbo:Translation", "Translation"
93
+ client = RemoteWorkflow.new "ssh://#{ENV["HOSTNAME"]}:Translation", "Translation"
82
94
  job = client.job("translate", "SSH-TEST-1", :genes => ["TP53","KRAS"])
83
95
  assert_equal 2, job.run.select{|l| l =~ /ENSG/}.length
84
96
  end
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.27.1
4
+ version: 5.27.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Miguel Vazquez
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-04-19 00:00:00.000000000 Z
11
+ date: 2020-06-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake