rbbt-util 5.28.2 → 5.28.8

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: 6bc94b86c69f95806ae280d76df8da7696f5df0f008a3791385e4ccf11b70977
4
- data.tar.gz: f7763e2dd88ba121b8a625b846bf0f4f1efaba090b873f2947e0a83ae9dabff1
3
+ metadata.gz: 4d77757da0912cd41138ff33b99e19b7ffa1449be515fb7a8742f9d69c134ffd
4
+ data.tar.gz: 1edb139f92881591bbac18692dc6a0a739be9dfe0a820a4db2cffd30079fc328
5
5
  SHA512:
6
- metadata.gz: 59fd76fc00eeeb892ad53bbbc0757d5e17dde600f505d31e8dabe43e0184e5c5bfcef2ccc3f7aa9bc295e36251b9f864706bc0dcf357cc3606b73b1f25f7d672
7
- data.tar.gz: ce4d345fc9876378b57ba8753d2a7dfd13b4fd23330246bc2385186f81344026cf415e7cc6eb86253f86e709e2061139930734b2c77b7329165ed2892e3e5d0a
6
+ metadata.gz: 2219bd7152eda55f2c3c9b1e5d10d9593dd29232e7e77fe0707496031030455663983256930f35c2bcabd8b80e15c05d99f3bcdc9644135ee4a75d0267334c33
7
+ data.tar.gz: e4021aab6574fc10e960eec29f630075c8e95b27d6648ba47e1f76ecbf1a12b84a5859ad7b61ffde8591466ddcfec8ee5cfd27f6f82997648d712225ac099e1b
@@ -451,12 +451,15 @@ EOF
451
451
  out = CMD.cmd("tail -f '#{fout}'", :pipe => true) if File.exists?(fout) and not tail == :STDERR
452
452
  err = CMD.cmd("tail -f '#{ferr}'", :pipe => true) if File.exists?(ferr)
453
453
 
454
- Misc.consume_stream(err, true, STDERR) if err
455
- Misc.consume_stream(out, true, STDOUT) if out
454
+ terr = Misc.consume_stream(err, true, STDERR) if err
455
+ tout = Misc.consume_stream(out, true, STDOUT) if out
456
456
 
457
457
  sleep 3 while CMD.cmd("squeue --job #{job}").read.include? job.to_s
458
+ rescue Aborted
458
459
  ensure
459
460
  begin
461
+ terr.exit if terr
462
+ tout.exit if tout
460
463
  err.close if err
461
464
  err.join if err
462
465
  rescue Exception
@@ -25,6 +25,7 @@ module Persist
25
25
  MEMORY = {} unless defined? MEMORY
26
26
  MAX_FILE_LENGTH = 150
27
27
 
28
+ # Return non-false if the first file is newer than the second file
28
29
  def self.newer?(path, file)
29
30
  return true if not Open.exists?(file)
30
31
  path = path.find if Path === path
@@ -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}$/,'')
@@ -550,9 +550,17 @@ module TSV
550
550
  "\t" << ([""] * fields.length) * "\t" << "\n"
551
551
  end
552
552
  when Array
553
- "\t" << values.collect{|v| Array === v ? v * "|" : v} * "\t" << "\n"
553
+ if fields.nil? or fields.empty?
554
+ "\n"
555
+ else
556
+ "\t" << values.collect{|v| Array === v ? v * "|" : v} * "\t" << "\n"
557
+ end
554
558
  else
555
- "\t" << values.to_s << "\n"
559
+ if fields.nil? or fields.empty?
560
+ "\n"
561
+ else
562
+ "\t" << values.to_s << "\n"
563
+ end
556
564
  end
557
565
  end
558
566
 
@@ -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
@@ -32,9 +32,17 @@ module TSV
32
32
  sep + ([""] * fields.length) * sep << "\n"
33
33
  end
34
34
  when Array
35
- sep + (values.collect{|v| Array === v ? v * "|" : v} * sep) << "\n"
35
+ if fields.nil? or fields.empty?
36
+ "\n"
37
+ else
38
+ sep + (values.collect{|v| Array === v ? v * "|" : v} * sep) << "\n"
39
+ end
36
40
  else
