rbbt-util 5.27.12 → 5.28.4

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: 96eabb01327f6e3f5facc629140375ee06c16d160f77788cf3cee63df1fe0a55
4
- data.tar.gz: 3a30f619c73fb04003c7b6dd7d1a2d2a7f8f0fed2e503892c691280a02055af9
3
+ metadata.gz: 1eb8b404c84b1c6d07f3d13ffeaeb97a4b9fd59bf237241b98e184cbfdb98a43
4
+ data.tar.gz: f2a0e7c55aa053a7d559143b1ae235558355fd1f4f61f2845864e47b621e37fc
5
5
  SHA512:
6
- metadata.gz: ab7cd7746f19395bbc430cfb7b90bd3c6727d9a72069828c338f9abcb69c9776a52f8a6ceeb9244764ed55d9b1ad039739d32e3de27107a5edf7f01e22d10f34
7
- data.tar.gz: a9f620db6b823d54560b201fe6d706be0c6db502d1cae49100322926011702ad59e7fcdece25dcc2df8ac7cb49cfde67fd432a392b4416e492a0b4eadbeda47c
6
+ metadata.gz: fd8348766af38ef48c379966ae2766e59fcb14714d78a5130856cdfef2d5a87eeabb4ae519a2fa6a2fa862d6b71cfff711eefe293b3f0954af6b0f70bbf58bdd
7
+ data.tar.gz: a8187db527df84d7db46e1cc049ed8e3a850188da16d0834408af102bf7f02977524786ab1267e6d047744d3e8cca3cc02c1382ede7b8766a61468867e2f8464
@@ -74,7 +74,7 @@ module Annotated
74
74
 
75
75
  object = case
76
76
  when literal_pos
77
- values[literal_pos]
77
+ values[literal_pos].tap{|o| o.force_encoding(Encoding.default_external)}
78
78
  else
79
79
  id.dup
80
80
  end
@@ -119,7 +119,7 @@ module Annotated
119
119
  fields = AnnotatedArray === annotations ? annotations.annotations : annotations.compact.first.annotations
120
120
  fields << :annotation_types
121
121
 
122
- when (fields == [:literal] and not annotations.compact.empty?)
122
+ when (fields == [:literal] and ! annotations.compact.empty?)
123
123
  fields << :literal
124
124
 
125
125
  when (fields == [:all] && Annotated === annotations)
@@ -13,7 +13,7 @@ module Path
13
13
  string.resource = resource
14
14
  string.search_paths = search_paths
15
15
  string.search_order = search_order
16
- string.libdir = libdir || Path.caller_lib_dir
16
+ string.libdir = libdir || Path.caller_lib_dir
17
17
  string
18
18
  end
19
19
 
@@ -52,11 +52,11 @@ module Path
52
52
  def join(name)
53
53
  raise "Invalid path: #{ self }" if self.nil?
54
54
  new = if self.empty?
55
- self.annotate name.to_s.dup
55
+ self.annotate name.to_s.dup.chomp
56
56
  else
57
- self.annotate File.join(self, name.to_s)
57
+ self.annotate File.join(self, name.to_s.chomp)
58
58
  end
59
- new.original = File.join(self.original, name.to_s) if self.original
59
+ new.original = File.join(self.original, name.to_s.chomp) if self.original
60
60
  new
61
61
  end
62
62
 
@@ -76,7 +76,7 @@ module Path
76
76
  return [] unless self.exists?
77
77
  found = self.find
78
78
  exp = File.join(found, pattern)
79
- paths = Dir.glob(exp).collect{|f| Path.setup(f, self.resource, self.pkgdir)}
79
+ paths = Dir.glob(exp).collect{|f| self.annotate(f) }
80
80
 
81
81
  paths.each do |p|
82
82
  p.original = File.join(found.original, p.sub(/^#{found}/, ''))
@@ -412,7 +412,9 @@ module Path
412
412
  end
413
413
 
414
414
  def replace_extension(new_extension = nil, multiple = false)
415
- if multiple
415
+ if String === multiple
416
+ new_path = self.sub(/(\.[^\.\/]{1,5})(.#{multiple})?$/,'')
417
+ elsif multiple
416
418
  new_path = self.sub(/(\.[^\.\/]{1,5})+$/,'')
417
419
  else
418
420
  new_path = self.sub(/\.[^\.\/]{1,5}$/,'')
@@ -1,6 +1,6 @@
1
1
  module Path
2
2
 
3
- def self.caller_lib_dir(file = nil, relative_to = 'lib')
3
+ def self.caller_lib_dir(file = nil, relative_to = ['lib', 'bin'])
4
4
  file = caller.reject{|l|
5
5
  l =~ /rbbt\/(?:resource\.rb|workflow\.rb)/ or
6
6
  l =~ /rbbt\/resource\/path\.rb/ or
@@ -9,13 +9,14 @@ module Path
9
9
  l =~ /progress-monitor\.rb/
10
10
  }.first.sub(/\.rb[^\w].*/,'.rb') if file.nil?
11
11
 
12
+ relative_to = [relative_to] unless Array === relative_to
12
13
  file = File.expand_path(file)
13
- return Path.setup(file) if File.exist? File.join(file, relative_to)
14
+ return Path.setup(file) if relative_to.select{|d| File.exist? File.join(file, d)}.any?
14
15
 
15
16
  while file != '/'
16
17
  dir = File.dirname file
17
18
 
18
- return dir if File.exist? File.join(dir, relative_to)
19
+ return dir if relative_to.select{|d| File.exist? File.join(dir, d)}.any?
19
20
 
20
21
  file = File.dirname file
21
22
  end
@@ -58,13 +58,13 @@ module TSV
58
58
 
59
59
  identifiers, persist_input, compact = Misc.process_options options, :identifiers, :persist, :compact
60
60
  identifiers = tsv.identifier_files.first if identifiers.nil?
61
- identifiers = Organism.identifiers(tsv.namespace) if identifiers.nil? and tsv.namespace and Organism.identifiers(tsv.namespace).exists?
61
+ identifiers = Organism.identifiers(tsv.namespace) if defined?(Organism) && identifiers.nil? && tsv.namespace && Organism.identifiers(tsv.namespace).exists?
62
62
  identifiers.namespace ||= tsv.namespace
63
63
 
64
64
  fields = (identifiers and identifiers.all_fields.include?(field))? [field] : nil
65
65
  #index = identifiers.index :target => format, :fields => fields, :persist => persist_input, :order => true
66
66
 
67
- grep = Organism.blacklist_genes(tsv.namespace).list if identifiers.namespace and Organism.blacklist_genes(tsv.namespace).exists?
67
+ grep = Organism.blacklist_genes(tsv.namespace).list if defined?(Organism) && identifiers.namespace && Organism.blacklist_genes(tsv.namespace).exists?
68
68
  if fields.nil?
69
69
  index = identifiers.index(:data_tsv_grep => grep, :data_invert_grep => true, :target => format, :persist => true, :order => true, :unnamed => true, :data_persist => true)
70
70
  else
@@ -101,8 +101,8 @@ module TSV
101
101
  error = true
102
102
  raise $!
103
103
  ensure
104
- Log::ProgressBar.remove_bar(bar) if bar
105
104
  join.call(error) if join
105
+ Log::ProgressBar.remove_bar(bar) if bar
106
106
  end
107
107
  end
108
108
 
@@ -137,8 +137,8 @@ module TSV
137
137
  error = true
138
138
  raise $!
139
139
  ensure
140
- Log::ProgressBar.remove_bar(bar) if bar
141
140
  join.call(error) if join
141
+ Log::ProgressBar.remove_bar(bar) if bar
142
142
  end
143
143
  end
144
144
 
@@ -177,8 +177,8 @@ module TSV
177
177
  error = true
178
178
  raise $!
179
179
  ensure
180
- Log::ProgressBar.remove_bar(bar) if bar
181
180
  join.call(error) if join
181
+ Log::ProgressBar.remove_bar(bar) if bar
182
182
  end
183
183
  end
184
184
 
@@ -219,8 +219,8 @@ module TSV
219
219
  error = true
220
220
  raise $!
221
221
  ensure
222
- Log::ProgressBar.remove_bar(bar) if bar
223
222
  join.call(error) if join
223
+ Log::ProgressBar.remove_bar(bar) if bar
224
224
  end
225
225
  end
226
226
 
@@ -273,8 +273,8 @@ module TSV
273
273
  error = true
274
274
  raise $!
275
275
  ensure
276
- Log::ProgressBar.remove_bar(bar) if bar
277
276
  join.call(error) if join
277
+ Log::ProgressBar.remove_bar(bar) if bar
278
278
  end
279
279
  end
280
280
 
@@ -318,8 +318,8 @@ module TSV
318
318
  error = true
319
319
  raise $!
320
320
  ensure
321
- Log::ProgressBar.remove_bar(bar) if bar
322
321
  join.call(error) if join
322
+ Log::ProgressBar.remove_bar(bar) if bar
323
323
  end
324
324
  end
325
325
 
@@ -316,22 +316,30 @@ module TSV
316
316
 
317
317
  def to_single
318
318
  new = {}
319
- case type
320
- when :double
321
- through do |k,v|
322
- new[k] = v.first.first
323
- end
324
- when :flat
319
+
320
+ if block_given?
325
321
  through do |k,v|
326
- new[k] = v.first
322
+ new[k] = yield v
327
323
  end
328
- when :single
329
- return self
330
- when :list
331
- through do |k,v|
332
- new[k] = v.first
324
+ else
325
+ case type
326
+ when :double
327
+ through do |k,v|
328
+ new[k] = v.first.first
329
+ end
330
+ when :flat
331
+ through do |k,v|
332
+ new[k] = v.first
333
+ end
334
+ when :single
335
+ return self
336
+ when :list
337
+ through do |k,v|
338
+ new[k] = v.first
339
+ end
333
340
  end
334
341
  end
342
+
335
343
  self.annotate(new)
336
344
  new.type = :single
337
345
  new.fields = [new.fields.first] if new.fields.length > 1
@@ -2,6 +2,7 @@ require 'lockfile'
2
2
  require 'digest/md5'
3
3
  require 'cgi'
4
4
  require 'zlib'
5
+ require 'etc'
5
6
  require 'rubygems/package'
6
7
 
7
8
  require 'rbbt/util/tar'
@@ -295,13 +295,18 @@ def self.add_libdir(dir=nil)
295
295
  def self.bootstrap(elems, num = nil, options = {}, &block)
296
296
  IndiferentHash.setup options
297
297
 
298
- num = Rbbt::Config.get :cpus, :default_bootstrap_cpus, :bootstrap_cpus if num == :current || num == nil
298
+ num = Rbbt::Config.get :cpus, :default_bootstrap_cpus, :bootstrap_cpus if num == :current || num == nil if defined?(Rbbt::Config)
299
299
  num = :current if num.nil?
300
300
  cpus = case num
301
301
  when :current
302
302
  n = Etc.nprocessors
303
303
  n = elems.length / 2 if n > elems.length/2
304
- n
304
+
305
+ if $BOOTSTRAPPED_CURRENT && $BOOTSTRAPPED_CURRENT + n > Etc.nprocessors
306
+ 1
307
+ else
308
+ n
309
+ end
305
310
  when String
306
311
  num.to_i
307
312
  when Integer
@@ -320,7 +325,12 @@ def self.add_libdir(dir=nil)
320
325
  respawn = options[:respawn] and options[:cpus] and options[:cpus].to_i > 1
321
326
 
322
327
  index = (0..elems.length-1).to_a.collect{|v| v.to_s }
328
+
323
329
  TSV.traverse index, options do |pos|
330
+ if num == :current
331
+ $BOOTSTRAPPED_CURRENT ||= n
332
+ $BOOTSTRAPPED_CURRENT += 0
333
+ end
324
334
  elem = elems[pos.to_i]
325
335
  elems.annotate elem if elems.respond_to? :annotate
326
336
  res = begin
@@ -290,7 +290,7 @@ module Misc
290
290
  if obj.exists?
291
291
  if obj.directory?
292
292
  files = obj.glob("**/*")
293
- "directory: #{files}"
293
+ "directory: #{Misc.fingerprint(files)}"
294
294
  else
295
295
  "file: " << obj << "--" << mtime_str(obj)
296
296
  end
@@ -401,7 +401,7 @@ module Misc
401
401
 
402
402
  def self.scan_version_text(text, cmd = nil)
403
403
  cmd = "NOCMDGIVE" if cmd.nil? || cmd.empty?
404
- m = text.match(/(?:version.*?|#{cmd}.*?|v)((?:\d+\.)*\d+(?:-[a-z_]+)?)/i)
404
+ m = text.match(/(?:version.*?|#{cmd}.*?|#{cmd.to_s.split(/[-_.]/).first}.*?|v)((?:\d+\.)*\d+(?:-[a-z_]+)?)/i)
405
405
  return nil if m.nil?
406
406
  m[1]
407
407
  end
@@ -94,7 +94,8 @@ module Open
94
94
  end
95
95
 
96
96
  begin
97
- wget_options = options.merge( '-O' => '-')
97
+ wget_options = options.dup
98
+ wget_options = wget_options.merge( '-O' => '-') unless options.include?('--output-document')
98
99
  wget_options[:pipe] = pipe unless pipe.nil?
99
100
  wget_options[:stderr] = stderr unless stderr.nil?
100
101
 
@@ -824,4 +825,8 @@ module Open
824
825
  def self.broken_link?(path)
825
826
  File.symlink?(path) && ! File.exists?(File.readlink(path))
826
827
  end
828
+
829
+ def self.download(url, path)
830
+ Open.wget(url, "--output-document" => path)
831
+ end
827
832
  end
@@ -4,8 +4,13 @@ module Workflow
4
4
  Rbbt.claim Rbbt.software.opt.jar["wdltool.jar"], :url, "https://github.com/broadinstitute/wdltool/releases/download/0.14/wdltool-0.14.jar"
5
5
 
6
6
  def run_cromwell(file, work_dir, options = {})
7
+ cromwell_inputs_file = Misc.process_options options, :cromwell_inputs_file
7
8
  jar = Rbbt.software.opt.jar["cromwell.jar"].produce.find
8
- CMD.cmd_log("java -jar '#{jar}' run '#{file}' --workflow-root='#{work_dir}'", options.merge("add_option_dashes" => true))
9
+ if cromwell_inputs_file
10
+ CMD.cmd_log("java -jar '#{jar}' run '#{file}' --workflow-root='#{work_dir}' -i #{cromwell_inputs_file}", options.merge("add_option_dashes" => true))
11
+ else
12
+ CMD.cmd_log("java -jar '#{jar}' run '#{file}' --workflow-root='#{work_dir}'", options.merge("add_option_dashes" => true))
13
+ end
9
14
  end
10
15
 
11
16
  def load_cromwell(file)
@@ -340,6 +340,11 @@ class RemoteStep < Step
340
340
  @inputs = new_inputs
341
341
  @info = nil
342
342
  end
343
+
344
+ def init_info(*args)
345
+ i = {:status => :waiting, :pid => Process.pid, :path => path}
346
+ i[:dependencies] = dependencies.collect{|dep| [dep.task_name, dep.name, dep.path]} if dependencies
347
+ end
343
348
  end
344
349
 
345
350
  require 'rbbt/workflow/remote_workflow/remote_step/rest'
@@ -208,7 +208,7 @@ class Step
208
208
  end
209
209
 
210
210
  def init_info(force = false)
211
- return nil if @exec or info_file.nil? or (Open.exists?(info_file) and ! force)
211
+ return nil if @exec || info_file.nil? || (Open.exists?(info_file) && ! force)
212
212
  Open.lock(info_file, :lock => info_lock) do
213
213
  i = {:status => :waiting, :pid => Process.pid, :path => path}
214
214
  i[:dependencies] = dependencies.collect{|dep| [dep.task_name, dep.name, dep.path]} if dependencies
@@ -24,7 +24,7 @@ class Step
24
24
  Log.medium "Not duplicating stream #{stream_key}"
25
25
  STREAM_CACHE[stream_key] = stream
26
26
  when File
27
- if Open.exists? current.path
27
+ if Open.exists?(current.path)
28
28
  Log.medium "Reopening file #{stream_key}"
29
29
  Open.open(current.path)
30
30
  else
@@ -97,7 +97,7 @@ class Step
97
97
  end
98
98
 
99
99
  job.dup_inputs unless status == 'done' or job.started?
100
- job.init_info unless status == 'noinfo' or status == 'done' or job.started?
100
+ job.init_info(status == 'noinfo') unless status == 'waiting' || status == 'done' || job.started?
101
101
 
102
102
  canfail = ComputeDependency === job && job.canfail?
103
103
  end
@@ -25,5 +25,4 @@ file = STDIN if file == '-'
25
25
 
26
26
  tsv = TSV.open file, :merge => true, :type => :double
27
27
 
28
-
29
28
  puts tsv.to_unmerged_expanded_s
@@ -43,7 +43,11 @@ etc_dir = Rbbt.etc
43
43
  load_file etc_dir['app.d/pre.rb'].find
44
44
 
45
45
  app.get '/' do
46
- redirect to(File.join('/', wf.to_s))
46
+ begin
47
+ template_render('main', params, 'main', :cache_type => :asynchronous)
48
+ rescue TemplateMissing
49
+ redirect to(File.join('/', wf.to_s))
50
+ end
47
51
  end
48
52
 
49
53
  #{{{ BASE
@@ -69,11 +69,11 @@ class TestTSV < Test::Unit::TestCase
69
69
  end
70
70
 
71
71
  def test_libdir
72
- assert File.exist? TestResource[].share.Rlib["util.R"].find :lib
73
- assert File.exist? TestResource[].share.Rlib["util.R"].find
72
+ assert File.exist?(TestResource[].share.Rlib["util.R"].find(:lib))
73
+ assert File.exist?(TestResource[].share.Rlib["util.R"].find)
74
74
  end
75
75
 
76
- def test_server
76
+ def __test_server
77
77
  require 'rbbt/sources/organism'
78
78
  TmpFile.with_file :extension => 'gz' do |tmp|
79
79
  Organism.get_from_server("Hsa/b37/known_sites/dbsnp_138.vcf.gz", tmp, 'http://rbbt.bsc.es')
@@ -202,7 +202,7 @@ class TestTSVParallelThrough < Test::Unit::TestCase
202
202
  stream = datafile_test('identifiers').open
203
203
  dumper = TSV::Dumper.new datafile_test('identifiers').tsv_options
204
204
  dumper.init
205
- TSV.traverse stream, :head => head, :into => dumper do |k,v|
205
+ TSV.traverse stream, :head => head, :into => dumper, :bar => true do |k,v|
206
206
  k = k.first
207
207
  [k,v]
208
208
  end
@@ -212,6 +212,26 @@ class TestTSVParallelThrough < Test::Unit::TestCase
212
212
  assert_equal head, res.size
213
213
  end
214
214
 
215
+ def test_traverse_into_dumper_error_bar
216
+ require 'rbbt/sources/organism'
217
+
218
+ head = 2_000
219
+
220
+ stream = datafile_test('identifiers').open
221
+ dumper = TSV::Dumper.new datafile_test('identifiers').tsv_options
222
+ dumper.init
223
+ TSV.traverse stream, :head => head, :into => dumper, :bar => true do |k,v|
224
+ k = k.first
225
+ raise
226
+ [k,v]
227
+ end
228
+
229
+ assert_raise do
230
+ res = TSV.open(dumper.stream)
231
+ end
232
+
233
+ end
234
+
215
235
  def test_traverse_into_dumper_threads
216
236
  require 'rbbt/sources/organism'
217
237
 
@@ -690,5 +690,30 @@ Written by Mike Haertel and others, see <http://git.sv.gnu.org/cgit/grep.git/tre
690
690
  EOF
691
691
  assert_equal "3.1", Misc.scan_version_text(txt, "grep")
692
692
  end
693
+
694
+ def test_bootstrap_current_only_once
695
+
696
+
697
+ max = Etc.nprocessors * 10
698
+ TmpFile.with_file do |f|
699
+ RbbtSemaphore.with_semaphore(1) do |sem|
700
+ Misc.bootstrap (1..max).to_a do
701
+ Open.open(f, :mode => 'a') do |sin|
702
+ sin.puts Process.pid.to_s
703
+ end
704
+ Misc.bootstrap (1..10).to_a do
705
+ RbbtSemaphore.synchronize(sem) do
706
+ Open.open(f, :mode => 'a') do |sin|
707
+ sin.puts [Process.ppid.to_s, Process.pid.to_s] * ":"
708
+ end
709
+ end
710
+ end
711
+ end
712
+ end
713
+ assert_equal max * 10 + max, Open.read(f).split("\n").length
714
+ assert_equal Etc.nprocessors * 2, Open.read(f).split("\n").uniq.length
715
+ end
716
+
717
+ end
693
718
  end
694
719
 
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.27.12
4
+ version: 5.28.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Miguel Vazquez
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-07-14 00:00:00.000000000 Z
11
+ date: 2020-09-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake