rbbt-util 5.26.87 → 5.26.88

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 658585f6a78ccc8f2a4579b1b512a9470030edbd1e724addb2b5f1ef3b71c218
4
- data.tar.gz: cb64eb69d269a924b585745f6fa4be0aad88c4ed62a9510e9a85ddc3f243caf3
3
+ metadata.gz: 9ea3940c476d54994086edb928a7f3bd8e0f9106cf702fc5383c10dbf43df2f8
4
+ data.tar.gz: 842453f1c75c7d67307a9d7196273a233cc00d4a4adb27d4cb62d8c41111f748
5
5
  SHA512:
6
- metadata.gz: 58458df66b0881d89894db3c526dd21b5490de6e0e55c403ef44c09827b36c3da90509d3158d8cc5438a1d3f235a6f0650eb470d0b79c3919e216879341d87aa
7
- data.tar.gz: c5e2964e08101856061dd68103b2a970518d1542c163cb17d2c4f0bbe40b92a3cf225ec0859d2b97d2138d6cdf08ada9f69020555c11acafbe6bcd2bbcdb809b
6
+ metadata.gz: 5d679b8414ef4ed9463e2a214edf51375f417c8f6c5b5b576619efda32fd100f9d3fc623164b3e685b6bee31136a1219cf78a4d0955f5c3661c305598addeab8
7
+ data.tar.gz: 88e3ad03874491db2536aad2c64269fb165a92aa944101c98d59013b91eb2f05c47bf0680931f849a2a1de4422fe7bde7b7c261e915604141b8c31ee5026fbeb
data/lib/rbbt/hpc.rb CHANGED
@@ -473,11 +473,21 @@ EOF
473
473
  end
474
474
  end
475
475
  end
476
- end
477
476
 
478
- if __FILE__ == $0
479
- Log.severity = 0
480
- iii Marenostrum::SLURM.run('ls', nil, nil, :qos => "debug", :user => 'bsc26892') if __FILE__ == $0
481
- end
477
+ def relay(job, options={})
478
+ options = Misc.add_defaults options, :target => 'mn1', :search_path => 'user'
479
+ done_deps = job.dependencies.select do |dep|
480
+ dep.done?
481
+ end
482
+
483
+ error_deps = job.dependencies.select do |dep|
484
+ dep.error? && ! dep.recoverable_error?
485
+ end
482
486
 
487
+ (done_deps + error_deps).each do |dep|
488
+ Step.migrate(dep.path, options[:search_path], options)
489
+ end
490
+
491
+ end
492
+ end
483
493
 
@@ -73,8 +73,7 @@ module Workflow
73
73
  set_info :result_type, dep.info[:result_type]
74
74
  forget = config :forget_dep_tasks, :forget_dep_tasks, :default => FORGET_DEP_TASKS
75
75
  if forget
76
- self.set_info :archived_info, archived_info
77
- self.set_info :archived_dependencies, info[:dependencies]
76
+ self.archive
78
77
  self.dependencies = self.dependencies - [dep]
79
78
  Open.rm_rf self.files_dir if Open.exist? self.files_dir
80
79
  FileUtils.cp_r dep.files_dir, self.files_dir if Open.exist? dep.files_dir
@@ -1,20 +1,6 @@
1
- module WorkflowSSHClient
2
- def self.__prepare_inputs_for_restclient(inputs)
3
- inputs.each do |k,v|
4
- if v.respond_to? :path and not v.respond_to? :original_filename
5
- class << v
6
- def original_filename
7
- File.expand_path(path)
8
- end
9
- end
10
- end
11
-
12
- if Array === v and v.empty?
13
- inputs[k] = "EMPTY_ARRAY"
14
- end
15
- end
16
- end
1
+ require 'rbbt/workflow/remote/ssh/driver'
17
2
 
3
+ module WorkflowSSHClient
18
4
  def workflow_description
19
5
  WorkflowSSHClient.get_raw(File.join(url, 'description'))
20
6
  end
@@ -26,20 +12,20 @@ module WorkflowSSHClient
26
12
 
27
13
  def task_info(task)
28
14
  @task_info ||= IndiferentHash.setup({})
29
- @task_info[task]
30
15
 
31
16
  if @task_info[task].nil?
32
- task_info = WorkflowSSHClient.get_json(File.join(url, task.to_s, 'info'))
17
+ task_info = WorkflowSSHClient.get_json(File.join(@base_url, task.to_s))
33
18
  task_info = WorkflowSSHClient.fix_hash(task_info)
34
19
 
35
- task_info[:result_type] = task_info[:result_type].to_sym
36
- task_info[:export] = task_info[:export].to_sym
20
+ task_info[:result_type] = task_info[:result_type].to_sym if task_info[:result_type]
21
+ task_info[:export] = task_info[:export].to_sym if task_info[:export]
37
22
  task_info[:input_types] = WorkflowSSHClient.fix_hash(task_info[:input_types], true)
38
23
  task_info[:inputs] = task_info[:inputs].collect{|input| input.to_sym }
39
24
 
40
- @task_info[task] = task_info
25
+ @task_info[task] = IndiferentHash.setup(task_info)
41
26
  end
42
- @task_info[task]
27
+
28
+ IndiferentHash.setup(@task_info[task])
43
29
  end
44
30
 
45
31
  def tasks
@@ -72,7 +58,4 @@ module WorkflowSSHClient
72
58
  @exec_exports = @stream_exports = @synchronous_exports = []
73
59
  @asynchronous_exports = @task_info.keys
74
60
  end
75
-
76
- def self.execute_job(base_url, task, task_params, cache_type)
77
- end
78
61
  end
@@ -0,0 +1,147 @@
1
+ module SSHDriver
2
+ def self.run(server, script)
3
+ Log.debug "Run ssh script in #{server}:\n#{script}"
4
+ CMD.cmd("ssh '#{server}' 'shopt -s expand_aliases; bash -ic \"ruby\"' ", :in => script, :log => true).read
5
+ end
6
+
7
+ #def self.run_log(server, script)
8
+ # Log.debug "Run and monitor ssh script in #{server}:\n#{script}"
9
+ # CMD.cmd("ssh '#{server}' 'shopt -s expand_aliases; bash -ic \"ruby\"' ", :in => script, :log => true)
10
+ #end
11
+
12
+ def self.parse_url(url)
13
+ m = url.match(/ssh:\/\/([^:]+):(.*)/)
14
+ server = m.captures[0]
15
+ path = m.captures[1]
16
+ [server, path]
17
+ end
18
+
19
+ def self.path_script(path)
20
+
21
+ workflow, task, job, *rest = path.split("/")
22
+
23
+ script =<<-EOF
24
+ require 'rbbt/workflow'
25
+ wf = Workflow.require_workflow "#{workflow}"
26
+ EOF
27
+
28
+ case task
29
+ when nil
30
+ script +=<<-EOF
31
+ task_info = {}
32
+ wf.tasks.keys.each do |task|
33
+ task_info[task] = wf.task_info(task)
34
+ end
35
+ res = task_info
36
+ EOF
37
+ when 'documentation'
38
+ script +=<<-EOF
39
+ res = documentation = wf.documentation
40
+ EOF
41
+ else
42
+ if job.nil?
43
+ script +=<<-EOF
44
+ task = '#{task}'
45
+ res = task_info = wf.task_info(task)
46
+ EOF
47
+ else
48
+ case rest.first
49
+ when nil
50
+ script +=<<-EOF
51
+ task = '#{task}'
52
+ jobname = '#{job}'
53
+ res = job = wf.fast_load_id(File.join(task, jobname))
54
+ EOF
55
+ when "info"
56
+ script +=<<-EOF
57
+ task = '#{task}'
58
+ jobname = '#{job}'
59
+ job = wf.fast_load_id(File.join(task, jobname))
60
+ res = job_info = job.info
61
+ EOF
62
+ else
63
+ raise "Unkown path: #{[path, rest].inspect}"
64
+ end
65
+ end
66
+ end
67
+ end
68
+
69
+ def self.job_script(inputs_id, jobname = nil)
70
+ script =<<-EOF
71
+ jobname = #{jobname.nil? ? 'nil' : "'#{jobname}'"}
72
+ path = File.join(ENV["HOME"], '.rbbt/tmp/tmp-ssh_job_inputs/#{inputs_id}')
73
+ job_inputs = Workflow.load_inputs(path, task_info[:inputs], task_info[:input_types])
74
+ job = wf.job(task, jobname, job_inputs)
75
+ EOF
76
+ script
77
+ end
78
+
79
+ def self.get_json(url, params)
80
+ server, path = parse_url(url)
81
+ script = path_script(path)
82
+
83
+ script +=<<-EOF
84
+ STDOUT.write res.to_json
85
+ EOF
86
+
87
+ JSON.parse(self.run(server, script))
88
+ end
89
+
90
+ def self.get_raw(url, params)
91
+ server, path = parse_url(url)
92
+ script = path_script(path)
93
+
94
+ script +=<<-EOF
95
+ STDOUT.write res
96
+ EOF
97
+
98
+ self.run(server, script)
99
+ end
100
+
101
+ def self.post_job(url, inputs_id, jobname = nil)
102
+ server, path = parse_url(url)
103
+
104
+ script = path_script(path)
105
+ script += job_script(inputs_id, jobname)
106
+ script +=<<-EOF
107
+ job.init_info
108
+ STDOUT.write job.name
109
+ EOF
110
+ @name = self.run(server, script)
111
+ end
112
+
113
+ def self.run_job(url, input_id, jobname = nil)
114
+ server, path = parse_url(url)
115
+
116
+ script = path_script(path)
117
+ script += job_script(input_id, jobname)
118
+ script +=<<-EOF
119
+ job.produce
120
+ STDOUT.write job.path
121
+ EOF
122
+ self.run(server, script)
123
+ end
124
+
125
+ def self.run_slurm_job(url, input_id, jobname = nil)
126
+ server, path = parse_url(url)
127
+
128
+ script = path_script(path)
129
+ script += job_script(input_id, jobname)
130
+ script +=<<-EOF
131
+ job.produce
132
+ STDOUT.write job.path
133
+ EOF
134
+ self.run(server, script)
135
+ end
136
+
137
+ def self.clean(url, input_id, jobname = nil)
138
+ server, path = parse_url(url)
139
+
140
+ script = path_script(path)
141
+ script +=<<-EOF
142
+ job.clean
143
+ EOF
144
+ self.run(server, script)
145
+ end
146
+
147
+ end
@@ -1,150 +1,3 @@
1
- module SSHClient
2
- def self.run(server, script)
3
- Log.debug "Run ssh script in #{server}:\n#{script}"
4
- CMD.cmd("ssh '#{server}' ruby ", :in => script).read.strip
5
- end
6
-
7
- def self.run_log(server, script)
8
- Log.debug "Run and monitor ssh script in #{server}:\n#{script}"
9
- CMD.cmd_log("ssh '#{server}' ruby ", :in => script)
10
- end
11
-
12
- def self.parse_url(url)
13
- m = url.match(/ssh:\/\/([^:]+):(.*)/)
14
- server = m.captures[0]
15
- path = m.captures[1]
16
- [server, path]
17
- end
18
-
19
- def self.path_script(path)
20
-
21
- workflow, task, job, *rest = path.split("/")
22
-
23
- script =<<-EOF
24
- require 'rbbt/workflow'
25
- wf = Workflow.require_workflow "#{workflow}"
26
- EOF
27
- case task
28
- when nil
29
- script +=<<-EOF
30
- task_info = {}
31
- wf.tasks.keys.each do |task|
32
- task_info[task] = wf.task_info(task)
33
- end
34
- res = task_info
35
- EOF
36
- when 'documentation'
37
- script +=<<-EOF
38
- res = documentation = wf.documentation
39
- EOF
40
- else
41
- if job.nil?
42
- script +=<<-EOF
43
- task = '#{task}'
44
- res = task_info = wf.task_info(task)
45
- EOF
46
- else
47
- case rest.first
48
- when nil
49
- script +=<<-EOF
50
- task = '#{task}'
51
- jobname = '#{job}'
52
- res = job = wf.fast_load_id(File.join(task, jobname))
53
- EOF
54
- when "info"
55
- script +=<<-EOF
56
- task = '#{task}'
57
- jobname = '#{job}'
58
- job = wf.fast_load_id(File.join(task, jobname))
59
- res = job_info = job.info
60
- EOF
61
- else
62
- raise "Unkown path: #{[path, rest].inspect}"
63
- end
64
- end
65
- end
66
- end
67
-
68
- def self.get_json(url, params)
69
- server, path = parse_url(url)
70
- script = path_script(path)
71
-
72
- script +=<<-EOF
73
- puts res.to_json
74
- EOF
75
-
76
- JSON.parse(self.run(server, script))
77
- end
78
-
79
- def self.get_raw(url, params)
80
- server, path = parse_url(url)
81
- script = path_script(path)
82
-
83
- script +=<<-EOF
84
- puts res
85
- EOF
86
-
87
- self.run(server, script)
88
- end
89
-
90
- def self.post_job(url, inputs, input_types, jobname = nil)
91
- server, path = parse_url(url)
92
- script = path_script(path)
93
-
94
- id = "inputs-" << rand(100000).to_s
95
- CMD.cmd("ssh '#{server}' mkdir -p .rbbt/tmp/tmp-ssh_job_inputs/ ", :in => script).read
96
- TmpFile.with_file do |dir|
97
- if Step.save_inputs(inputs, input_types, dir)
98
- CMD.cmd("scp -r '#{dir}' .rbbt/tmp/tmp-ssh_job_inputs/#{id}")
99
- end
100
- end
101
-
102
- script +=<<-EOF
103
- jobname = #{jobname.nil? ? 'nil' : "'#{jobname}'"}
104
- path = '.rbbt/tmp/tmp-ssh_job_inputs/#{id}'
105
- job_inputs = Workflow.load_inputs(path, task_info[:inputs], task_info[:input_types])
106
- job = wf.job(task, jobname, job_inputs)
107
- Log.severity = 10
108
- job.fork
109
- puts job.name
110
- EOF
111
- self.run(server, script)
112
- end
113
-
114
- def self.run_job(url, inputs, input_types, jobname = nil)
115
- server, path = parse_url(url)
116
- script = path_script(path)
117
-
118
- id = "inputs-" << rand(100000).to_s
119
- CMD.cmd("ssh '#{server}' mkdir -p .rbbt/tmp/tmp-ssh_job_inputs/ ", :in => script).read
120
- TmpFile.with_file do |dir|
121
- if Step.save_inputs(inputs, input_types, dir)
122
- CMD.cmd("scp -r '#{dir}' .rbbt/tmp/tmp-ssh_job_inputs/#{id}")
123
- end
124
- end
125
-
126
- script +=<<-EOF
127
- jobname = #{jobname.nil? ? 'nil' : "'#{jobname}'"}
128
- path = '.rbbt/tmp/tmp-ssh_job_inputs/#{id}'
129
- job_inputs = Workflow.load_inputs(path, task_info[:inputs], task_info[:input_types])
130
- job = wf.job(task, jobname, job_inputs)
131
- job.run
132
- EOF
133
- self.run_log(server, script)
134
- end
135
-
136
- def self.clean(url)
137
- server, path = parse_url(url)
138
- script = path_script(path)
139
-
140
- script +=<<-EOF
141
- job.clean
142
- EOF
143
- self.run(server, script)
144
- end
145
-
146
- end
147
-
148
1
  module WorkflowSSHClient
