rbbt-util 5.21.97 → 5.21.98

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
  SHA1:
3
- metadata.gz: 10ef32da69366f0d5db85823d95e5e2461817656
4
- data.tar.gz: 7db675c42bfb34aae38611247d22cc5c3c6e4572
3
+ metadata.gz: 12d10e9ae9d12ed354fe3d8df24a14ea030bb1eb
4
+ data.tar.gz: 13416b83ec00f7dae0fc97479746cd636cf53a5c
5
5
  SHA512:
6
- metadata.gz: db31f57eaa344bbbcac12c5a85dad2e46b555f6d19545a55854017c6dc8147d8d321d84f0a2578c29104b1d70b6de322ff5d49dd44c01452fb36fb2ebb59aa0b
7
- data.tar.gz: 36f1dbc9bdf5242b02ce9944ce5ae0b93b7b51df4a1a2c68a6370498f7571ca2a9523b5867ce6a637367d26c431d4738a0159de17285f34310a9b0a29d62107a
6
+ metadata.gz: d86681d7392cd8a0dae501a10a792e91ca93a026adb918d386d5a5b83916525f66947d233bbe5302cf65c2c02ae2b19582ce52872946b98265c5d8752f02ea2f
7
+ data.tar.gz: a93dc769c50f8d08e74d8088caa7c953aee25a78b47576f0015fd8b73f113d736a234534e1faf791eee6e938686db4dcd03a9f1ac44e6643ce5aaca8b8da0a56
data/lib/rbbt/resource.rb CHANGED
@@ -24,13 +24,19 @@ module Resource
24
24
  base.subdir = ''
25
25
  base.resources = {}
26
26
  base.rake_dirs = {}
27
+ base.search_paths = Path::SEARCH_PATHS.dup
27
28
  base.remote_server = Resource.remote_servers[base.to_s]
28
29
  base
29
30
  end
30
31
 
31
32
  attr_accessor :pkgdir, :subdir, :resources, :rake_dirs, :remote_server, :search_paths
32
33
 
33
- def root()
34
+ def set_libdir(value = nil)
35
+ _libdir = value || Path.caller_lib_dir
36
+ search_paths.merge!(:lib => File.join(_libdir, '{TOPLEVEL}', '{SUBPATH}'))
37
+ end
38
+
39
+ def root
34
40
  Path.setup @subdir || "", @pkgdir, self, @search_paths
35
41
  end
36
42
 
@@ -361,6 +361,7 @@ class WorkflowRESTClient
361
361
  end
362
362
 
363
363
  def clean
364
+ init_job
364
365
  begin
365
366
  params = {:_update => :clean}
366
367
  WorkflowRESTClient.clean_url(url, params) if @url
@@ -234,6 +234,16 @@ module Misc
234
234
  "{"<< obj.collect{|k,v| obj2str(k) + '=>' << obj2str(v)}*"," << "}"
235
235
  when Symbol
236
236
  obj.to_s
