rbbt-rest 1.3.2 → 1.3.3

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: 7c3bfc548ebb34eaabf50cfcf9393b93f5eb889a
4
- data.tar.gz: 7dad0127b8830e498db504f0ab74fc5ad0478fbc
3
+ metadata.gz: b556674b8552bf64d8680def41f2316821743b64
4
+ data.tar.gz: 3f1fb6faa193e793870d65706e3ca828b7de897f
5
5
  SHA512:
6
- metadata.gz: 8aaa4bf85659e3b623e241298b2df6b33e7a669ebaea57e0956d8b22bb4c04359f75a96b57906b9f6b37b40fb09885f716f0357fa619d3f46b1756ee3e77a604
7
- data.tar.gz: ad5cca4ee8c9f51f84102ed95bd0cc64d4dbcebcd9ee4d698419ad74ed93ee2fdb7327e9309cfeb126ce43afc04f00fc53018a23f6d5820700fd0904fe2044ec
6
+ metadata.gz: 8329fbef77bc84d70921839a9648e988a1d587a33de739c23dd1255e90bddbe33794a12dee8e51dc6e4bede70b7118690ea1afb5a1022ddc35dc995401303b4b
7
+ data.tar.gz: 233769daa035553e3a1d294f2cf1cb426bbc779605b24e1c357a65d6d3693f831c9d72014d1cf845ebe00c6f0b770d31a68810e47daa384e613dfd164709993b
@@ -4,174 +4,12 @@ require 'rbbt/workflow'
4
4
  require 'rbbt/workflow/step'
5
5
  require 'rbbt/util/misc'
6
6
 
7
- class WorkflowRESTClient
7
+ require 'rbbt/rest/client/get'
8
+ require 'rbbt/rest/client/adaptor'
9
+ require 'rbbt/rest/client/step'
8
10
 
9
- def self.fix_hash(hash, fix_values = false)
10
- fixed = {}
11
- hash.each do |key, value|
12
- fixed[key.to_sym] = case
13
- when Hash === value
14
- fix_hash(value)
15
- when (fix_values and String === value)
16
- value.to_sym
17
- else
18
- value
19
- end
20
- end
21
- fixed
22
- end
23
-
24
- def self.get_raw(url, params = {})
25
- Log.debug{ "RestClient get_raw: #{ url } - #{Misc.fingerprint params}" }
26
- params = params.merge({ :_format => 'raw' })
27
- Misc.insist(2, 0.5) do
28
- RestClient.get(URI.encode(url), :params => params)
29
- end
30
- end
31
-
32
- def self.post_jobname(url, params = {})
33
- Log.debug{ "RestClient post_jobname: #{ url } - #{Misc.fingerprint params}" }
34
- params = params.merge({ :_format => 'jobname' })
35
- RestClient.post(URI.encode(url), params)
36
- end
37
-
38
- def self.get_json(url, params = {})
39
- Log.debug{ "RestClient get_json: #{ url } - #{Misc.fingerprint params }" }
40
- params = params.merge({ :_format => 'json' })
41
- begin
42
- res = RestClient.get(URI.encode(url), :params => params)
43
- rescue => e
44
- raise JSON.parse(e.response)["message"]
45
- end
46
- begin
47
- JSON.parse(res)
48
- rescue
49
- res
50
- end
51
- end
52
-
53
- def self.post_json(url, params = {})
54
- if url =~ /_cache_type=:exec/
55
- JSON.parse(Open.open(url, :nocache => true))
56
- else
57
- params = params.merge({ :_format => 'json' })
58
- res = RestClient.post(URI.encode(url), params)
59
- begin
60
- JSON.parse(res)
61
- rescue
62
- res
63
- end
64
- end
65
- end
66
-
67
- class RemoteStep < Step
68
-
69
- attr_accessor :url, :base_url, :task, :name, :inputs, :result_type, :result_description
70
-
71
- def name
72
- (Array === @url ? @url.first : @url).split("/").last
73
- end
74
-
75
- def task_name
76
- (Array === @url ? @url.first : @url).split("/")[-2]
77
- end
78
-
79
- def info
80
- info = WorkflowRESTClient.get_json(File.join(url, 'info'))
81
- info = WorkflowRESTClient.fix_hash(info)
82
- info[:status] = info[:status].to_sym if String === info[:status]
83
- info
84
- end
85
-
86
- def done?
87
- status.to_s == 'done'
88
- end
89
-
90
- def fork
91
- @name = WorkflowRESTClient.post_jobname(File.join(base_url, task.to_s), inputs.merge(:jobname => @name, :_cache_type => :asynchronous))
92
- @url = File.join(base_url, task.to_s, @name)
93
- self
94
- end
95
-
96
- def initialize(base_url, task = nil, name = nil, inputs = nil, result_type = nil, result_description = nil, exec = false)
97
- if task.nil?
98
- @url = base_url
99
- else
100
- @base_url, @task, @name, @inputs, @result_type, @result_description = base_url, task, name, inputs, result_type, result_description
101
- if exec
102
- @url = [File.join(base_url, task.to_s), inputs]
103
- else
104
- self.fork
105
- end
106
- end
107
- end
108
-
109
- def _exec(noload = false)
110
- if Array === @url
111
- url, params = @url
112
- else
113
- url, params = @url, {:_cache_type => :synchronous}
114
- end
115
-
116
- params[:jobname] = @name if @name
117
-
118
- if noload and %w(boolean string tsv).include? result_type
119
- WorkflowRESTClient.get_raw(url, params)
120
- else
121
- case result_type
122
- when :string
123
- WorkflowRESTClient.get_raw(url, params)
124
- when :boolean
125
- WorkflowRESTClient.get_raw(url, params) == "true"
126
- when :tsv
127
- TSV.open(StringIO.new(WorkflowRESTClient.get_raw(url, params)))
128
- when :annotations
129
- Annotated.load_tsv(TSV.open(StringIO.new(WorkflowRESTClient.get_raw(url, params))))
130
- else
131
- WorkflowRESTClient.get_json(url, params)
132
- end
133
- end
134
- end
135
-
136
- def exec
137
- res = _exec
138
- prepare_result(res, result_type)
139
- end
140
-
141
- def run(noload = false)
142
- if noload
143
- _exec(noload)
144
- else
145
- exec
146
- end
147
- end
148
-
149
- def load
150
- exec
151
- end
152
-
153
- def join
154
- exec
155
- self
156
- end
157
-
158
- def status
159
- info[:status]
160
- end
161
-
162
- def clean
163
- WorkflowRESTClient.get_raw(url, :_update => :clean)
164
- self
165
- end
166
-
167
- def files
168
- WorkflowRESTClient.get_json(File.join(url, 'files'))
169
- end
170
-
171
- def file(file)
172
- WorkflowRESTClient.get_json(File.join(url, 'file', file))
173
- end
174
- end
11
+ class WorkflowRESTClient
12
+ include Workflow
175
13
 
176
14
  attr_accessor :url, :name, :exec_exports, :asynchronous_exports, :synchronous_exports
177
15
 
@@ -185,103 +23,6 @@ class WorkflowRESTClient
185
23
  name
186
24
  end
187
25
 
188
- def workflow_description
189
- WorkflowRESTClient.get_raw(File.join(url, 'description'))
190
- end
191
-
192
- def documentation
193
- @documention ||= IndiferentHash.setup(WorkflowRESTClient.get_json(File.join(url, "documentation"),{}))
194
- end
195
-
196
- def task_info(task)
197
- @task_info ||= {}
198
- @task_info[task]
199
-
200
- if @task_info[task].nil?
201
- task_info = WorkflowRESTClient.get_json(File.join(url, task.to_s, 'info'))
202
- task_info = WorkflowRESTClient.fix_hash(task_info)
203
-
204
- task_info[:result_type] = task_info[:result_type].to_sym
205
- task_info[:export] = task_info[:export].to_sym
206
- task_info[:input_types] = WorkflowRESTClient.fix_hash(task_info[:input_types], true)
207
- task_info[:inputs] = task_info[:inputs].collect{|input| input.to_sym }
208
-
209
- @task_info[task] = task_info
210
- end
211
- @task_info[task]
212
- end
213
-
214
- def exported_tasks
215
- (@asynchronous_exports + @synchronous_exports + @exec_exports).compact.flatten
216
- end
217
-
218
- def tasks
219
- @tasks ||= Hash.new do |hash,task_name|
220
- info = task_info(task_name)
221
- task = Task.setup info do |*args|
222
- raise "This is a remote task"
223
- end
224
- task.name = task_name.to_sym
225
- hash[task_name] = task
226
- end
227
- end
228
-
229
- def load_tasks
230
- exported_tasks.each{|name| tasks[name]}
231
- nil
232
- end
233
-
234
- def task_dependencies
235
- @task_dependencies ||= Hash.new do |hash,task|
236
- hash[task] = if exported_tasks.include? task
237
- WorkflowRESTClient.get_json(File.join(url, task.to_s, 'dependencies'))
238
- else
239
- []
240
- end
241
- end
242
- end
243
-
244
- def rec_dependencies(taskname)
245
- if task_dependencies.include? taskname
246
- deps = task_dependencies[taskname].select{|dep| String === dep or Symbol === dep}
247
- deps.concat deps.collect{|dep| rec_dependencies(dep)}.compact.flatten
248
- deps.uniq
249
- else
250
- []
251
- end
252
- end
253
-
254
- def rec_inputs(taskname)
255
- [taskname].concat(rec_dependencies(taskname)).inject([]){|acc, tn| acc.concat tasks[tn.to_sym].inputs}
256
- end
257
-
258
- def rec_input_defaults(taskname)
259
- [taskname].concat(rec_dependencies(taskname)).inject({}){|acc, tn| acc.merge tasks[tn.to_sym].input_defaults}.
260
- tap{|h| IndiferentHash.setup(h) }
261
- end
262
-
263
- def rec_input_types(taskname)
264
- [taskname].concat(rec_dependencies(taskname)).inject({}){|acc, tn| acc.merge tasks[tn.to_sym].input_types}.
265
- tap{|h| IndiferentHash.setup(h) }
266
- end
267
-
268
- def rec_input_descriptions(taskname)
269
- [taskname].concat(rec_dependencies(taskname)).inject({}){|acc, tn| acc.merge tasks[tn.to_sym].input_descriptions}.
270
- tap{|h| IndiferentHash.setup(h) }
271
- end
272
-
273
- def rec_input_options(taskname)
274
- [taskname].concat(rec_dependencies(taskname)).inject({}){|acc, tn| acc.merge tasks[tn.to_sym].input_options}.
275
- tap{|h| IndiferentHash.setup(h) }
276
- end
277
-
278
- def init_remote_tasks
279
- task_exports = WorkflowRESTClient.get_json(url)
280
- @asynchronous_exports = task_exports["asynchronous"].collect{|task| task.to_sym }
281
- @synchronous_exports = task_exports["synchronous"].collect{|task| task.to_sym }
282
- @exec_exports = task_exports["exec"].collect{|task| task.to_sym }
283
- end
284
-
285
26
  def job(task, name, inputs)
286
27
  task_info = task_info(task)
287
28
  fixed_inputs = {}
@@ -293,78 +34,16 @@ class WorkflowRESTClient
293
34
  v
294
35
  end
295
36
  end
37
+
296
38
  RemoteStep.new(url, task, name, fixed_inputs, task_info[:result_type], task_info[:result_description], @exec_exports.include?(task))
297
39
  end
298
40
 
299
41
  def load_id(id)
300
42
  task, name = id.split("/")
301
- step = RemoteStep.new File.join(url, id)
43
+ step = RemoteStep.new url, task, nil
44
+ step.name = name
302
45
  step.result_type = task_info(task)[:result_type]
303
46
  step.result_description = task_info(task)[:result_description]
304
47
  step
305
48
  end
306
-
307
- def doc(task = nil)
308
-
309
- if task.nil?
310
- puts self.to_s
311
- puts "=" * self.to_s.length
312
- puts
313
-
314
- puts "## TASKS"
315
- puts
316
- tasks.each do |name,task|
317
- puts " * #{ name }:"
318
- puts " " << task.description if task.description and not task.description.empty?
319
- puts
320
- end
321
- else
322
-
323
- if Task === task
324
- task_name = task.name
325
- else
326
- task_name = task
327
- task = self.tasks[task_name]
328
- end
329
- dependencies = self.rec_dependencies(task_name).collect{|dep_name| self.tasks[dep_name.to_sym]}
330
-
331
- task.doc(dependencies)
332
- end
333
- end
334
-
335
- def doc(task = nil)
336
-
337
- if task.nil?
338
- puts Log.color :magenta, self.to_s
339
- puts Log.color :magenta, "=" * self.to_s.length
340
- if self.documentation[:description] and not self.documentation[:description].empty?
341
- puts
342
- puts Misc.format_paragraph self.documentation[:description]
343
- end
344
- puts
345
-
346
- puts Log.color :magenta, "## TASKS"
347
- if self.documentation[:task_description] and not self.documentation[:task_description].empty?
348
- puts
349
- puts Misc.format_paragraph self.documentation[:task_description]
350
- end
351
- puts
352
-
353
- tasks.each do |name,task|
354
- puts Misc.format_definition_list_item(name.to_s, task.description || "", 80, 30, :yellow)
355
- end
356
-
357
- else
358
-
359
- if Task === task
360
- task_name = task.name
361
- else
362
- task_name = task
363
- task = self.tasks[task_name]
364
- end
365
- dependencies = self.rec_dependencies(task_name).collect{|dep_name| self.tasks[dep_name.to_sym]}
366
-
367
- task.doc(dependencies)
368
- end
369
- end
370
49
  end
@@ -0,0 +1,66 @@
1
+ class WorkflowRESTClient
2
+
3
+ def workflow_description
4
+ WorkflowRESTClient.get_raw(File.join(url, 'description'))
5
+ end
6
+
7
+ def documentation
8
+ @documention ||= IndiferentHash.setup(WorkflowRESTClient.get_json(File.join(url, "documentation"),{}))
9
+ end
10
+
11
+ def task_info(task)
12
+ @task_info ||= {}
13
+ @task_info[task]
14
+
15
+ if @task_info[task].nil?
16
+ task_info = WorkflowRESTClient.get_json(File.join(url, task.to_s, 'info'))
17
+ task_info = WorkflowRESTClient.fix_hash(task_info)
18
+
19
+ task_info[:result_type] = task_info[:result_type].to_sym
20
+ task_info[:export] = task_info[:export].to_sym
21
+ task_info[:input_types] = WorkflowRESTClient.fix_hash(task_info[:input_types], true)
22
+ task_info[:inputs] = task_info[:inputs].collect{|input| input.to_sym }
23
+
24
+ @task_info[task] = task_info
25
+ end
26
+ @task_info[task]
27
+ end
28
+
29
+ def exported_tasks
30
+ (@asynchronous_exports + @synchronous_exports + @exec_exports).compact.flatten
31
+ end
32
+
33
+ def tasks
34
+ @tasks ||= Hash.new do |hash,task_name|
35
+ info = task_info(task_name)
36
+ task = Task.setup info do |*args|
37
+ raise "This is a remote task"
38
+ end
39
+ task.name = task_name.to_sym
40
+ hash[task_name] = task
41
+ end
42
+ end
43
+
44
+ def load_tasks
45
+ exported_tasks.each{|name| tasks[name]}
46
+ nil
47
+ end
48
+
49
+ def task_dependencies
50
+ @task_dependencies ||= Hash.new do |hash,task|
51
+ hash[task] = if exported_tasks.include? task
52
+ WorkflowRESTClient.get_json(File.join(url, task.to_s, 'dependencies'))
53
+ else
54
+ []
55
+ end
56
+ end
57
+ end
58
+
59
+ def init_remote_tasks
60
+ task_exports = WorkflowRESTClient.get_json(url)
61
+ @asynchronous_exports = task_exports["asynchronous"].collect{|task| task.to_sym }
62
+ @synchronous_exports = task_exports["synchronous"].collect{|task| task.to_sym }
63
+ @exec_exports = task_exports["exec"].collect{|task| task.to_sym }
64
+ nil
65
+ end
66
+ end
@@ -0,0 +1,83 @@
1
+ class WorkflowRESTClient
2
+ def self.fix_hash(hash, fix_values = false)
3
+ fixed = {}
4
+ hash.each do |key, value|
5
+ fixed[key.to_sym] = case
6
+ when Hash === value
7
+ fix_hash(value)
8
+ when (fix_values and String === value)
9
+ value.to_sym
10
+ else
11
+ value
12
+ end
13
+ end
14
+ fixed
15
+ end
16
+
17
+ def self.capture_exception
18
+ begin
19
+ yield
20
+ rescue Exception => e
21
+ klass, message = e.response.split " => "
22
+ begin
23
+ klass = Kernel.const_get klass
24
+ rescue
25
+ raise message
26
+ end
27
+ raise klass.new message
28
+ end
29
+ end
30
+
31
+ def self.get_raw(url, params = {})
32
+ Log.debug{ "RestClient get_raw: #{ url } - #{Misc.fingerprint params}" }
33
+ params = params.merge({ :_format => 'raw' })
34
+ capture_exception do
35
+ Misc.insist(2, 0.5) do
36
+ RestClient.get(URI.encode(url), :params => params)
37
+ end
38
+ end
39
+ end
40
+
41
+ def self.post_jobname(url, params = {})
42
+ Log.debug{ "RestClient post_jobname: #{ url } - #{Misc.fingerprint params}" }
43
+ params = params.merge({ :_format => 'jobname' })
44
+
45
+ capture_exception do
46
+ RestClient.post(URI.encode(url), params)
47
+ end
48
+ end
49
+
50
+ def self.get_json(url, params = {})
51
+ Log.debug{ "RestClient get_json: #{ url } - #{Misc.fingerprint params }" }
52
+ params = params.merge({ :_format => 'json' })
53
+
54
+ res = capture_exception do
55
+ RestClient.get(URI.encode(url), :params => params)
56
+ end
57
+
58
+ begin
59
+ JSON.parse(res)
60
+ rescue
61
+ res
62
+ end
63
+ end
64
+
65
+ def self.post_json(url, params = {})
66
+ if url =~ /_cache_type=:exec/
67
+ JSON.parse(Open.open(url, :nocache => true))
68
+ else
69
+ params = params.merge({ :_format => 'json' })
70
+
71
+ res = capture_exception do
72
+ RestClient.post(URI.encode(url), params)
73
+ end
74
+
75
+ begin
76
+ JSON.parse(res)
77
+ rescue
78
+ res
79
+ end
80
+ end
81
+ end
82
+
83
+ end
@@ -0,0 +1,123 @@
1
+ class WorkflowRESTClient
2
+ class RemoteStep < Step
3
+
4
+ attr_accessor :url, :base_url, :task, :base_name, :inputs, :result_type, :result_description, :exec
5
+
6
+ def initialize(base_url, task = nil, name = nil, inputs = nil, result_type = nil, result_description = nil, exec = false)
7
+ if task.nil?
8
+ @url = base_url
9
+ else
10
+ @base_url, @task, @name, @inputs, @result_type, @result_description = base_url, task, name, inputs, result_type, result_description
11
+ if exec
12
+ @url = [File.join(base_url, task.to_s), inputs]
13
+ else
14
+ self.fork
15
+ end
16
+ end
17
+ end
18
+
19
+ def initialize(base_url, task = nil, base_name = nil, inputs = nil, result_type = nil, result_description = nil, exec = false)
20
+ @base_url, @task, @base_name, @inputs, @result_type, @result_description, @exec = base_url, task, base_name, inputs, result_type, result_description, exec
21
+ end
22
+
23
+ def name
24
+ return nil if exec
25
+ (Array === @url ? @url.first : @url).split("/").last
26
+ end
27
+
28
+ def task_name
29
+ (Array === @url ? @url.first : @url).split("/")[-2]
30
+ end
31
+
32
+ def info
33
+ info = WorkflowRESTClient.get_json(File.join(url, 'info'))
34
+ info = WorkflowRESTClient.fix_hash(info)
35
+ info[:status] = info[:status].to_sym if String === info[:status]
36
+ info
37
+ end
38
+
39
+ def status
40
+ info[:status]
41
+ end
42
+
43
+ def done?
44
+ status.to_s == 'done'
45
+ end
46
+
47
+ def files
48
+ WorkflowRESTClient.get_json(File.join(url, 'files'))
49
+ end
50
+
51
+ def file(file)
52
+ WorkflowRESTClient.get_raw(File.join(url, 'file', file))
53
+ end
54
+
55
+ #{{{ MANAGEMENT
56
+
57
+ def init_job(cache_type = :asynchronous)
58
+ @name = WorkflowRESTClient.post_jobname(File.join(base_url, task.to_s), inputs.merge(:jobname => @name, :_cache_type => cache_type))
59
+ @url = File.join(base_url, task.to_s, @name)
60
+ nil
61
+ end
62
+
63
+ def load_res(res)
64
+ case result_type
65
+ when :string
66
+ res
67
+ when :boolean
68
+ res == "true"
69
+ when :tsv
70
+ TSV.open(StringIO.new(res))
71
+ when :annotations
72
+ Annotated.load_tsv(TSV.open(StringIO.new(res)))
73
+ else
74
+ JSON.parse res
75
+ end
76
+ end
77
+
78
+ def get
79
+ params = params.merge(:_format => [:string, :boolean, :tsv, :annotations].include?(result_type) ? :raw : :json )
80
+ begin
81
+ WorkflowRESTClient.get_raw(url, params)
82
+ rescue => e
83
+ raise e.response
84
+ end
85
+ end
86
+
87
+ def load
88
+ params = {}
89
+ load_res get
90
+ end
91
+
92
+ def exec_job
93
+ res = WorkflowRESTClient.capture_exception do
94
+ RestClient.post(URI.encode(File.join(base_url, task.to_s)), inputs.merge(:_cache_type => :exec, :_format => [:string, :boolean, :tsv, :annotations].include?(result_type) ? :raw : :json))
95
+ end
96
+ load_res res
97
+ end
98
+
99
+ def fork
100
+ init_job
101
+ end
102
+
103
+ def run(noload = false)
104
+ return exec_job if exec
105
+ init_job(:synchronous)
106
+ noload ? name : self.load
107
+ end
108
+
109
+ def exec
110
+ exec_job
111
+ end
112
+
113
+ def join
114
+ self.load
115
+ self
116
+ end
117
+
118
+ def clean
119
+ WorkflowRESTClient.get_raw(url, :_update => :clean) unless exec
120
+ self
121
+ end
122
+ end
123
+ end
@@ -18,7 +18,7 @@ module RbbtRESTHelpers
18
18
  end
19
19
 
20
20
  def production?
21
- ENV["RACK_ENV"] == "production"
21
+ settings.environment && settings.environment.to_s == 'production'
22
22
  end
23
23
 
24
24
  def process_common_parameters
@@ -26,6 +26,8 @@ module Sinatra
26
26
 
27
27
  set :public_folder, Rbbt.share.views.public.find
28
28
 
29
+ set :environment, ENV["RACK_ENV"].to_sym if ENV["RACK_ENV"]
30
+
29
31
  attr_accessor :ajax, :layout, :format, :size, :update, :cache_type, :_, :profile
30
32
 
31
33
  if production?
@@ -135,10 +137,8 @@ module Sinatra
135
137
  halt 404, e.message
136
138
  end
137
139
 
138
- if production?
139
- error Exception do |e|
140
- halt 404, e.message
141
- end
140
+ error Exception do |e|
141
+ halt 500, [e.class.to_s, e.message] * " => "
142
142
  end
143
143
  end
144
144
  end
@@ -69,6 +69,8 @@ module Sinatra
69
69
  get "/#{workflow.to_s}/:task/info" do
70
70
  task = consume_parameter(:task)
71
71
 
72
+ raise Workflow::TaskNotFoundException.new workflow, task unless workflow.tasks.include? task.to_sym
73
+
72
74
  case format
73
75
  when :html
74
76
  workflow_render('task_info', workflow)
@@ -83,6 +85,8 @@ module Sinatra
83
85
  get "/#{workflow.to_s}/:task/dependencies" do
84
86
  task = consume_parameter(:task)
85
87
 
88
+ raise Workflow::TaskNotFoundException.new workflow, task unless workflow.tasks.include? task.to_sym
89
+
86
90
  case format
87
91
  when :html
88
92
  workflow_render('task_dependencies', workflow)
@@ -103,6 +107,8 @@ module Sinatra
103
107
  task = consume_parameter(:task)
104
108
  jobname = consume_parameter(:jobname)
105
109
 
110
+ raise Workflow::TaskNotFoundException.new workflow, task unless workflow.tasks.include? task.to_sym
111
+
106
112
  task_parameters = consume_task_parameters(workflow, task, params)
107
113
 
108
114
  if complete_input_set(workflow, task, task_parameters) or format != :html
@@ -116,6 +122,8 @@ module Sinatra
116
122
  task = consume_parameter(:task)
117
123
  jobname = consume_parameter(:jobname)
118
124
 
125
+ raise Workflow::TaskNotFoundException.new workflow, task unless workflow.tasks.include? task.to_sym
126
+
119
127
  task_parameters = consume_task_parameters(workflow, task, params)
120
128
 
121
129
  issue_job(workflow, task, jobname, task_parameters)
@@ -125,6 +133,8 @@ module Sinatra
125
133
  task = consume_parameter(:task)
126
134
  job = consume_parameter(:job)
127
135
 
136
+ raise Workflow::TaskNotFoundException.new workflow, task unless workflow.tasks.include? task.to_sym
137
+
128
138
  job = workflow.load_id(File.join(task, job))
129
139
 
130
140
  clean_job(workflow, job) if update == :clean
@@ -160,6 +170,8 @@ module Sinatra
160
170
  task = consume_parameter(:task)
161
171
  job = consume_parameter(:job)
162
172
 
173
+ raise Workflow::TaskNotFoundException.new workflow, task unless workflow.tasks.include? task.to_sym
174
+
163
175
  job = workflow.load_id(File.join(task, job))
164
176
 
165
177
  case format
@@ -177,6 +189,8 @@ module Sinatra
177
189
  task = consume_parameter(:task)
178
190
  job = consume_parameter(:job)
179
191
 
192
+ raise Workflow::TaskNotFoundException.new workflow, task unless workflow.tasks.include? task.to_sym
193
+
180
194
  job = workflow.load_id(File.join(task, job))
181
195
 
182
196
  case format
@@ -195,6 +209,8 @@ module Sinatra
195
209
  job = consume_parameter(:job)
196
210
  filename = params[:splat].first
197
211
 
212
+ raise Workflow::TaskNotFoundException.new workflow, task unless workflow.tasks.include? task.to_sym
213
+
198
214
  job = workflow.load_id(File.join(task, job))
199
215
 
200
216
  send_file job.file(filename)
@@ -205,6 +221,8 @@ module Sinatra
205
221
  job = consume_parameter(:job)
206
222
  job = workflow.load_id(File.join(task, job))
207
223
 
224
+ raise Workflow::TaskNotFoundException.new workflow, task unless workflow.tasks.include? task.to_sym
225
+
208
226
  clean_job(workflow, job)
209
227
  end
210
228
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rbbt-rest
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.2
4
+ version: 1.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Miguel Vazquez
@@ -175,6 +175,9 @@ files:
175
175
  - Rakefile
176
176
  - config.ru
177
177
  - lib/rbbt/rest/client.rb
178
+ - lib/rbbt/rest/client/adaptor.rb
179
+ - lib/rbbt/rest/client/get.rb
180
+ - lib/rbbt/rest/client/step.rb
178
181
  - lib/rbbt/rest/common/cache.rb
179
182
  - lib/rbbt/rest/common/forms.rb
180
183
  - lib/rbbt/rest/common/locate.rb