149
2
  def self.fix_hash(hash, fix_values = false)
150
3
  fixed = {}
@@ -223,7 +76,7 @@ module WorkflowSSHClient
223
76
 
224
77
  res = capture_exception do
225
78
  Misc.insist(2, 0.5) do
226
- SSHClient.get_json(url, :params => params)
79
+ SSHDriver.get_json(url, :params => params)
227
80
  end
228
81
  end
229
82
 
@@ -234,22 +87,32 @@ module WorkflowSSHClient
234
87
  end
235
88
  end
236
89
 
237
-
238
- def self.post_jobname(url, inputs, input_types)
239
- SSHClient.post_job(url, inputs, input_types)
90
+ def self.upload_inputs(server, inputs, input_types, input_id)
91
+ TmpFile.with_file do |dir|
92
+ if Step.save_inputs(inputs, input_types, dir)
93
+ CMD.cmd("ssh '#{server}' mkdir -p .rbbt/tmp/tmp-ssh_job_inputs/; scp -r '#{dir}' #{server}:.rbbt/tmp/tmp-ssh_job_inputs/#{input_id}")
94
+ end
95
+ end
240
96
  end
241
97
 
98
+ #{{{ RUN
99
+
100
+
242
101
  def init_job(cache_type = nil, other_params = {})
243
102
  cache_type = :asynchronous if cache_type.nil? and not @is_exec
244
103
  cache_type = :exec if cache_type.nil?
245
104
  @last_info_time = nil
246
105
  @done = false
247
- get_streams
106
+ @server, @server_path = SSHDriver.parse_url base_url
107
+ @input_id ||= "inputs-" << rand(100000).to_s
108
+ @input_types = task_info(task)[:input_types]
109
+
110
+ WorkflowSSHClient.upload_inputs(@server, inputs, @input_types, @input_id)
111
+
248
112
  @name ||= Persist.memory("RemoteSteps", :workflow => self, :task => task, :jobname => @name, :inputs => inputs, :cache_type => cache_type) do
249
113
  Misc.insist do
250
- #@adaptor.post_jobname(File.join(base_url, task.to_s), inputs.merge(other_params).merge(:jobname => @name||@base_name, :_cache_type => cache_type))
251
114
  input_types = {}
252
- @adaptor.post_jobname(File.join(base_url, task.to_s), inputs, input_types)
115
+ SSHDriver.post_job(File.join(base_url, task.to_s), @input_id, @base_name)
253
116
  end
254
117
  end
255
118
  if Open.remote? @name
@@ -262,19 +125,26 @@ module WorkflowSSHClient
262
125
  end
263
126
 
264
127
  def path
265
- server, path = SSHClient.parse_url(url)
266
- "ssh://" + server + ":" + info[:path]
128
+ @server, @server_path = SSHDriver.parse_url @base_url
129
+ "ssh://" + @server + ":" + @remote_path
267
130
  end
268
131
 
269
- def run(*args)
132
+ def produce(*args)
270
133
  input_types = {}
271
- SSHClient.run_job(File.join(base_url, task.to_s), inputs, input_types)
134
+ init_job
135
+ @remote_path = SSHDriver.run_job(File.join(base_url, task.to_s), @input_id, @base_name)
136
+ while ! done?
137
+ sleep 1
138
+ end
272
139
  end
273
140
 
141
+ def run(*args)
142
+ produce(*args)
143
+ end
274
144
 
275
145
  def clean
276
146
  init_job
277
- SSHClient.clean(@url) if done?
147
+ SSHDriver.clean(@url, @input_id, @base_name) if done?
278
148
  _restart
279
149
  end
280
150
 
@@ -108,6 +108,11 @@ class Step
108
108
  @inputs || []
109
109
  end
110
110
 
111
+ def archive
112
+ self.set_info :archived_info, archived_info
113
+ self.set_info :archived_dependencies, info[:dependencies]
114
+ end
115
+
111
116
  def archived_info
112
117
  return info[:archived_info] if info[:archived_info]
113
118
 
@@ -223,7 +228,7 @@ class Step
223
228
 
224
229
  def result_type
225
230
  @result_type ||= if @task.nil?
226
- info[:result_type]
231
+ info[:result_type] || :binary
227
232
  else
228
233
  @task.result_type || info[:result_type] || :string
229
234
  end
@@ -39,6 +39,7 @@ test_str = options[:test] ? '-nv' : ''
39
39
 
40
40
  path, search_path, _sep, *other = ARGV
41
41
 
42
+ search_path = 'user' if search_path.nil?
42
43
  resource = Rbbt
43
44
 
44
45
  path, real_paths = if options[:source]
@@ -0,0 +1,14 @@
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), '..', 'test_helper.rb')
2
+ require 'rbbt/hpc'
3
+ require 'rbbt/workflow'
4
+
5
+ class TestHPC < Test::Unit::TestSuite
6
+ def test_relay
7
+ Log.severity = 0
8
+ Workflow.require_workflow "Translation"
9
+ job = Translation.job(:translate, nil, :genes => %w(TP53 KRAS))
10
+ Marenostrum.relay job
11
+
12
+ end
13
+ end
14
+
@@ -205,21 +205,23 @@ class TestWorkflow < Test::Unit::TestCase
205
205
  def test_update_on_input_dependency_update
206
206
  Open.repository_dirs << File.join(ENV["HOME"],".rbbt/tmp/test/workflow")
207
207
  Log.severity = 0
208
- send_input_dep_to_reverse_job = TestWF.job(:send_input_dep_to_reverse, nil, :name => "Miguel")
209
- send_input_dep_to_reverse_job.clean
210
- send_input_dep_to_reverse_job.run
211
-
212
- input_dep_job = send_input_dep_to_reverse_job.step(:input_dep)
213
- mtime_orig = Open.mtime send_input_dep_to_reverse_job.step(:reverse_input_text).path
214
-
215
- sleep 2
216
- input_dep_job.clean
217
- input_dep_job.run
218
- send_input_dep_to_reverse_job = TestWF.job(:send_input_dep_to_reverse, nil, :name => "Miguel")
219
-
220
- send_input_dep_to_reverse_job.run
221
- mtime_new = Open.mtime send_input_dep_to_reverse_job.step(:reverse_input_text).path
222
- assert mtime_orig < mtime_new
208
+ Misc.with_env "RBBT_UPDATE", "true" do
209
+ send_input_dep_to_reverse_job = TestWF.job(:send_input_dep_to_reverse, nil, :name => "Miguel")
210
+ send_input_dep_to_reverse_job.clean
211
+ send_input_dep_to_reverse_job.run
212
+
213
+ input_dep_job = send_input_dep_to_reverse_job.step(:input_dep)
214
+ mtime_orig = Open.mtime send_input_dep_to_reverse_job.step(:reverse_input_text).path
215
+
216
+ sleep 2
217
+ input_dep_job.clean
218
+ input_dep_job.run
219
+ send_input_dep_to_reverse_job = TestWF.job(:send_input_dep_to_reverse, nil, :name => "Miguel")
220
+
221
+ send_input_dep_to_reverse_job.run
222
+ mtime_new = Open.mtime send_input_dep_to_reverse_job.step(:reverse_input_text).path
223
+ assert mtime_orig < mtime_new
224
+ end
223
225
  end
224
226
 
225
227
  def test_helper
@@ -252,9 +254,12 @@ class TestWorkflow < Test::Unit::TestCase
252
254
 
253
255
  def test_search
254
256
  str = "TEST"
255
- job1 = TestWF.job(:repeat2, "subdir/Default", :number => 3).fork
256
- job2 = TestWF.job(:repeat2, "subdir/Other", :number => 3).fork
257
- job3 = TestWF.job(:repeat2, "Default", :number => 3).fork
257
+ TestWF.jobs(:repeat2).each do |name|
258
+ TestWF.load_name(:repeat2, name).clean
259
+ end
260
+ job1 = TestWF.job(:repeat2, "subdir/Default", :number => 3).clean.fork
261
+ job2 = TestWF.job(:repeat2, "subdir/Other", :number => 3).clean.fork
262
+ job3 = TestWF.job(:repeat2, "Default", :number => 3).clean.fork
258
263
 
259
264
  while not job1.done? and not job2.done? and not job3.done?
260
265
  sleep 1
@@ -379,10 +384,13 @@ class TestWorkflow < Test::Unit::TestCase
379
384
  job.run
380
385
  assert job.checks.select{|d| d.task_name.to_s == "t1" }.any?
381
386
  job = TestWF.job(:t3)
382
- job.step(:t1).clean
383
- Misc.with_env "RBBT_UPDATE_ALL_JOBS", "true" do
384
- job = TestWF.job(:t3)
385
- assert job.checks.select{|d| d.task_name.to_s == "t1" }.any?
387
+ sleep 1
388
+ Open.touch job.step(:t1).path
389
+ Misc.with_env "RBBT_UPDATE", "false" do
390
+ assert job.updated?
391
+ end
392
+ Misc.with_env "RBBT_UPDATE", "true" do
393
+ assert ! job.updated?
386
394
  end
387
395
  end
388
396
 
@@ -0,0 +1,13 @@
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), '../../..', 'test_helper.rb')
2
+ require 'rbbt/workflow/remote/client'
3
+
4
+ class TestRemote < Test::Unit::TestCase
5
+ def test_ssh
6
+ Log.severity = 0
7
+ client = WorkflowRemoteClient.new "ssh://localhost:Translation", "Translation"
8
+ job = client.job("translate", "SSH-TEST", :genes => ["TP53","KRAS"])
9
+ iii job.url
10
+ puts job.run
11
+ end
12
+ end
13
+
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.26.87
4
+ version: 5.26.88
5
5
  platform: ruby
6
6
  authors:
7
7
  - Miguel Vazquez
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-11-22 00:00:00.000000000 Z
11
+ date: 2019-11-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -328,6 +328,7 @@ files:
328
328
  - lib/rbbt/workflow/remote/rest/adaptor.rb
329
329
  - lib/rbbt/workflow/remote/rest/get.rb
330
330
  - lib/rbbt/workflow/remote/ssh/adaptor.rb
331
+ - lib/rbbt/workflow/remote/ssh/driver.rb
331
332
  - lib/rbbt/workflow/remote/ssh/get.rb
332
333
  - lib/rbbt/workflow/schedule.rb
333
334
  - lib/rbbt/workflow/soap.rb
@@ -454,6 +455,7 @@ files:
454
455
  - test/rbbt/test_association.rb
455
456
  - test/rbbt/test_entity.rb
456
457
  - test/rbbt/test_fix_width_table.rb
458
+ - test/rbbt/test_hpc.rb
457
459
  - test/rbbt/test_knowledge_base.rb
458
460
  - test/rbbt/test_monitor.rb
459
461
  - test/rbbt/test_packed_index.rb
@@ -507,6 +509,7 @@ files:
507
509
  - test/rbbt/util/test_simpleDSL.rb
508
510
  - test/rbbt/util/test_simpleopt.rb
509
511
  - test/rbbt/util/test_tmpfile.rb
512
+ - test/rbbt/workflow/remote/test_client.rb
510
513
  - test/rbbt/workflow/step/test_dependencies.rb
511
514
  - test/rbbt/workflow/test_doc.rb
512
515
  - test/rbbt/workflow/test_step.rb
@@ -531,91 +534,93 @@ required_rubygems_version: !ruby/object:Gem::Requirement
531
534
  - !ruby/object:Gem::Version
532
535
  version: '0'
533
536
  requirements: []
534
- rubygems_version: 3.0.4
537
+ rubygems_version: 3.0.6
535
538
  signing_key:
536
539
  specification_version: 4
537
540
  summary: Utilities for the Ruby Bioinformatics Toolkit (rbbt)
538
541
  test_files:
539
- - test/test_helper.rb
540
- - test/rbbt/test_annotations.rb
541
- - test/rbbt/association/test_database.rb
542
- - test/rbbt/association/test_item.rb
543
- - test/rbbt/association/test_index.rb
544
- - test/rbbt/association/test_open.rb
545
- - test/rbbt/association/test_util.rb
546
- - test/rbbt/test_association.rb
547
- - test/rbbt/knowledge_base/test_syndicate.rb
548
- - test/rbbt/knowledge_base/test_enrichment.rb
549
- - test/rbbt/knowledge_base/test_query.rb
550
- - test/rbbt/knowledge_base/test_entity.rb
551
- - test/rbbt/knowledge_base/test_registry.rb
552
- - test/rbbt/knowledge_base/test_traverse.rb
542
+ - test/rbbt/test_entity.rb
543
+ - test/rbbt/workflow/test_doc.rb
544
+ - test/rbbt/workflow/test_step.rb
545
+ - test/rbbt/workflow/remote/test_client.rb
546
+ - test/rbbt/workflow/step/test_dependencies.rb
547
+ - test/rbbt/workflow/test_task.rb
548
+ - test/rbbt/resource/test_path.rb
549
+ - test/rbbt/util/test_colorize.rb
550
+ - test/rbbt/util/misc/test_omics.rb
551
+ - test/rbbt/util/misc/test_pipes.rb
552
+ - test/rbbt/util/misc/test_lock.rb
553
+ - test/rbbt/util/misc/test_multipart_payload.rb
554
+ - test/rbbt/util/misc/test_bgzf.rb
555
+ - test/rbbt/util/test_concurrency.rb
556
+ - test/rbbt/util/test_cmd.rb
557
+ - test/rbbt/util/R/test_plot.rb
558
+ - test/rbbt/util/R/test_eval.rb
559
+ - test/rbbt/util/R/test_model.rb
553
560
  - test/rbbt/util/test_config.rb
554
- - test/rbbt/util/test_R.rb
561
+ - test/rbbt/util/test_log.rb
562
+ - test/rbbt/util/test_simpleDSL.rb
563
+ - test/rbbt/util/log/test_progress.rb
555
564
  - test/rbbt/util/test_tmpfile.rb
556
- - test/rbbt/util/test_filecache.rb
557
- - test/rbbt/util/test_misc.rb
565
+ - test/rbbt/util/test_R.rb
558
566
  - test/rbbt/util/test_excel2tsv.rb
559
- - test/rbbt/util/log/test_progress.rb
560
- - test/rbbt/util/misc/test_multipart_payload.rb
561
- - test/rbbt/util/misc/test_pipes.rb
562
- - test/rbbt/util/misc/test_bgzf.rb
563
- - test/rbbt/util/misc/test_lock.rb
564
- - test/rbbt/util/misc/test_omics.rb
565
- - test/rbbt/util/test_semaphore.rb
566
- - test/rbbt/util/simpleopt/test_get.rb
567
+ - test/rbbt/util/test_misc.rb
568
+ - test/rbbt/util/test_open.rb
569
+ - test/rbbt/util/test_simpleopt.rb
567
570
  - test/rbbt/util/simpleopt/test_parse.rb
568
571
  - test/rbbt/util/simpleopt/test_setup.rb
569
- - test/rbbt/util/test_open.rb
572
+ - test/rbbt/util/simpleopt/test_get.rb
573
+ - test/rbbt/util/test_python.rb
574
+ - test/rbbt/util/test_filecache.rb
570
575
  - test/rbbt/util/concurrency/test_processes.rb
571
576
  - test/rbbt/util/concurrency/test_threads.rb
572
577
  - test/rbbt/util/concurrency/processes/test_socket.rb
573
- - test/rbbt/util/test_log.rb
574
- - test/rbbt/util/test_colorize.rb
575
- - test/rbbt/util/test_cmd.rb
576
- - test/rbbt/util/test_concurrency.rb
577
- - test/rbbt/util/R/test_eval.rb
578
- - test/rbbt/util/R/test_plot.rb
579
- - test/rbbt/util/R/test_model.rb
580
- - test/rbbt/util/test_simpleopt.rb
578
+ - test/rbbt/util/test_semaphore.rb
581
579
  - test/rbbt/util/test_chain_methods.rb
