rbbt-util 5.19.36 → 5.19.37

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
  SHA1:
3
- metadata.gz: 72a73b569032a1fce45e26a98b2e5e57c1abd83c
4
- data.tar.gz: 1bb8e14d02dbc52654120389c6c1ff303ec25d05
3
+ metadata.gz: 137e4838f414d232714269ef64c04ba299fa3f62
4
+ data.tar.gz: 7cc30b69428f3f33461d639c6657d101fb09547f
5
5
  SHA512:
6
- metadata.gz: 6126957c9cb71705cfa47105941752e32033b714e7972dac3b211179c0e23c3c7e7a7d693922f0c7bc141e9c4955b15936ebd1418daa80150fdab5ef950c07cb
7
- data.tar.gz: 263a74be39a0ed6e0fee8d2e3c913f77767744fc54b4c0e7d5c469013ef1bd48cf134b5efbcb1c00aacd036a174a552ec2260a64f75156744f5bed1324a9089a
6
+ metadata.gz: 6f901c235ed7ef31b1693b1d99282ad86f7f8f37c1b18e9e62a4c67adafa29e10d5fc3b53e12adba5803ce4571958401bd78a65723e1a9e17736e52a7acf755a
7
+ data.tar.gz: 2aa36eb9d0a80795a230187894e1f05dd51b1125cf890cda3f740e8e66d1c0320f3f2637ac7d10e38b16698935cb313b3a5498283e7ccf26e1848df3c8620523
@@ -61,6 +61,6 @@ class WorkflowRESTClient
61
61
  @asynchronous_exports = task_exports["asynchronous"].collect{|task| task.to_sym }
62
62
  @synchronous_exports = task_exports["synchronous"].collect{|task| task.to_sym }
63
63
  @exec_exports = task_exports["exec"].collect{|task| task.to_sym }
64
- nil
64
+ @can_stream = task_exports["can_stream"]
65
65
  end
66
66
  end
@@ -57,11 +57,14 @@ class WorkflowRESTClient
57
57
  Log.debug{ "RestClient get_raw: #{ url } - #{Misc.fingerprint params}" }
58
58
  params = params.merge({ :_format => 'raw' })
59
59
  params = fix_params params
60
- capture_exception do
60
+ res = capture_exception do
61
61
  Misc.insist(2, 0.5) do
62
- RestClient.get(URI.encode(url), :params => params)
62
+ res = RestClient.get(URI.encode(url), :params => params)
63
+ raise TryAgain if res.code == 202
64
+ res
63
65
  end
64
66
  end
67
+ res
65
68
  end
66
69
 
67
70
  def self.get_json(url, params = {})
@@ -83,7 +86,6 @@ class WorkflowRESTClient
83
86
  end
84
87
 
85
88
  def self.post_jobname(url, params = {})
86
- Log.stack caller
87
89
  Log.debug{ "RestClient post_jobname: #{ url } - #{Misc.fingerprint params}" }
88
90
  params = params.merge({ :_format => 'jobname' })
89
91
  params = fix_params params
@@ -96,7 +98,7 @@ class WorkflowRESTClient
96
98
 
97
99
  name
98
100
  end
99
-
101
+
100
102
  def self.post_json(url, params = {})
101
103
  if url =~ /_cache_type=:exec/
102
104
  JSON.parse(Open.open(url, :nocache => true))
@@ -1,7 +1,7 @@
1
1
  class WorkflowRESTClient
2
2
  class RemoteStep < Step
3
3
 
4
- attr_accessor :url, :base_url, :task, :base_name, :inputs, :result_type, :result_description, :is_exec
4
+ attr_accessor :url, :base_url, :task, :base_name, :inputs, :result_type, :result_description, :is_exec, :stream_input
5
5
 
6
6
  def self.get_streams(inputs)
7
7
  new_inputs = {}
@@ -17,9 +17,10 @@ class WorkflowRESTClient
17
17
  end
18
18
 
19
19
 
20
- def initialize(base_url, task = nil, base_name = nil, inputs = nil, result_type = nil, result_description = nil, is_exec = false)
20
+ def initialize(base_url, task = nil, base_name = nil, inputs = nil, result_type = nil, result_description = nil, is_exec = false, stream_input = nil)
21
21
  @base_url, @task, @base_name, @inputs, @result_type, @result_description, @is_exec = base_url, task, base_name, inputs, result_type, result_description, is_exec
22
22
  @mutex = Mutex.new
23
+ @stream_input = stream_input
23
24
  @inputs = RemoteStep.get_streams @inputs
24
25
  end
25
26
 
@@ -176,7 +177,34 @@ class WorkflowRESTClient
176
177
  load_res get
177
178
  end
178
179
 
180
+ def _stream_job(stream_input, cache_type = :exec)
181
+ require 'rbbt/util/misc/multipart_payload'
182
+ WorkflowRESTClient.capture_exception do
183
+ url = URI.encode(File.join(base_url, task.to_s))
184
+ Log.debug{ "RestClient stream: #{ url } #{stream_input} #{cache_type} - #{Misc.fingerprint inputs}" }
185
+ task_params = inputs.merge(:_cache_type => cache_type, :jobname => base_name, :_format => [:string, :boolean, :tsv, :annotations].include?(result_type) ? :raw : :json)
186
+ res = RbbtMutiplartPayload.issue url, task_params, :mutations, nil, nil, true
187
+ type = res.gets
188
+ case type.strip
189
+ when "LOCATION"
190
+ url = res.gets
191
+ url.sub!(/\?.*/,'')
192
+ WorkflowRESTClient.get_raw(url)
193
+ when "STREAM"
194
+ res
195
+ when "BULK"
196
+ res.read
197
+ else
198
+ raise "What? " + type
199
+ end
200
+ end
201
+ end
202
+
179
203
  def _run_job(cache_type = :async)
204
+ #if cache_type == :stream and stream_input
205
+ if cache_type == :stream or cache_type == :exec and stream_input
206
+ return _stream_job(stream_input, cache_type)
207
+ end
180
208
  WorkflowRESTClient.capture_exception do
181
209
  url = URI.encode(File.join(base_url, task.to_s))
182
210
  task_params = inputs.merge(:_cache_type => cache_type, :jobname => base_name, :_format => [:string, :boolean, :tsv, :annotations].include?(result_type) ? :raw : :json)
@@ -205,10 +233,6 @@ class WorkflowRESTClient
205
233
  sin.close
206
234
  @done = true
207
235
  end
208
- #nsout, nsin = Misc.pipe
209
- #Misc.consume_stream(reader, true, nsin, true) do @done = true end
210
- #iii :ret
211
- #nsout
212
236
  end
213
237
  end
214
238
 
@@ -43,7 +43,9 @@ class WorkflowRESTClient
43
43
  end
44
44
  end
45
45
 
46
- RemoteStep.new(url, task, name, fixed_inputs, task_info[:result_type], task_info[:result_description], @exec_exports.include?(task))
46
+
47
+ stream_input = @can_stream ? task_info(task)[:input_options].select{|k,o| o[:stream] }.collect{|k,o| k }.first : nil
48
+ RemoteStep.new(url, task, name, fixed_inputs, task_info[:result_type], task_info[:result_description], @exec_exports.include?(task), stream_input)
47
49
  end
48
50
 
49
51
  def load_id(id)
@@ -75,7 +75,8 @@ module TSV
75
75
 
76
76
  def setup_array(*args)
77
77
  res = NamedArray.setup(*args)
78
- res.instance_variable_set(:@entity_templates, entity_templates)
78
+ return res if res.nil?
79
+ res.instance_variable_set(:@entity_templates, entity_templates)
79
80
  res
80
81
  end
81
82
 
@@ -229,11 +229,15 @@ module Misc
229
229
  when (defined? Step and Step)
230
230
  "<Step #{obj.path}>"
231
231
  else
232
- obj_ins = obj.inspect
233
- if obj_ins =~ /:0x0/
234
- obj_ins.gsub(/:0x[a-f0-9]+/,'')
232
+ if obj.respond_to? :filename
233
+ "<IO:" << obj.filename << ">"
235
234
  else
236
- obj_ins
235
+ obj_ins = obj.inspect
236
+ if obj_ins =~ /:0x0/
237
+ obj_ins.gsub(/:0x[a-f0-9]+/,'')
238
+ else
239
+ obj_ins
240
+ end
237
241
  end
238
242
  end
239
243
 
@@ -43,8 +43,11 @@ module RbbtMutiplartPayload
43
43
  header = input_header(name, filename)
44
44
  io.write "--" + BOUNDARY + EOL + header + EOL + EOL
45
45
 
46
- while c = content.read(1024)
47
- io.write c
46
+ #while c = content.read(1024)
47
+ # io.write c
48
+ #end
49
+ while line = content.gets
50
+ io.puts line
48
51
  end
49
52
  content.close
50
53
  end
@@ -56,9 +59,10 @@ module RbbtMutiplartPayload
56
59
  end
57
60
 
58
61
  def self.post_data_stream(inputs = nil, stream_input = nil, stream_io = nil, stream_filename = nil)
59
- sout, sin = Misc.pipe
62
+ #sout, sin = Misc.pipe
60
63
 
61
- Thread.new do
64
+ #Thread.new do
65
+ Misc.open_pipe do |sin|
62
66
  inputs.each do |input,content|
63
67
  input = input.to_s
64
68
  next if stream_input and input == stream_input.to_s
@@ -82,12 +86,11 @@ module RbbtMutiplartPayload
82
86
 
83
87
  RbbtMutiplartPayload.add_stream(sin, stream_input.to_s, stream_io, stream_filename) if stream_input
84
88
  RbbtMutiplartPayload.close_stream(sin)
89
+ sin.close unless sin.closed?
85
90
  end
86
-
87
- sout
88
91
  end
89
92
 
90
- def self.issue(url, inputs = nil, stream_input = nil, stream_io = nil, stream_filename = nil)
93
+ def self.issue(url, inputs = nil, stream_input = nil, stream_io = nil, stream_filename = nil, report_type = false)
91
94
 
92
95
  uri = URI(url)
93
96
  req = Net::HTTP::Post.new(uri.path)
@@ -100,7 +103,7 @@ module RbbtMutiplartPayload
100
103
  when String
101
104
  inputs[stream_input]
102
105
  when File
103
- inputs[stream_input].filename
106
+ inputs[stream_input].path
104
107
  else
105
108
  'file'
106
109
  end
@@ -121,12 +124,15 @@ module RbbtMutiplartPayload
121
124
  Net::HTTP.start(uri.hostname, uri.port) do |http|
122
125
  http.request(req) do |res|
123
126
  if Net::HTTPRedirection === res
127
+ sin.puts "LOCATION" if report_type
124
128
  sin.write res["location"]
125
129
  elsif stream_input
130
+ sin.puts "STREAM" if report_type
126
131
  res.read_body do |c|
127
132
  sin.write c
128
133
  end
129
134
  else
135
+ sin.puts "BULK" if report_type
130
136
  sin.write res.body
131
137
  end
132
138
  sin.close
@@ -560,4 +560,13 @@ module Misc
560
560
  end
561
561
 
562
562
 
563
+ def self.add_stream_filename(io, filename)
564
+ if ! io.respond_to? :filename
565
+ class << io
566
+ attr_accessor :filename
567
+ end
568
+ io.filename = filename
569
+ end
570
+ end
571
+
563
572
  end
@@ -172,11 +172,13 @@ class Step
172
172
  dependency.grace
173
173
 
174
174
  if dependency.aborted?
175
+ Log.warn "#{Log.color :cyan, "dependency"} #{Log.color :yellow, task.name.to_s || ""} => #{Log.color :yellow, dependency.task_name.to_s || ""} aborted (clean and retry) -- #{Log.color :blue, dependency.path} -- #{Log.color :yellow, self.short_path}"
175
176
  dependency.clean
176
177
  raise TryAgain
177
178
  end
178
179
 
179
180
  if dependency.error?
181
+ Log.error "#{Log.color :cyan, "dependency"} #{Log.color :yellow, task.name.to_s || ""} => #{Log.color :yellow, dependency.task_name.to_s || ""} error -- #{Log.color :blue, dependency.path} -- #{Log.color :yellow, self.short_path}"
180
182
  raise DependencyError, [dependency.path, dependency.messages.last] * ": " if dependency.error?
181
183
  end
182
184
 
@@ -185,45 +187,14 @@ class Step
185
187
  next
186
188
  end
187
189
 
188
- Log.info "#{Log.color :cyan, "dependency"} #{Log.color :yellow, task.name.to_s || ""} => #{Log.color :yellow, dependency.task_name.to_s || ""} joining -- #{Log.color :blue, dependency.path} -- #{Log.color :yellow, self.short_path}"
189
190
  begin
191
+ Log.info "#{Log.color :cyan, "dependency"} #{Log.color :yellow, task.name.to_s || ""} => #{Log.color :yellow, dependency.task_name.to_s || ""} joining -- #{Log.color :blue, dependency.path} -- #{Log.color :yellow, self.short_path}"
190
192
  dependency.join
191
193
  raise TryAgain unless dependency.done?
194
+ Log.info "#{Log.color :cyan, "dependency"} #{Log.color :yellow, task.name.to_s || ""} => #{Log.color :yellow, dependency.task_name.to_s || ""} joined -- #{Log.color :blue, dependency.path} -- #{Log.color :yellow, self.short_path}"
192
195
  rescue Aborted
193
196
  raise TryAgain
194
197
  end
195
- Log.info "#{Log.color :cyan, "dependency"} #{Log.color :yellow, task.name.to_s || ""} => #{Log.color :yellow, dependency.task_name.to_s || ""} joined -- #{Log.color :blue, dependency.path} -- #{Log.color :yellow, self.short_path}"
196
-
197
- #if not dependency.done?
198
- # if dependency.started?
199
- # dependency.grace
200
- # if dependency.error?
201
- # raise DependencyError, [dependency.path, dependency.messages.last] * ": " if dependency.error?
202
- # elsif dependency.streaming?
203
- # Log.info "#{Log.color :cyan, "dependency"} #{Log.color :yellow, task.name.to_s || ""} => #{Log.color :yellow, dependency.task_name.to_s || ""} streaming -- #{Log.color :blue, dependency.path} -- #{Log.color :blue, self.short_path}"
204
- # else
205
- # Log.info "#{Log.color :cyan, "dependency"} #{Log.color :yellow, task.name.to_s || ""} => #{Log.color :yellow, dependency.task_name.to_s || ""} joining -- #{Log.color :blue, dependency.path} -- #{Log.color :blue, self.short_path}"
206
- # begin
207
- # dependency.join unless dependency.streaming?
208
- # rescue Aborted
209
- # Log.info "#{Log.color :cyan, "dependency"} #{Log.color :yellow, task.name.to_s || ""} => #{Log.color :yellow, dependency.task_name.to_s || ""} #{Log.color :red, "aborted"} -- #{Log.color :blue, dependency.path} -- #{Log.color :blue, self.short_path}"
210
- # if dependency.aborted?
211
- # Log.info "#{Log.color :cyan, "dependency"} #{Log.color :yellow, task.name.to_s || ""} => #{Log.color :yellow, dependency.task_name.to_s || ""} #{Log.color :red, "aborted cleaning"} -- #{Log.color :blue, dependency.path} -- #{Log.color :blue, self.short_path}"
212
- # dependency.clean
213
- # raise TryAgain
214
- # end
215
- # end
216
- # Log.info "#{Log.color :cyan, "dependency"} #{Log.color :yellow, task.name.to_s || ""} => #{Log.color :yellow, dependency.task_name.to_s || ""} joined -- #{Log.color :blue, dependency.path} -- #{Log.color :blue, self.short_path}"
217
- # end
218
- # else
219
- # Log.info "#{Log.color :cyan, "dependency"} #{Log.color :yellow, task.name.to_s || ""} => #{Log.color :yellow, dependency.task_name.to_s || ""} starting -- #{Log.color :blue, dependency.path} -- #{Log.color :blue, self.short_path}"
220
- # dependency.run(:stream)
221
- # dependency.grace
222
- # dependency.join unless dependency.streaming?
223
- # end
224
- #else
225
- # Log.info "#{Log.color :cyan, "dependency"} #{Log.color :yellow, task.name.to_s || ""} => #{Log.color :yellow, dependency.task_name.to_s || ""} done -- #{Log.color :blue, dependency.short_path}"
226
- #end
227
198
 
228
199
  rescue TryAgain
229
200
  retry
@@ -58,7 +58,7 @@ Misc.in_dir(app_dir) do
58
58
  ENV["RBBT_VIEWS_DIR"] = options[:views] if options.include?(:views)
59
59
 
60
60
  if options[:stream]
61
- raise "No streaming available for any server other than puma" unless options[:server] =~ /^puma|unico/
61
+ raise "No streaming available for any server other than puma" unless options[:server] =~ /^puma/
62
62
  ENV["RBBT_WORKFLOW_TASK_STREAM"] = 'true'
63
63
  end
64
64
 
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.19.36
4
+ version: 5.19.37
5
5
  platform: ruby
6
6
  authors:
7
7
  - Miguel Vazquez