237
+ when (defined? Path and Path)
238
+ if obj.exists?
239
+ if obj.directory?
240
+ "directory: #{obj.glob("**/*")}"
241
+ else
242
+ "file md5: #{digest(obj.read)}"
243
+ end
244
+ else
245
+ obj + " (file missing)"
246
+ end
237
247
  when String
238
248
  if obj.length > HASH2MD5_MAX_STRING_LENGTH
239
249
  sample_large_obj(obj, HASH2MD5_MAX_STRING_LENGTH)
@@ -1,6 +1,15 @@
1
1
  require 'net/http'
2
2
  require 'rbbt-util'
3
3
 
4
+ class Net::HTTPGenericRequest
5
+ alias send_request_with_body_stream_orig send_request_with_body_stream
6
+ def send_request_with_body_stream(*args)
7
+ Thread.new do
8
+ send_request_with_body_stream_orig(*args)
9
+ end
10
+ end
11
+ end
12
+
4
13
  module RbbtMutiplartPayload
5
14
  BOUNDARY = "Rbbt_Param_Stream"
6
15
  EOL = "\r\n"
@@ -97,6 +106,7 @@ module RbbtMutiplartPayload
97
106
 
98
107
  req = Net::HTTP::Post.new(uri.path)
99
108
  if stream_input
109
+ Log.low "Streaming input #{stream_input.to_s}"
100
110
  req.content_type = "multipart/form-data; boundary=" + RbbtMutiplartPayload::BOUNDARY + '; stream=' + stream_input.to_s
101
111
  req.body_stream = post_data_stream
102
112
  else
@@ -110,6 +120,7 @@ module RbbtMutiplartPayload
110
120
  timeout = 60 * timeout_minutes
111
121
  Misc.open_pipe do |sin|
112
122
  Net::HTTP.start(uri.hostname, uri.port, :read_timeout => timeout) do |http|
123
+ Log.low "Starting connection for streaming job"
113
124
  http.request(req) do |res|
114
125
  if Net::HTTPSuccess === res
115
126
  url_path = res["RBBT-STREAMING-JOB-URL"]
data/lib/rbbt/util/tar.rb CHANGED
@@ -93,22 +93,6 @@ module Misc
93
93
  # directory
94
94
  def self.untar(io, destination)
95
95
  return _untar_cmd(io, destination)
96
-
97
- #Gem::Package::TarReader.new io do |tar|
98
- # tar.each do |tarfile|
99
- # destination_file = File.join destination, tarfile.full_name
100
-
101
- # if tarfile.directory?
102
- # FileUtils.mkdir_p destination_file
103
- # else
104
- # destination_directory = File.dirname(destination_file)
105
- # FileUtils.mkdir_p destination_directory unless File.directory?(destination_directory)
106
- # File.open destination_file, "wb" do |f|
107
- # f.print tarfile.read
108
- # end
109
- # end
110
- # end
111
- #end
112
96
  end
113
97
  end
114
98
 
@@ -730,11 +730,12 @@ module Workflow
730
730
  _inputs
731
731
  end
732
732
 
733
- def real_dependencies(task, jobname, inputs, dependencies)
733
+ def real_dependencies(task, orig_jobname, inputs, dependencies)
734
734
  real_dependencies = []
735
735
  path_deps = {}
736
736
  dependencies.each do |dependency|
737
737
  _inputs = IndiferentHash.setup(inputs.dup)
738
+ jobname = orig_jobname
738
739
  jobname = _inputs[:jobname] if _inputs.include? :jobname
739
740
 
740
741
  real_dep = case dependency
@@ -803,26 +804,24 @@ module Workflow
803
804
 
804
805
  TAG = :hash
805
806
  def step_path(taskname, jobname, inputs, dependencies, extension = nil)
806
- #Proc.new{
807
- raise "Jobname makes an invalid path: #{ jobname }" if jobname =~ /\.\./
808
- if inputs.length > 0 or dependencies.any?
809
- tagged_jobname = case TAG
810
- when :hash
811
- hash_str = Misc.obj2digest({:inputs => inputs, :dependencies => dependencies})
812
- jobname + '_' << hash_str
813
- else
814
- jobname
815
- end
816
- else
817
- tagged_jobname = jobname
818
- end
807
+ raise "Jobname makes an invalid path: #{ jobname }" if jobname =~ /\.\./
808
+ if inputs.length > 0 or dependencies.any?
809
+ tagged_jobname = case TAG
810
+ when :hash
811
+ hash_str = Misc.obj2digest({:inputs => inputs, :dependencies => dependencies})
812
+ jobname + '_' << hash_str
813
+ else
814
+ jobname
815
+ end
816
+ else
817
+ tagged_jobname = jobname
818
+ end
819
819
 
820
- if extension and not extension.empty?
821
- tagged_jobname = tagged_jobname + ('.' << extension.to_s)
822
- end
820
+ if extension and not extension.empty?
821
+ tagged_jobname = tagged_jobname + ('.' << extension.to_s)
822
+ end
823
823
 
824
- workdir[taskname][tagged_jobname].find
825
- #}
824
+ workdir[taskname][tagged_jobname].find
826
825
  end
827
826
 
828
827
  def id_for(path)
@@ -72,7 +72,7 @@ class Step
72
72
 
73
73
  load_inputs_from_info if @inputs.nil?
74
74
 
75
- NamedArray.setup(@inputs, task.inputs) if task && task.inputs && ! NamedArray === @inputs
75
+ NamedArray.setup(@inputs, task.inputs) if task && task.inputs && !(NamedArray === @inputs)
76
76
 
77
77
  @inputs || []
78
78
  end
@@ -145,6 +145,53 @@ class Step
145
145
  raise $!
146
146
  end
147
147
 
148
+ new_inputs = []
149
+ @inputs.each_with_index do |input,i|
150
+ name = @task.inputs[i]
151
+ type = @task.input_types[name]
152
+
153
+ if type == :directory
154
+ directory_inputs = file('directory_inputs')
155
+ input_source = directory_inputs['.source'][name].find
156
+ input_dir = directory_inputs[name].find
157
+
158
+ case input
159
+ when Path
160
+ if input.directory?
161
+ new_inputs << input
162
+ else
163
+ input.open do |io|
164
+ begin
165
+ Misc.untar(io, input_source)
166
+ rescue
167
+ raise ParameterException, "Error unpackaging tar directory input '#{name}':\n\n#{$!.message}"
168
+ end
169
+ end
170
+ tar_1 = input_source.glob("*")
171
+ raise ParameterException, "When using tar.gz files for directories, the directory must be the single first level entry" if tar_1.length != 1
172
+ FileUtils.ln_s Misc.path_relative_to(directory_inputs, tar_1.first), input_dir
173
+ new_inputs << input_dir
174
+ end
175
+ when File, IO, Tempfile
176
+ begin
177
+ Misc.untar(Open.gunzip(input), input_source)
178
+ rescue
179
+ raise ParameterException, "Error unpackaging tar directory input '#{name}':\n\n#{$!.message}"
180
+ end
181
+ tar_1 = input_source.glob("*")
182
+ raise ParameterException, "When using tar.gz files for directories, the directory must be the single first level entry" if tar_1.length != 1
183
+ FileUtils.ln_s Misc.path_relative_to(directory_inputs, tar_1.first), input_dir
184
+ new_inputs << input_dir
185
+ else
186
+ raise ParameterException, "Format of directory input '#{name}' not understood: #{Misc.fingerprint input}"
187
+ end
188
+ else
189
+ new_inputs << input
190
+ end
191
+ end if @inputs
192
+
193
+ @inputs = new_inputs if @inputs
194
+
148
195
  if not task.inputs.nil?
149
196
  info_inputs = @inputs.collect do |i|
150
197
  if Path === i
@@ -200,7 +247,8 @@ class Step
200
247
  end
201
248
  end
202
249
  begin
203
- if status != :done
250
+ status = self.status
251
+ if status != :done and status != :error and status != :aborted
204
252
  Misc.insist do
205
253
  set_info :done, (done_time = Time.now)
206
254
  set_info :total_time_elapsed, (total_time_elapsed = done_time - issue_time)
data/share/Rlib/util.R CHANGED
@@ -654,7 +654,15 @@ rbbt.install.github <- function(pkg, ...){
654
654
 
655
655
  rbbt.require <- function(pkg, ...){
656
656
  list.of.packages <- c(pkg)
657
- new.packages <- list.of.packages[!(list.of.packages %in% installed.packages()[,"Package"])]
657
+
658
+ clean.packages <- c()
659
+ for (pkg in list.of.packages){
660
+ parts = strsplit(pkg,'/')[[1]]
661
+ clean.packages <- c(clean.packages, parts[length(parts)])
662
+ }
663
+
664
+ new.packages <- list.of.packages[!(clean.packages %in% installed.packages()[,"Package"])]
665
+
658
666
  for (pkg in new.packages){
659
667
  if (!rbbt.install.github(pkg, ...)){
660
668
  if (!rbbt.install.CRAN(pkg, ...)){
@@ -664,6 +672,7 @@ rbbt.require <- function(pkg, ...){
664
672
  }
665
673
  }
666
674
  }
667
- library(list.of.packages, character.only=T)
675
+
676
+ library(clean.packages, character.only=T)
668
677
  }
669
678
 
@@ -62,7 +62,8 @@ Misc.in_dir(app_dir) do
62
62
  ENV["RBBT_VIEWS_DIR"] = options[:views] if options.include?(:views)
63
63
 
64
64
  if options[:stream]
65
- raise "No streaming available for any server other than puma" unless options[:server] =~ /^puma/
65
+ #raise "No streaming available for any server other than puma" unless options[:server] =~ /^puma/
66
+ raise "No streaming available for any server other than unicorn" unless options[:server] =~ /^unicorn/
66
67
  ENV["RBBT_WORKFLOW_TASK_STREAM"] = 'true'
67
68
  end
68
69
 
@@ -77,8 +78,8 @@ Misc.in_dir(app_dir) do
77
78
  end
78
79
 
79
80
  case server
80
- when 'unicorn'
81
- system ENV, "unicorn -c #{ Rbbt.share['unicorn.rb'].find } '#{config_ru_file}' -p #{options[:port] || "2887"}"
81
+ when 'passenger'
82
+ system ENV, "env RBBT_LOG=0 passenger start -R '#{config_ru_file}' -p #{options[:port] || "2887"}"
82
83
  when 'puma_alt'
83
84
  system ENV, "puma '#{config_ru_file}' -p #{options[:Port] || "2887"} -w 3 -t 8:32 --preload"
84
85
  else
@@ -126,8 +126,8 @@ if all
126
126
  end
127
127
 
128
128
  if recursive
129
- puts Log.color(:magenta, "Recursive inputs") << ": "
130
129
  inputs = step.info[:inputs]
130
+ inputs = {}
131
131
  deps = step.info[:dependencies].collect{|v| get_step v.last }
132
132
 
133
133
  while deps.any? do
@@ -137,19 +137,22 @@ if recursive
137
137
  deps.concat (dep.info[:dependencies] || []).collect{|v| get_step v.last }
138
138
  end
139
139
 
140
- inputs.each do |input,value|
141
- case value
142
- when nil
143
- puts Misc.format_definition_list_item(" " << input.to_s, 'nil', 80, 20, :blue)
144
- when Array
145
- puts Misc.format_definition_list_item(" " << input.to_s, (value.length > 6 ? (value[0..5])*"\n\n" << "\n\n" << "..." : value * "\n\n" ), 80, 20, :blue).gsub("\n\n","\n")
146
- when TrueClass, FalseClass
147
- puts Misc.format_definition_list_item(" " << input.to_s, value.to_s, 80, 20, :blue)
148
- else
149
- lines = value.to_s.split("\n").collect{|l| l.length >= 60 ? l[0..45] + " ..." : l }
150
- text = lines[0..5].compact * "\n\n"
151
- text << "\n\n...\n\n" if lines.length > 6
152
- puts Misc.format_definition_list_item(" " << input.to_s, text, 80, 20, :blue).gsub("\n\n","\n")
140
+ if inputs.any?
141
+ puts Log.color(:magenta, "Recursive inputs") << ": "
142
+ inputs.each do |input,value|
143
+ case value
144
+ when nil
145
+ puts Misc.format_definition_list_item(" " << input.to_s, 'nil', 80, 20, :blue)
146
+ when Array
147
+ puts Misc.format_definition_list_item(" " << input.to_s, (value.length > 6 ? (value[0..5])*"\n\n" << "\n\n" << "..." : value * "\n\n" ), 80, 20, :blue).gsub("\n\n","\n")
148
+ when TrueClass, FalseClass
149
+ puts Misc.format_definition_list_item(" " << input.to_s, value.to_s, 80, 20, :blue)
150
+ else
151
+ lines = value.to_s.split("\n").collect{|l| l.length >= 60 ? l[0..45] + " ..." : l }
152
+ text = lines[0..5].compact * "\n\n"
153
+ text << "\n\n...\n\n" if lines.length > 6
154
+ puts Misc.format_definition_list_item(" " << input.to_s, text, 80, 20, :blue).gsub("\n\n","\n")
155
+ end
153
156
  end
154
157
  end
155
158
  end
@@ -108,6 +108,8 @@ def fix_options(workflow, task, job_options)
108
108
  when :array
109
109
  if input_options[name] and input_options[name][:stream] and String === value and Misc.is_filename? value
110
110
  get_value_stream(value)
111
+ elsif input_options[name] and input_options[name][:stream] and value == "-"
112
+ STDIN
111
113
  else
112
114
  if Array === value
113
115
  value
@@ -146,6 +148,8 @@ def fix_options(workflow, task, job_options)
146
148
  TSV.open(StringIO.new(value), :unnamed => true, :sep => $field_separator, :sep2 => ($array_separator || "|"))
147
149
  end
148
150
  end
151
+ when :directory
152
+ Path.setup(File.expand_path(value))
149
153
  else
150
154
  value
151
155
  end
@@ -321,7 +325,7 @@ begin
321
325
 
322
326
  if do_exec or (job.respond_to?(:is_exec) and job.is_exec)
323
327
  res = job.exec(:stream)
324
- res = JSON.parse(res.read) if (defined?(WorkflowRESTClient) and WorkflowRESTClient::RemoteStep === job)
328
+ #res = JSON.parse(res.read) if (defined?(WorkflowRESTClient) and WorkflowRESTClient::RemoteStep === job)
325
329
 
326
330
  case
327
331
  when res.respond_to?(:gets)
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.21.97
4
+ version: 5.21.98
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-09-21 00:00:00.000000000 Z
11
+ date: 2017-10-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake