rbbt-util 5.27.12 → 5.28.4

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
  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