37
- sep + values.to_s << "\n"
41
+ if fields.nil? or fields.empty?
42
+ "\n"
43
+ else
44
+ sep + values.to_s << "\n"
45
+ end
38
46
  end
39
47
  end
40
48
 
@@ -377,6 +377,7 @@ module TSV
377
377
  obj.run(true) unless obj.done? || obj.started? || obj.result
378
378
 
379
379
  stream = obj.get_stream
380
+ options = {:type => :array}.merge(options) if obj.result_type == :array
380
381
 
381
382
  if stream
382
383
  traverse_obj(stream, options, &block)
@@ -623,6 +624,8 @@ module TSV
623
624
  def self.traverse(obj, options = {}, &block)
624
625
  into = options[:into]
625
626
 
627
+ into = options[:into] = Open.open(into, :mode => "w") if Misc.is_filename?(into)
628
+
626
629
  case into
627
630
  when :stream
628
631
  sout = Misc.open_pipe false, false do |sin|
@@ -184,7 +184,11 @@ module TSV
184
184
  str = ""
185
185
  str << preamble.strip << "\n" if preamble and not preamble.empty?
186
186
  if fields
187
- str << header_hash << (key_field || "ID").to_s << sep << (fields * sep) << "\n"
187
+ if fields.empty?
188
+ str << header_hash << (key_field || "ID").to_s << "\n"
189
+ else
190
+ str << header_hash << (key_field || "ID").to_s << sep << (fields * sep) << "\n"
191
+ end
188
192
  end
189
193
 
190
194
  str
@@ -316,22 +320,30 @@ module TSV
316
320
 
317
321
  def to_single
318
322
  new = {}
319
- case type
320
- when :double
321
- through do |k,v|
322
- new[k] = v.first.first
323
- end
324
- when :flat
323
+
324
+ if block_given?
325
325
  through do |k,v|
326
- new[k] = v.first
326
+ new[k] = yield v
327
327
  end
328
- when :single
329
- return self
330
- when :list
331
- through do |k,v|
332
- new[k] = v.first
328
+ else
329
+ case type
330
+ when :double
331
+ through do |k,v|
332
+ new[k] = v.first.first
333
+ end
334
+ when :flat
335
+ through do |k,v|
336
+ new[k] = v.first
337
+ end
338
+ when :single
339
+ return self
340
+ when :list
341
+ through do |k,v|
342
+ new[k] = v.first
343
+ end
333
344
  end
334
345
  end
346
+
335
347
  self.annotate(new)
336
348
  new.type = :single
337
349
  new.fields = [new.fields.first] if new.fields.length > 1
@@ -15,7 +15,7 @@ module Rbbt::Config
15
15
  end
16
16
 
17
17
  def self.load_file(file)
18
- Log.debug "Loading file: #{ file }"
18
+ Log.debug "Loading config file: #{ file }"
19
19
  TSV.traverse file, :type => :array do |line|
20
20
  next if line =~ /^#/
21
21
  key, value, *tokens = line.strip.split(/\s/)
@@ -85,6 +85,7 @@ module Rbbt::Config
85
85
  priorities
86
86
  end
87
87
 
88
+ # For equal priorities the matching prioritizes tokens ealier in the list
88
89
  def self.get(key, *tokens)
89
90
  options = tokens.pop if Hash === tokens.last
90
91
  default = options.nil? ? nil : options[:default]
@@ -292,7 +292,7 @@ module Misc
292
292
  files = obj.glob("**/*")
293
293
  "directory: #{Misc.fingerprint(files)}"
294
294
  else
295
- "file: " << obj << "--" << mtime_str(obj)
295
+ "file: " << Open.realpath(obj) << "--" << mtime_str(obj)
296
296
  end
297
297
  else
298
298
  obj + " (file missing)"
@@ -113,7 +113,7 @@ end
113
113
  end
114
114
 
115
115
  def self.is_filename?(string)
116
- return true if defined? PATH and Path === string
116
+ return true if defined? Path and Path === string
117
117
  return true if string.respond_to? :exists
118
118
  return true if String === string and string.length < 265 and File.exist?(string)
119
119
  return false
@@ -397,7 +397,7 @@ module Open
397
397
  if dir_sub_path_source.nil? and dir_sub_path_target.nil?
398
398
  FileUtils.mkdir_p File.dirname(target) unless File.exist? File.dirname(target)
399
399
  tmp_target = File.join(File.dirname(target), '.tmp_mv.' + File.basename(target))
400
- FileUtils.cp source, tmp_target
400
+ FileUtils.cp_r source, tmp_target
401
401
  FileUtils.mv tmp_target, target
402
402
  return
403
403
  end
@@ -364,6 +364,7 @@ module Workflow
364
364
  raise ParameterException, "Inputs #{Misc.humanize_list(missing_inputs)} are required but were not provided or are nil"
365
365
  end
366
366
 
367
+ # jobname => true sets the value of the input to the name of the job
367
368
  if task.input_options
368
369
  jobname_input = task.input_options.select{|i,o| o[:jobname]}.collect{|i,o| i }.first
369
370
  else
@@ -26,105 +26,106 @@ module Workflow
26
26
  raise "No '#{name}' task in '#{self.to_s}' Workflow" if task.nil?
27
27
  id = File.join(self.to_s, name.to_s)
28
28
  @task_info ||= {}
29
- @task_info[id] ||= begin description = task.description
30
- result_description = task.result_description
31
- result_type = task.result_type
32
- inputs = rec_inputs(name).uniq
33
- input_types = rec_input_types(name)
34
- input_descriptions = rec_input_descriptions(name)
35
- input_use = rec_input_use(name)
36
- input_defaults = rec_input_defaults(name)
37
- input_options = rec_input_options(name)
38
- extension = task.extension
39
- export = case
40
- when (synchronous_exports.include?(name.to_sym) or synchronous_exports.include?(name.to_s))
41
- :synchronous
42
- when (asynchronous_exports.include?(name.to_sym) or asynchronous_exports.include?(name.to_s))
43
- :asynchronous
44
- when (exec_exports.include?(name.to_sym) or exec_exports.include?(name.to_s))
45
- :exec
46
- when (stream_exports.include?(name.to_sym) or stream_exports.include?(name.to_s))
47
- :stream
48
- else
49
- :none
50
- end
29
+ @task_info[id] ||= begin
30
+ description = task.description
31
+ result_description = task.result_description
32
+ result_type = task.result_type
33
+ inputs = rec_inputs(name).uniq
34
+ input_types = rec_input_types(name)
35
+ input_descriptions = rec_input_descriptions(name)
36
+ input_use = rec_input_use(name)
37
+ input_defaults = rec_input_defaults(name)
38
+ input_options = rec_input_options(name)
39
+ extension = task.extension
40
+ export = case
41
+ when (synchronous_exports.include?(name.to_sym) or synchronous_exports.include?(name.to_s))
42
+ :synchronous
43
+ when (asynchronous_exports.include?(name.to_sym) or asynchronous_exports.include?(name.to_s))
44
+ :asynchronous
45
+ when (exec_exports.include?(name.to_sym) or exec_exports.include?(name.to_s))
46
+ :exec
47
+ when (stream_exports.include?(name.to_sym) or stream_exports.include?(name.to_s))
48
+ :stream
49
+ else
50
+ :none
51
+ end
51
52
 
52
- dependencies = task_dependencies[name].select{|dep| String === dep or Symbol === dep}
53
- info = { :id => id,
54
- :description => description,
55
- :export => export,
56
- :inputs => inputs,
57
- :input_types => input_types,
58
- :input_descriptions => input_descriptions,
59
- :input_defaults => input_defaults,
60
- :input_options => input_options,
61
- :input_use => input_use,
62
- :result_type => result_type,
63
- :result_description => result_description,
64
- :dependencies => dependencies,
65
- :extension => extension
66
- }
67
- end
53
+ dependencies = task_dependencies[name].select{|dep| String === dep or Symbol === dep}
54
+ { :id => id,
55
+ :description => description,
56
+ :export => export,
57
+ :inputs => inputs,
58
+ :input_types => input_types,
59
+ :input_descriptions => input_descriptions,
60
+ :input_defaults => input_defaults,
61
+ :input_options => input_options,
62
+ :input_use => input_use,
63
+ :result_type => result_type,
64
+ :result_description => result_description,
65
+ :dependencies => dependencies,
66
+ :extension => extension
67
+ }
68
+ end
68
69
  end
