rbbt-util 5.27.1 → 5.27.6

Sign up to get free protection for your applications and to get access to all the features.
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