rbbt-rest 1.8.62 → 1.8.63

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: e6d91a32b4426c4b8be4988e10eca7540db94676
4
- data.tar.gz: 888c9c6f5dd89be6ce380c42a3a007775671cf56
3
+ metadata.gz: 575bc1891fa7c9dcc1334107cd7523c6583254be
4
+ data.tar.gz: 6b6c79f02c11e216ce8d5ee6ec0242b25ac21529
5
5
  SHA512:
6
- metadata.gz: 4bbfa4d37fdd5079a03d5f58f989bbf9681c273c3823b51c7e84aee9e4cb820bb43de36f614bff0cf0e86021d303348ab6097e123d079b98486cc3b7eb3d7a7c
7
- data.tar.gz: ec91cee052738256cf508596a813e0d076ce25bd3b2f21d0138cc37ba2a6c9e067ea5de8633dcc370e76ed0e309237ddaebd275d5cb2d8fed352b327cf1e473f
6
+ metadata.gz: bae019d9ac143210c65952a3d3ca74d7c64d9326a19618c530cd7599743dd6b50a7f125ed736e8c85c2383eba09a742a98fe4f8e7f5ca16fa6bfbc33d58176c5
7
+ data.tar.gz: 3e5b7aecef6c228e73525868c3cbc7b0284b9ea159f598b831d0bc80217f8b0c513346135785c41cd7112d09d16d3746e1003ec91eebaa08d7dc81fa3f22e2d9
@@ -1,9 +1,11 @@
1
1
 
2
2
  module Sinatra
3
3
  module RbbtToolHelper
4
- def tool(toolname, options = {})
4
+ def tool(toolname, options = {}, &block)
5
5
  options[:id] ||= toolname.to_s + "_#{rand(10000)}"
6
6
 
7
+ options[:block] = block if block_given?
8
+
7
9
  template_file = locate_template("tools/#{toolname}")
8
10
  Log.debug "Loading tool #{toolname} from: #{template_file}"
9
11
  content = Tilt::HamlTemplate.new(template_file, :filename => template_file).render(self, options)
@@ -37,6 +37,10 @@ module Sinatra
37
37
  add_workflow_resource(workflow, add_resource == :priority) if add_resource
38
38
  workflow.documentation
39
39
 
40
+ if ENV["RBBT_WORKFLOW_EXPORT_ALL"] == "true"
41
+ workflow.export *workflow.tasks.keys
42
+ end
43
+
40
44
 
41
45
  self.instance_eval workflow.libdir.lib['sinatra.rb'].read, workflow.libdir.lib['sinatra.rb'].find if workflow.respond_to?(:libdir) and File.exists? workflow.libdir.lib['sinatra.rb']
42
46
 
@@ -201,7 +205,7 @@ module Sinatra
201
205
 
202
206
  case format
203
207
  when :html
204
- workflow_render('job_info', workflow, task, :info => job.info)
208
+ workflow_render('job_info', workflow, task, :job => job, :info => job.info)
205
209
  when :json
206
210
  content_type "application/json"
207
211
  info_json = {}
@@ -65,7 +65,7 @@ module WorkflowRESTHelpers
65
65
 
66
66
  task_inputs = {}
67
67
  inputs.each do |input|
68
- stream = input_options.include?(input) and input_options[input][:stream]
68
+ stream = input_options.include?(input) && input_options[input][:stream]
69
69
  value = prepare_input(params, input, input_types[input], stream)
70
70
  task_inputs[input] = value
71
71
  end
@@ -112,7 +112,8 @@ module WorkflowRESTHelpers
112
112
  end
113
113
 
114
114
  def show_result(job, workflow, task, params = nil)
115
- return show_result_html nil, workflow, task, job.name, job if @fragment
115
+ #return show_result_html nil, workflow, task, job.name, job if @fragment
116
+ return show_result_html nil, workflow, task, job.name, job, params if @fragment
116
117
 
117
118
  case format.to_sym
118
119
  when :html
@@ -28,7 +28,10 @@ module WorkflowRESTHelpers
28
28
  server_key = $app_name
29
29
  html_dir = job.file('.html')
30
30
  FileUtils.mkdir_p html_dir.find unless File.exists? html_dir.find
31
- cache_file = html_dir[server_key]
31
+ other_params = params.dup
32
+ other_params.delete_if{|k,v| k[0] == "_"}
33
+ other_params.delete :result
34
+ cache_file = html_dir[server_key + "_" << Misc.obj2digest(other_params)]
32
35
  cache_type = false if params[:cache] == FalseClass
33
36
  render(template_file, locals, layout_file, [task,workflow,job.name] * "-", :cache_type => cache_type, :cache_file => cache_file)
34
37
  else
@@ -4,18 +4,27 @@
4
4
 
5
5
  - if info[:dependencies] and info[:dependencies].any?
6
6
  %h3 Dependencies
7
- %ul
7
+ = partial_render('partials/dependencies', :job => job)
8
+ -#%ul
8
9
 
9
10
  - task_exports = workflow.synchronous_exports + workflow.asynchronous_exports
10
11
  - task_exports = task_exports.collect{|t| t.to_s}
11
- - info[:dependencies].each do |task,name,path|
12
- - if Open.remote? path
13
- - url = path.split("?").first
14
- - else
15
- - url = "/" + [workflow.to_s, task.to_s, name.to_s] * "/"
12
+ -# info[:dependencies].each do |task,name,path|
13
+ - dep = Step.new path
14
+ - d_workflow = dep.workflow || "Unknown Workflow"
15
+ - wf = workflow if d_workflow.nil? || d_workflow.to_s == workflow.to_s
16
+ - if wf.nil? and d_workflow
17
+ - wf ||= begin
18
+ - Kernel.const_get d_workflow
19
+ - rescue
20
+
16
21
  %li