69
70
 
70
71
  def rec_dependencies(taskname)
71
72
  @rec_dependencies ||= {}
72
73
  @rec_dependencies[taskname] ||= begin
73
- if task_dependencies.include? taskname
74
-
75
- deps = task_dependencies[taskname]
76
-
77
- #all_deps = deps.select{|dep| String === dep or Symbol === dep or Array === dep}
78
-
79
- all_deps = []
80
- deps.each do |dep|
81
- if DependencyBlock === dep
82
- all_deps << dep.dependency if dep.dependency
83
- else
84
- all_deps << dep unless Proc === dep
85
- end
86
-
87
- begin
88
- case dep
89
- when Array
90
- wf, t, o = dep
91
-
92
- wf.rec_dependencies(t.to_sym).each do |d|
93
- if Array === d
94
- new = d.dup
95
- else
96
- new = [dep.first, d]
97
- end
98
-
99
- if Hash === o and not o.empty?
100
- if Hash === new.last
101
- hash = new.last.dup
102
- o.each{|k,v| hash[k] ||= v}
103
- new[new.length-1] = hash
104
- else
105
- new.push o.dup
74
+ if task_dependencies.include? taskname
75
+
76
+ deps = task_dependencies[taskname]
77
+
78
+ #all_deps = deps.select{|dep| String === dep or Symbol === dep or Array === dep}
79
+
80
+ all_deps = []
81
+ deps.each do |dep|
82
+ if DependencyBlock === dep
83
+ all_deps << dep.dependency if dep.dependency
84
+ else
85
+ all_deps << dep unless Proc === dep
86
+ end
87
+
88
+ begin
89
+ case dep
90
+ when Array
91
+ wf, t, o = dep
92
+
93
+ wf.rec_dependencies(t.to_sym).each do |d|
94
+ if Array === d
95
+ new = d.dup
96
+ else
97
+ new = [dep.first, d]
98
+ end
99
+
100
+ if Hash === o and not o.empty?
101
+ if Hash === new.last
102
+ hash = new.last.dup
103
+ o.each{|k,v| hash[k] ||= v}
104
+ new[new.length-1] = hash
105
+ else
106
+ new.push o.dup
107
+ end
108
+ end
109
+
110
+ all_deps << new
111
+ end if wf && t
112
+
113
+ when String, Symbol
114
+ rec_deps = rec_dependencies(dep.to_sym)
115
+ all_deps.concat rec_deps
116
+ when DependencyBlock
117
+ dep = dep.dependency
118
+ raise TryAgain
119
+ end
120
+ rescue TryAgain
121
+ retry
122
+ end
106
123
  end
124
+ all_deps.uniq
125
+ else
126
+ []
107
127
  end
108
-
109
- all_deps << new
110
- end if wf && t
111
-
112
- when String, Symbol
113
- rec_deps = rec_dependencies(dep.to_sym)
114
- all_deps.concat rec_deps
115
- when DependencyBlock
116
- dep = dep.dependency
117
- raise TryAgain
118
- end
119
- rescue TryAgain
120
- retry
121
- end
122
- end
123
- all_deps.uniq
124
- else
125
- []
126
- end
127
- end
128
+ end
128
129
  end
129
130
 
130
131
  def task_from_dep(dep)
@@ -182,7 +183,7 @@ module Workflow
182
183
  acc
183
184
  }.tap{|h| IndiferentHash.setup(h)}
184
185
  end
185
-
186
+
186
187
  def rec_input_use(taskname)
187
188
  task = task_from_dep(taskname)
188
189
  deps = rec_dependencies(taskname)
@@ -474,7 +475,7 @@ module Workflow
474
475
  else
475
476
  workdir_find = workdir
476
477
  end
477
-
478
+
478
479
  workdir_find = File.expand_path(workdir_find)
479
480
  path = File.expand_path(path)
480
481
  dir = File.dirname(path)