582
- - test/rbbt/util/test_simpleDSL.rb
583
- - test/rbbt/util/test_python.rb
584
- - test/rbbt/tsv/test_index.rb
585
- - test/rbbt/tsv/test_parser.rb
586
- - test/rbbt/tsv/test_field_index.rb
587
- - test/rbbt/tsv/test_stream.rb
588
- - test/rbbt/tsv/test_accessor.rb
580
+ - test/rbbt/test_resource.rb
581
+ - test/rbbt/test_packed_index.rb
589
582
  - test/rbbt/tsv/test_change_id.rb
590
- - test/rbbt/tsv/test_parallel.rb
591
- - test/rbbt/tsv/parallel/test_through.rb
592
- - test/rbbt/tsv/parallel/test_traverse.rb
593
- - test/rbbt/tsv/test_manipulate.rb
583
+ - test/rbbt/tsv/test_attach.rb
594
584
  - test/rbbt/tsv/test_filter.rb
585
+ - test/rbbt/tsv/test_parser.rb
586
+ - test/rbbt/tsv/test_accessor.rb
595
587
  - test/rbbt/tsv/test_matrix.rb
588
+ - test/rbbt/tsv/test_field_index.rb
596
589
  - test/rbbt/tsv/test_util.rb
597
- - test/rbbt/tsv/test_attach.rb
590
+ - test/rbbt/tsv/test_index.rb
591
+ - test/rbbt/tsv/test_parallel.rb
592
+ - test/rbbt/tsv/test_manipulate.rb
598
593
  - test/rbbt/tsv/test_excel.rb
599
- - test/rbbt/test_monitor.rb
600
- - test/rbbt/test_workflow.rb
601
- - test/rbbt/annotations/test_util.rb
602
- - test/rbbt/test_packed_index.rb
603
- - test/rbbt/workflow/test_task.rb
604
- - test/rbbt/workflow/test_doc.rb
605
- - test/rbbt/workflow/test_step.rb
606
- - test/rbbt/workflow/step/test_dependencies.rb
607
- - test/rbbt/entity/test_identifiers.rb
608
- - test/rbbt/test_entity.rb
609
- - test/rbbt/test_resource.rb
610
- - test/rbbt/test_persist.rb
611
- - test/rbbt/persist/tsv/test_tokyocabinet.rb
612
- - test/rbbt/persist/tsv/test_cdb.rb
613
- - test/rbbt/persist/tsv/test_leveldb.rb
594
+ - test/rbbt/tsv/parallel/test_through.rb
595
+ - test/rbbt/tsv/parallel/test_traverse.rb
596
+ - test/rbbt/tsv/test_stream.rb
597
+ - test/rbbt/test_association.rb
598
+ - test/rbbt/association/test_database.rb
599
+ - test/rbbt/association/test_item.rb
600
+ - test/rbbt/association/test_open.rb
601
+ - test/rbbt/association/test_util.rb
602
+ - test/rbbt/association/test_index.rb
603
+ - test/rbbt/test_knowledge_base.rb
614
604
  - test/rbbt/persist/tsv/test_kyotocabinet.rb
615
- - test/rbbt/persist/tsv/test_sharder.rb
605
+ - test/rbbt/persist/tsv/test_cdb.rb
616
606
  - test/rbbt/persist/tsv/test_lmdb.rb
607
+ - test/rbbt/persist/tsv/test_sharder.rb
608
+ - test/rbbt/persist/tsv/test_leveldb.rb
609
+ - test/rbbt/persist/tsv/test_tokyocabinet.rb
617
610
  - test/rbbt/persist/test_tsv.rb
618
611
  - test/rbbt/test_tsv.rb
612
+ - test/rbbt/test_annotations.rb
619
613
  - test/rbbt/test_fix_width_table.rb
620
- - test/rbbt/test_knowledge_base.rb
621
- - test/rbbt/resource/test_path.rb
614
+ - test/rbbt/test_workflow.rb
615
+ - test/rbbt/entity/test_identifiers.rb
616
+ - test/rbbt/annotations/test_util.rb
617
+ - test/rbbt/test_hpc.rb
618
+ - test/rbbt/test_monitor.rb
619
+ - test/rbbt/test_persist.rb
620
+ - test/rbbt/knowledge_base/test_entity.rb
621
+ - test/rbbt/knowledge_base/test_registry.rb
622
+ - test/rbbt/knowledge_base/test_syndicate.rb
623
+ - test/rbbt/knowledge_base/test_query.rb
624
+ - test/rbbt/knowledge_base/test_enrichment.rb
625
+ - test/rbbt/knowledge_base/test_traverse.rb
626
+ - test/test_helper.rb