17
- (#{workflow}##{task})
18
- - if task_exports.include? task.to_s
22
+ (#{d_workflow}##{task})
23
+ - if Open.remote? path
24
+ - url = path.split("?").first
25
+ %a(href=url) #{ name }
26
+ - elsif wf and wf.task_exports.include? task
27
+ - url = "/" + [d_workflow.to_s, task.to_s, name.to_s] * "/"
19
28
  %a(href=url) #{ name }
20
29
  - else
21
30
  = name
@@ -0,0 +1,39 @@
1
+
2
+ %ul.dependencies
3
+ - job.dependencies.each do |dep|
4
+ - dep_workflow = dep.workflow
5
+ - dep_workflow ||= dep.task.workflow if dep.task
6
+ - dep_workflow ||= File.basename(File.dirname(File.dirname(dep.path)))
7
+ - str = [dep_workflow, dep.task_name, dep.name].compact * " - "
8
+ - if dep.file(':progress').exists?
9
+ - status = dep.status + " - " + dep.file(:progress).yaml[:last_percent] + "%"
10
+ - else
11
+ - status = dep.status
12
+ - name = dep.name
13
+ %li
14
+ %span.workflow= dep_workflow
15
+ %span.task= dep.task_name
16
+ %span.name
17
+ - if String === dep_workflow
18
+ - wf ||= begin
19
+ - Kernel.const_get dep_workflow
20
+ - rescue
21
+ - elsif Module === dep_workflow
22
+ - wf = dep_workflow
23
+
24
+ - if Open.remote? dep.path
25
+ - url = path.split("?").first
26
+ %a(href=url) #{ name }
27
+
28
+ - elsif wf and wf.task_exports.include? dep.task_name.to_sym
29
+ - url = "/" + [dep_workflow.to_s, dep.task_name.to_s, dep.name.to_s] * "/"
30
+ %a(href=url) #{ name }
31
+
32
+ - else
33
+ = name
34
+
35
+
36
+ %span.status(class="#{dep.status}") [#{status}]
37
+
38
+ - if dep.dependencies.any?
39
+ = partial_render('partials/dependencies', :job => dep)
@@ -266,12 +266,12 @@ function get_sign_gradient(values, color1, color0, color2){
266
266
  forArray(values, function(value){
267
267
  if (typeof value == 'string') value = parseFloat(value)
268
268
  if (typeof value == 'number'){
269
- if (value > 0){
269
+ if (value >= 0){
270
270
  var a = value/max
271
- colors.push(color0.blend(color1, a).toString())
271
+ colors.push(color0.blend(color2, a).toString())
272
272
  }else{
273
273
  var a = value/min
274
- colors.push(color0.blend(color2, a).toString())
274
+ colors.push(color0.blend(color1, a).toString())
275
275
  }
276
276
  }else{
277
277
  colors.push(undefined)
@@ -15,6 +15,7 @@ rbbt.plots.aes.map_aesthetic = function(aes, mapper, map_obj){
15
15
  aes = map_obj[aes]
16
16
  }
17
17
  }
18
+ aes.push(0)
18
19
  return get_gradient(aes, '#EABD5D', '#40324F')
19
20
  case 'sign-gradient':
20
21
  if (map_obj){
@@ -72,6 +73,29 @@ rbbt.plots.aes.get_properties = function(list, rules, type, namespace){
72
73
 
73
74
  if (rule.entity_type && rule.entity_type != type && rule.entity_type != list.format) return
74
75
 
76
+ if (rule.map){
77
+ var deferred = m.deferred()
78
+ var entry = rule.map
79
+ var obj = rule.mapper_obj
80
+ if (undefined === name) name = entry
81
+
82
+ var keys = info[entry]
83
+ if (undefined === value && entry == 'type') keys = type
84
+ if (undefined === value && entry == 'code') keys = list.codes
85
+
86
+ var value = keys.map(function(k){ return obj[k]})
87
+ deferred.resolve(value)
88
+ promise = deferred.promise
89
+ if (extract){
90
+ promise = promise.then(function(res){
91
+ if (typeof res == 'object')
92
+ return res.map(function(elem){ return extract.call(null, elem)})
93
+ else
94
+ return extract.call(null, res)
95
+ })
96
+ }
97
+ }
98
+
75
99
  if (rule.info){
76
100
  var property = rule.property
77
101
  var deferred = m.deferred()
@@ -262,6 +286,7 @@ rbbt.plots.aes.set_aes = function(list, aes_rules, type){
262
286
  if (undefined === property && name == 'code') property = list.codes.slice()
263
287
  if (undefined === property) return
264
288
 
289
+ console.log([property, mapper, mapper_obj])
265
290
  var aes_values = rbbt.plots.aes.map_aesthetic(property, mapper, mapper_obj)
266
291
 
267
292
  if (undefined === list.aes[aes]){
@@ -0,0 +1,12 @@
1
+ - filename = 'R-png_' << rand(10000).to_s unless defined? filename and filename
2
+ - text = filename unless defined? text and text
3
+
4
+ - width = 500 unless defined? width and width
5
+ - height = 500 unless defined? height and height
6
+ - plot = block.call unless (defined? plot and plot) or not defined? block
7
+
8
+ - filename += '.png' unless filename =~ /\.png$/i
9
+ = resource filename, text, :image do |filename|
10
+ - CSBC.ic50.tsv.transpose.R "png.file = '#{filename}';\n" + plot
11
+
12
+
@@ -6,7 +6,8 @@
6
6
 
7
7
  - extra = "" unless defined? extra
8
8
 
9
- - url = @step.instance_variable_get(:@url_path)
9
+ - url = @fullpath
10
+
10
11
  %svg(id=id)
11
12
 
12
13
  :ruby
@@ -2,14 +2,29 @@
2
2
  - id ||= title || ("scatter-" << (1000 * rand).to_i.to_s)
3
3
  - title ||= "Scatter Plot"
4
4
 
5
- - size ||= "size"
6
- - x ||= "x"
7
- - y ||= "y"
5
+ - if data.fields.length == 1
6
+ - y ||= data.fields.first
7
+ - x_values = Hash[*data.keys.zip((0..data.length-1).to_a).flatten]
8
+ - size_values = Hash[*data.keys.zip([1] * data.length).flatten]
9
+
10
+ - if data.fields.length == 2
11
+ - x ||= data.fields.first
12
+ - y ||= data.fields.last
13
+ - size_values = Hash[*data.keys.zip([1] * data.length).flatten]
14
+
15
+ - if data.fields.length == 3
16
+ - x ||= data.fields.first
17
+ - y ||= data.fields[1]
18
+ - size ||= data.fields.last
19
+ - size_values = Hash[*data.keys.zip([1] * data.length).flatten]
8
20
 
9
21
  - data_values = []
10
22
  - data.through do |key,values|
11
23
  - label = key.respond_to?(:name)? key.name || key : key
12
- - data_values << {:label => label, :x => values[x], :y => values[y], :size => values[size]}
24
+ - y_value = (defined?(y) and y) ? values[y] : y_values[y].to_f
25
+ - x_value = (defined?(x) and x) ? values[x] : x_values[key].to_f
26
+ - size_value = (defined?(size) and size) ? values[size] : size_values[key].to_f
27
+ - data_values << {:label => label, :x => x_value, :y => y_value, :size => size_value}
13
28
 
14
29
  - plot_data = [{:key => "Group", :values => data_values}]
15
30
 
@@ -3,9 +3,23 @@
3
3
  :sass
4
4
  span.progress_time
5
5
  color: grey
6
- .wait.ui.segment
7
- overflow: auto
8
- text-overflow: ellipsis
6
+ .dependencies
7
+ .wait.ui.segment
8
+ overflow: auto
9
+ text-overflow: ellipsis
10
+ .status
11
+ color: grey
12
+ .status.done
13
+ color: green
14
+ .status.error
15
+ color: red
16
+ .status.dependencies
17
+ color: orange
18
+ .workflow
19
+ font-weight: bold
20
+ .task
21
+ font-style: italic
22
+
9
23
  .wait.ui.segment.info.message
10
24
  %h3.ui.header Waiting on #{format_name File.basename(job.name)}
11
25
 
@@ -58,4 +72,9 @@
58
72
  - next if line.nil? or line.strip.empty?
59
73
  %li= line
60
74
 
61
-
75
+ - if job.dependencies.any?
76
+
77
+ .ui.segment
78
+ %h3.ui.header Dependencies
79
+ .content
80
+ = partial_render('partials/dependencies', :job => job)
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.8.62
4
+ version: 1.8.63
5
5
  platform: ruby
6
6
  authors:
7
7
  - Miguel Vazquez
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-07-05 00:00:00.000000000 Z
11
+ date: 2017-08-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -255,6 +255,7 @@ files:
255
255
  - share/views/main.haml
256
256
  - share/views/monitor/jobs.haml
257
257
  - share/views/monitor/locks.haml
258
+ - share/views/partials/dependencies.haml
258
259
  - share/views/partials/form.haml
259
260
  - share/views/partials/table.haml
260
261
  - share/views/partials/table/column.haml
@@ -1825,6 +1826,7 @@ files:
1825
1826
  - share/views/public/plugins/underscore/js/underscore.js
1826
1827
  - share/views/public/robots.txt
1827
1828
  - share/views/tasks.haml
1829
+ - share/views/tools/Rpng.haml
1828
1830
  - share/views/tools/nvd3.haml
1829
1831
  - share/views/tools/nvd3/chart.haml
1830
1832
  - share/views/tools/nvd3/histogram.haml