rbbt-rest 1.9.0 → 1.9.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1fdb32cbeb46c68fc69547ead44db23a8a7c429104b5a00ab64b0551cad3018e
4
- data.tar.gz: ff6ec603aa45072af8aa5cf99203bac5c63590f657b6f96d38cb172beee4ee09
3
+ metadata.gz: f704f277ce12001953704f8e901241c79f1bc0d6425967ae231455671bfa7879
4
+ data.tar.gz: 07d4ca572f44e36384bd7595f1c36738b6388c4f3da1fa03827a118b5eed3724
5
5
  SHA512:
6
- metadata.gz: cdc8bbe6d4548759e88e4cf034d6ec757311f3b0c5efb6c8ad656866cd146c5e9d91e83508759a1966bc4a73d588171e7067b7b4f26a0bffc6ba549d1be9c08d
7
- data.tar.gz: f2d21a95f95a61838596be12cd95a58ef3f979015be6c53b7137758f47616a4732cbc8b0eae75b9d354c20209f7244be8ad9dd3d31b3a49fb215dd3cfaf1d79c
6
+ metadata.gz: ca607c13addb28475b071f500a50e9ccac7c13007e765fb044cba6e9f41735a45e0de2ad403984bbaaf36ba662397140f06d542090bb9936981890d4b5b988c5
7
+ data.tar.gz: d2f72803da7071b5e0d2c743344dc120e7ad56c387ada1d002492ad5b0eeab138b5cd0d630b72af9e5fe8156268d36f65288193c494e2c2ced69c9e6829288b6
@@ -207,7 +207,11 @@ module RbbtRESTHelpers
207
207
  data = nil
208
208
  excel_file = TmpFile.tmp_file
209
209
  tsv.excel(excel_file, :sort_by => @excel_sort_by, :sort_by_cast => @excel_sort_by_cast, :name => true, :remove_links => true)
210
- send_file excel_file, :type => 'application/vnd.ms-excel', :filename => 'table.xls'
210
+ name = tsv_options[:table_id]
211
+ name ||= "rbbt-table"
212
+ name = name.sub(/\s/,'_')
213
+ name = name.sub('.tsv','')
214
+ send_file excel_file, :type => 'application/vnd.ms-excel', :filename => "#{name}.xls"
211
215
  when "heatmap"
212
216
  require 'rbbt/util/R'
213
217
  tsv, tsv_options = load_tsv(fragment_file)
@@ -59,7 +59,10 @@ module Sinatra
59
59
 
60
60
  set :environment, ENV["RACK_ENV"].to_sym if ENV["RACK_ENV"]
61
61
 
62
- attr_accessor :ajax, :layout, :format, :size, :update, :cache_type, :_, :profile
62
+ attr_accessor :ajax, :layout, :size, :update, :cache_type, :_, :profile
63
+
64
+ # This collides with a function in sinatra
65
+ #attr_accessor :format
63
66
 
64
67
 
65
68
  enable :cross_origin
@@ -52,8 +52,9 @@ module WorkflowRESTHelpers
52
52
 
53
53
  def execution_type(workflow, task)
54
54
  export = type_of_export(workflow, task)
55
+ return :slurm if ENV["RBBT_REST_USE_SLURM"] == 'true'
55
56
  return cache_type if cache_type
56
- return :sync if export == :exec and format == :html
57
+ return :sync if export == :exec and @format == :html
57
58
  return export if export == :exec
58
59
  return :asynchronous
59
60
  end
@@ -82,7 +83,7 @@ module WorkflowRESTHelpers
82
83
  end
83
84
 
84
85
  def show_exec_result(result, workflow, task)
85
- case format.to_sym
86
+ case @format.to_sym
86
87
  when :html
87
88
  show_result_html result, workflow, task, nil
88
89
  when :json
@@ -108,14 +109,14 @@ module WorkflowRESTHelpers
108
109
  when :jobname
109
110
  halt 200, nil
110
111
  else
111
- raise "Unsupported format: #{ format }"
112
+ raise "Unsupported format: #{ @format }"
112
113
  end
113
114
  end
114
115
 
115
116
  def show_result(job, workflow, task, params = nil)
116
117
  return show_result_html nil, workflow, task, job.name, job, params if @fragment
117
118
 
118
- case format.to_sym
119
+ case @format.to_sym
119
120
  when :html
120
121
  show_result_html :load, workflow, task, job.name, job, params
121
122
  when :table
@@ -183,7 +184,7 @@ module WorkflowRESTHelpers
183
184
  EOF
184
185
  send_file png_file, :type => 'image/png', :filename => job.name + ".heatmap.png"
185
186
  else
186
- raise "Unsupported format: #{ format }"
187
+ raise "Unsupported format: #{ @format }"
187
188
  end
188
189
  end
189
190
 
@@ -249,7 +250,7 @@ module WorkflowRESTHelpers
249
250
  job.join
250
251
  end
251
252
 
252
- if format == :jobname
253
+ if @format == :jobname
253
254
  job.name
254
255
  else
255
256
  job_url = job.respond_to?(:url)? job.url : File.join("/", workflow.to_s, task, job.name)
@@ -270,7 +271,7 @@ module WorkflowRESTHelpers
270
271
  # $rest_cache_semaphore is defined in rbbt-util etc/app.d/semaphores.rb
271
272
  job.fork($rest_cache_semaphore) unless job.started?
272
273
 
273
- if format == :jobname
274
+ if @format == :jobname
274
275
  job.soft_grace
275
276
  content_type :text
276
277
  job.name
@@ -283,6 +284,15 @@ module WorkflowRESTHelpers
283
284
  rescue Exception
284
285
  Log.exception $!
285
286
  end
287
+ when :slurm
288
+ require 'rbbt/hpc'
289
+ batch_system = ENV["BATCH_SYSTEM"] || "SLURM"
290
+ system = HPC.batch_system batch_system
291
+ system.orchestrate_job(job, {})
292
+ job_url = job.respond_to?(:url)? job.url : File.join("/", workflow.to_s, task, job.name)
293
+ job_url += "?_format=#{@format}" if @format
294
+ iii job_url
295
+ redirect to(job_url)
286
296
  else
287
297
  raise "Unsupported execution_type: #{ execution_type }"
288
298
  end
@@ -291,7 +301,7 @@ module WorkflowRESTHelpers
291
301
  def recursive_clean_job(workflow, job)
292
302
  job.recursive_clean
293
303
 
294
- if format == :jobname
304
+ if @format == :jobname
295
305
  halt 200, job.name
296
306
  elsif ajax
297
307
  halt 200
@@ -309,9 +319,9 @@ module WorkflowRESTHelpers
309
319
  def clean_job(workflow, job)
310
320
  job.clean
311
321
 
312
- if format == :jobname
322
+ if @format == :jobname
313
323
  halt 200, job.name
314
- elsif ajax or format == :json
324
+ elsif @ajax or @format == :json
315
325
  halt 200
316
326
  else
317
327
  redirect to(File.join("/", workflow.to_s, job.task_name.to_s))
@@ -44,7 +44,7 @@ module Sinatra
44
44
  self.instance_eval workflow.libdir.lib['sinatra.rb'].read, workflow.libdir.lib['sinatra.rb'].find if workflow.respond_to?(:libdir) and File.exist? workflow.libdir.lib['sinatra.rb']
45
45
 
46
46
  get "/#{workflow.to_s}" do
47
- case format
47
+ case @format
48
48
  when :json
49
49
  content_type "application/json"
50
50
 
@@ -56,14 +56,14 @@ module Sinatra
56
56
  end
57
57
 
58
58
  get "/#{workflow.to_s}/documentation" do
59
- case format
59
+ case @format
60
60
  when :html
61
61
  workflow_render('tasks', workflow)
62
62
  when :json
63
63
  content_type "application/json"
64
64
  workflow.documentation.to_json
65
65
  else
66
- raise "Unsupported format specified: #{ format }"
66
+ raise "Unsupported format specified: #{ @format }"
67
67
  end
68
68
  end
69
69
 
@@ -72,14 +72,14 @@ module Sinatra
72
72
 
73
73
  raise Workflow::TaskNotFoundException.new workflow, task unless workflow.tasks.include? task.to_sym
74
74
 
75
- case format
75
+ case @format
76
76
  when :html
77
77
  workflow_render('task_info', workflow, nil, :cache => false )
78
78
  when :json
79
79
  content_type "application/json"
80
80
  workflow.task_info(task.to_sym).to_json
81
81
  else
82
- raise "Unsupported format specified: #{ format }"
82
+ raise "Unsupported format specified: #{ @format }"
83
83
  end
84
84
  end
85
85
 
@@ -88,14 +88,14 @@ module Sinatra
88
88
 
89
89
  raise Workflow::TaskNotFoundException.new workflow, task unless workflow.tasks.include? task.to_sym
90
90
 
91
- case format
91
+ case @format
92
92
  when :html
93
93
  workflow_render('task_dependencies', workflow)
94
94
  when :json
95
95
  content_type "application/json"
96
96
  workflow.task_dependencies[task.to_sym].to_json
97
97
  else
98
- raise "Unsupported format specified: #{ format }"
98
+ raise "Unsupported format specified: #{ @format }"
99
99
  end
100
100
  end
101
101
 
@@ -116,7 +116,7 @@ module Sinatra
116
116
 
117
117
  task_parameters[:jobname] = jobname
118
118
 
119
- if complete_input_set(workflow, task, task_parameters) || format != :html || jobname
119
+ if complete_input_set(workflow, task, task_parameters) || @format != :html || jobname
120
120
  issue_job(workflow, task, jobname, task_parameters)
121
121
  else
122
122
  workflow_render('form', workflow, task, task_parameters)
@@ -185,7 +185,7 @@ module Sinatra
185
185
  error_for job
186
186
  when error
187
187
  error_for job
188
- when (exec_type == :asynchronous or exec_type == :async)
188
+ when (exec_type == :asynchronous or exec_type == :async or exec_type == :slurm)
189
189
  case @format.to_s
190
190
  when 'json', 'raw', 'binary'
191
191
  halt 202
@@ -226,7 +226,7 @@ module Sinatra
226
226
 
227
227
  halt 404, "Job not found: #{job.path} (#{job.status})" if job.status == :noinfo and not job.done?
228
228
 
229
- case format
229
+ case @format
230
230
  when :html
231
231
  workflow_render('job_info', workflow, task, :job => job, :info => job.info)
232
232
  when :input_bundle
@@ -262,7 +262,7 @@ module Sinatra
262
262
  end
263
263
  halt 200, info_json.to_json
264
264
  else
265
- raise "Unsupported format specified: #{ format }"
265
+ raise "Unsupported format specified: #{ @format }"
266
266
  end
267
267
  end
268
268
 
@@ -276,14 +276,14 @@ module Sinatra
276
276
 
277
277
  job = workflow.fast_load_id(File.join(task, job))
278
278
 
279
- case format
279
+ case @format
280
280
  when :html
281
281
  workflow_render('job_files', workflow, task, :info => job.info, :job => job)
282
282
  when :json
283
283
  content_type "application/json"
284
284
  job.files.to_json
285
285
  else
286
- raise "Unsupported format specified: #{ format }"
286
+ raise "Unsupported format specified: #{ @format }"
287
287
  end
288
288
  end
289
289
 
@@ -141,7 +141,7 @@ $cyan: rgba(50, 211, 255, 1)
141
141
  .dependencies, .job_info
142
142
  .status
143
143
  color: $cyan
144
- .status.waiting, .status.noinfo
144
+ .status.waiting, .status.noinfo, .status.cleaned
145
145
  color: $yellow
146
146
  .status.started
147
147
  color: $cyan
@@ -22,7 +22,7 @@
22
22
  - when String
23
23
  %p= card.description
24
24
  - when Proc
25
- = capture_haml &card.description
25
+ = capture &card.description
26
26
  - else
27
27
  - raise "Unknown description: #{fff card.description}"
28
28
 
@@ -36,7 +36,7 @@
36
36
  - inputs, input_block = input
37
37
  - if inputs.select{|input| @params[input.to_s].nil? }.any?
38
38
  - require_parameters = true
39
- - exception_html = capture_haml &input_block
39
+ - exception_html = capture &input_block
40
40
  - break
41
41
 
42
42
  - else
@@ -51,5 +51,5 @@
51
51
  - if require_parameters
52
52
  .ui.message.warning Please configure the parameters to execute the action
53
53
  - else
54
- = capture_haml &block
54
+ = capture &block
55
55
 
@@ -96,7 +96,7 @@
96
96
  - if defined? block and block
97
97
  /-- description block --
98
98
  .description.ui.basic.segment<
99
- = capture_haml &block
99
+ = capture &block
100
100
 
101
101
  - card.sections.each do |name,section_block|
102
102
  .ui.very.basic.segment(id="#{Misc.snake_case(name)}")
@@ -98,7 +98,7 @@
98
98
  - if defined? block and block
99
99
  /-- description block --
100
100
  .description.ui.basic.segment<
101
- = capture_haml &block
101
+ = capture &block
102
102
 
103
103
  - card.sections.each do |name,section_block|
104
104
  .ui.very.basic.segment(id="#{Misc.snake_case(name)}")
@@ -4,8 +4,11 @@
4
4
  %ul.dependencies
5
5
  - job.dependencies.reverse.each do |dep|
6
6
  - dep_workflow = dep.workflow
7
+ - dep_workflow = nil if dep_workflow == ""
7
8
  - dep_workflow ||= dep.task.workflow if dep.task
9
+ - dep_workflow = nil if dep_workflow == ""
8
10
  - dep_workflow ||= File.basename(File.dirname(File.dirname(dep.path)))
11
+ - dep_workflow = nil if dep_workflow == ""
9
12
  - str = [dep_workflow, dep.task_name, dep.name].compact * " - "
10
13
  - remote = true if Open.remote?(dep.path) || Open.ssh?(dep.path)
11
14
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rbbt-rest
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.9.0
4
+ version: 1.9.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Miguel Vazquez
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-03-17 00:00:00.000000000 Z
11
+ date: 2023-09-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: modular-scale
@@ -1853,7 +1853,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
1853
1853
  - !ruby/object:Gem::Version
1854
1854
  version: '0'
1855
1855
  requirements: []
1856
- rubygems_version: 3.4.8
1856
+ rubygems_version: 3.5.0.dev
1857
1857
  signing_key:
1858
1858
  specification_version: 4
1859
1859
  summary: Rbbt Web and REST interfaces