rbbt-util 5.40.4 → 5.41.0

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: 0c086b1d2a4bfd64cc80729a4962b2ba04268b5745ae6c79b5d954fc5b15a7a9
4
- data.tar.gz: 8d0ee0a0942be2cf07259baed09d2c2feb98a67b314adc70bd0ac1e03ecba4f9
3
+ metadata.gz: 5f8c020988e2d5df3aa710ce88fe4d92a2a754363d924a580fcc31b138330258
4
+ data.tar.gz: b6ee155b7bfb819baa21fac27c8561a3e1332bd9677a081abbe811bbb45c7973
5
5
  SHA512:
6
- metadata.gz: 8ca4b7b1b59eb4546b9e1484fd397c687003389b406de77461da5aa3c773679a87533050c640c90feacc48f9bdadf1c565bcfe9727e8661b2440938ed3c69dbc
7
- data.tar.gz: 613f30647a8d317984e12a5618fe8d03ab94c3d4ca1acc8ee38460c8f67869c13e8dd83f3d1c4332e813a34802af55d6346f87d898863095ff12368c9f715ba6
6
+ metadata.gz: 16d876542942fd0a0e1982dee1e7bf94ccd7bf8c8f4e3bb5310588a2f4587a3abe6d56fb101e1e1352c12225de507d46c18fa6b9109b2328079a999142479fa9
7
+ data.tar.gz: 6d135e37aa6151b68552a5c9f32f3cc1f1fef20a3f26695c9a033a09e0541a31a60de9b2fac33aea4c69e89a1acff54296264ba8435e9fecdaed5dcd5ee868fb
data/lib/rbbt/persist.rb CHANGED
@@ -412,9 +412,9 @@ module Persist
412
412
  repo.delete path if persist_options[:update]
413
413
  repo[path] ||= yield
414
414
 
415
- when (type.to_sym == :annotations and persist_options.include? :annotation_repo)
415
+ when (type.to_sym == :annotations and (persist_options.include?(:annotation_repo) || persist_options.include?(:repo)))
416
416
 
417
- repo = persist_options[:annotation_repo]
417
+ repo = persist_options[:annotation_repo] || persist_options[:repo]
418
418
 
419
419
  keys = nil
420
420
  subkey = name + ":"
@@ -359,7 +359,16 @@ module Path
359
359
  end
360
360
 
361
361
  def list
362
- Open.read(self.produce.find).split "\n"
362
+ begin
363
+ path = self.produce
364
+ rescue Resource::ResourceNotFound => e
365
+ begin
366
+ path = self.set_extension('list').produce
367
+ rescue Resource::ResourceNotFound
368
+ raise e
369
+ end
370
+ end
371
+ Open.read(path).split("\n")
363
372
  end
364
373
 
365
374
  def keys(field = 0, sep = "\t")
@@ -26,6 +26,7 @@ puts path.glob_all.collect{|p| File.directory?(p) ? p + "/" : p } * "\n"
26
26
  if original_path.located?
27
27
  paths = [original_path]
28
28
  else
29
+ path = Path.setup(path) unless Path === path
29
30
  paths = (path.directory? ? path.glob_all : path.find_all)
30
31
  end
31
32
 
@@ -251,12 +251,20 @@ module Misc
251
251
  end
252
252
 
253
253
  def self.translate_prot_mutation_hgvs2rbbt(mutation)
254
+ mutation.sub!('p.', '')
255
+ if m = mutation.match(/([a-z]{3})(\d+)([a-z]{3})/i)
256
+ ref = m[1]
257
+ num = m[2]
258
+ alt = m[3]
259
+ ref = THREE_TO_ONE_AA_CODE[ref.downcase]
260
+ alt = THREE_TO_ONE_AA_CODE[alt.downcase]
261
+ mutation = [ref, num, alt] * ""
262
+ end
254
263
  one_aa_code = THREE_TO_ONE_AA_CODE.values
255
264
  one_aa_code << "X" << "B" << "Z" << "J" << "*" << "?"
256
265
  one_aa_code_re = one_aa_code*""
257
266
  subs = Regexp.new("^[#{one_aa_code_re}]\\d+[#{one_aa_code_re}]")
258
267
  f_aa = Regexp.new("^[#{one_aa_code_re}]\\d+")
259
- mutation.sub!('p.', '')
260
268
  mutation = case
261
269
  when mutation =~ subs
262
270
  mutation
@@ -165,7 +165,8 @@ module Workflow
165
165
  workflow, dep_task, options = dependency
166
166
 
167
167
  if override_dependencies[workflow.to_s] && value = override_dependencies[workflow.to_s][dep_task]
168
- overriden = true if (options.nil? || ! options[:not_overriden]) && ! unlocated_override?(value)
168
+ overriden = true if (inputs.nil? || ! inputs[:not_overriden]) && (options.nil? || ! options[:not_overriden]) && ! unlocated_override?(value)
169
+ #overriden = true if (options.nil? || ! options[:not_overriden]) && ! unlocated_override?(value)
169
170
  setup_override_dependency(value, workflow, dep_task)
170
171
  else
171
172
 
@@ -189,21 +190,23 @@ module Workflow
189
190
  job = workflow._job(dep_task, jobname, _inputs)
190
191
  ComputeDependency.setup(job, compute) if compute
191
192
 
192
- overriden = true if TrueClass === job.overriden && (options.nil? || ! options[:not_overriden])
193
+ overriden = true if Symbol === job.overriden? && (d.nil? || ! d[:not_overriden]) && (inputs.nil? || ! inputs[:not_overriden])
193
194
 
194
195
  job
195
196
  end
196
197
  when Step
197
198
  job = dependency
198
- overriden = true if TrueClass === job.overriden && (options.nil? || ! options[:not_overriden])
199
+ overriden = true if Symbol === job.overriden? && (d.nil? || ! d[:not_overriden]) && (inputs.nil? || ! inputs[:not_overriden])
199
200
  job
200
201
  when Symbol
201
202
  if override_dependencies[self.to_s] && value = override_dependencies[self.to_s][dependency]
202
- overriden = true if (options.nil? || ! options[:not_overriden]) && ! unlocated_override?(value)
203
+ overriden = true if (inputs.nil? || ! inputs[:not_overriden]) && (options.nil? || ! options[:not_overriden]) && ! unlocated_override?(value)
204
+ #overriden = true if (options.nil? || ! options[:not_overriden]) && ! unlocated_override?(value)
203
205
  setup_override_dependency(value, self, dependency)
204
206
  else
205
207
  job = _job(dependency, jobname, _inputs)
206
- overriden = true if TrueClass === job.overriden && (options.nil? || ! options[:not_overriden])
208
+ overriden = true if Symbol === job.overriden && (options.nil? || ! options[:not_overriden]) && (inputs.nil? || ! inputs[:not_overriden])
209
+
207
210
  job
208
211
  end
209
212
  when Proc
@@ -212,7 +215,8 @@ module Workflow
212
215
  wf, task_name, options = orig_dep
213
216
 
214
217
  if override_dependencies[wf.to_s] && value = override_dependencies[wf.to_s][task_name]
215
- overriden = true if (options.nil? || ! options[:not_overriden]) && ! unlocated_override?(value)
218
+ overriden = true if (inputs.nil? || ! inputs[:not_overriden]) && (options.nil? || ! options[:not_overriden]) && ! unlocated_override?(value)
219
+ #overriden = true if (options.nil? || ! options[:not_overriden]) && ! unlocated_override?(value)
216
220
  dep = setup_override_dependency(value, wf, task_name)
217
221
  else
218
222
 
@@ -243,7 +247,8 @@ module Workflow
243
247
  d[:task] ||= task_name
244
248
  _override_dependencies = override_dependencies.merge(override_dependencies(d[:inputs] || {}))
245
249
  d = if _override_dependencies[d[:workflow].to_s] && value = _override_dependencies[d[:workflow].to_s][d[:task]]
246
- overriden = true if (options.nil? || ! options[:not_overriden]) && ! unlocated_override?(value)
250
+ overriden = true if (inputs.nil? || ! inputs[:not_overriden]) && (options.nil? || ! options[:not_overriden]) && ! unlocated_override?(value)
251
+ #overriden = true if (options.nil? || ! options[:not_overriden]) && ! unlocated_override?(value)
247
252
  setup_override_dependency(value, d[:workflow], d[:task])
248
253
  else
249
254
  task_info = d[:workflow].task_info(d[:task])
@@ -251,7 +256,7 @@ module Workflow
251
256
  _inputs = assign_dep_inputs({}, options.merge(d[:inputs] || {}), real_dependencies, task_info)
252
257
  _jobname = d.include?(:jobname) ? d[:jobname] : jobname
253
258
  job = d[:workflow]._job(d[:task], _jobname, _inputs)
254
- overriden = true if TrueClass === job.overriden && (d.nil? || ! d[:not_overriden])
259
+ overriden = true if Symbol === job.overriden? && (d.nil? || ! d[:not_overriden]) && (inputs.nil? || ! inputs[:not_overriden])
255
260
  job
256
261
  end
257
262
  end
@@ -267,14 +272,15 @@ module Workflow
267
272
  dep[:workflow] ||= wf || self
268
273
  _override_dependencies = override_dependencies.merge(override_dependencies(dep[:inputs] || {}))
269
274
  if _override_dependencies[dep[:workflow].to_s] && value = _override_dependencies[dep[:workflow].to_s][dep[:task]]
270
- overriden = true if (options.nil? || ! options[:not_overriden]) && ! unlocated_override?(value)
275
+ overriden = true if (inputs.nil? || ! inputs[:not_overriden]) && (options.nil? || ! options[:not_overriden]) && ! unlocated_override?(value)
276
+ #overriden = true if (options.nil? || ! options[:not_overriden]) && ! unlocated_override?(value)
271
277
  setup_override_dependency(value, dep[:workflow], dep[:task])
272
278
  else
273
279
  task_info = (dep[:task] && dep[:workflow]) ? dep[:workflow].task_info(dep[:task]) : nil
274
280
  _inputs = assign_dep_inputs({}, dep[:inputs], real_dependencies, task_info)
275
281
  _jobname = dep.include?(:jobname) ? dep[:jobname] : jobname
276
282
  job = dep[:workflow]._job(dep[:task], _jobname, _inputs)
277
- overriden = true if TrueClass === job.overriden && (d.nil? || ! d[:not_overriden])
283
+ overriden = true if Symbol === job.overriden? && (d.nil? || ! d[:not_overriden]) && (inputs.nil? || ! inputs[:not_overriden])
278
284
  job
279
285
  end
280
286
  end
@@ -30,7 +30,7 @@ module Workflow
30
30
  title = doc_parse_first_line doc
31
31
  description, task_info = doc_parse_up_to doc, /^# Tasks/i
32
32
  task_description, tasks = doc_parse_up_to task_info, /^##/, true
33
- tasks = doc_parse_chunks tasks, /## (.*)/
33
+ tasks = doc_parse_chunks tasks, /^## (.*)/
34
34
  {:title => title.strip, :description => description.strip, :task_description => task_description.strip, :tasks => tasks}
35
35
  end
36
36
 
@@ -16,6 +16,17 @@ class Step
16
16
  end
17
17
  end
18
18
 
19
+ def relocated
20
+ if @relocated.nil?
21
+ if Open.exists?(info_file) and (info[:path] != path)
22
+ @relocated = true
23
+ else
24
+ @relocated = false
25
+ end
26
+ end
27
+ @relocated
28
+ end
29
+
19
30
  def self.serialize_info(info)
20
31
  info = info.clean_version if IndiferentHash === info
21
32
  INFO_SERIALIZER.dump(info)
@@ -417,4 +428,8 @@ class Step
417
428
  end
418
429
  end
419
430
 
431
+ def inspect
432
+ Misc.fingerprint(self)
433
+ end
434
+
420
435
  end
@@ -48,7 +48,11 @@ class Step
48
48
  IndiferentHash.setup info_inputs
49
49
  @inputs = NamedArray.setup info_inputs.values_at(*task.inputs.collect{|name| name.to_s}), task.inputs
50
50
  else
51
- @inputs = NamedArray.setup info_inputs.values, info_inputs.keys
51
+ if Hash === info_inputs
52
+ @inputs = NamedArray.setup info_inputs.values, info_inputs.keys
53
+ else
54
+ @inputs = info_inputs
55
+ end
52
56
  end
53
57
  else
54
58
  nil
@@ -51,9 +51,6 @@ class Step
51
51
  @info_mutex = Mutex.new
52
52
  @inputs = inputs
53
53
  NamedArray.setup @inputs, task.inputs.collect{|s| s.to_s} if task and task.respond_to? :inputs and task.inputs
54
- if Open.exists?(info_file) and (info[:path] != path)
55
- @relocated = true
56
- end
57
54
  end
58
55
 
59
56
  def workflow
data/lib/rbbt/workflow.rb CHANGED
@@ -495,7 +495,8 @@ module Workflow
495
495
  end
496
496
  end
497
497
 
498
- overriden = true if dependencies.select{|d| d.overriden && d.clean_name != d.name }.any?
498
+ #overriden = true if dependencies.select{|d| d.overriden && d.clean_name != d.name }.any?
499
+ overriden = true if dependencies.select{|d| Symbol === d.overriden }.any?
499
500
 
500
501
  input_values = task.take_input_values(inputs)
501
502
  if real_inputs.empty? && Workflow::TAG != :inputs && ! overriden #&& ! dependencies.select{|d| d.overriden && d.clean_name != d.name }.any?
@@ -665,6 +666,7 @@ module Workflow
665
666
  step = Step.new path
666
667
  relocated = false
667
668
  dependencies = (step.info[:dependencies] || []).collect do |task,name,dep_path|
669
+ dep_path = task if dep_path.nil?
668
670
  if Open.exists?(dep_path) || Open.exists?(dep_path + '.info') || Open.remote?(dep_path) || Open.ssh?(dep_path)
669
671
  Workflow._load_step dep_path
670
672
  else
@@ -1,24 +1,53 @@
1
1
  import warnings
2
2
  import sys
3
3
  import os
4
+ import subprocess
4
5
 
5
- def rbbt():
6
- print("Rbbt")
6
+ def rbbt(cmd = None):
7
+ if cmd is None:
8
+ print("Rbbt")
9
+ else:
10
+ return subprocess.run('rbbt_exec.rb', input=cmd.encode('utf-8'), capture_output=True).stdout.decode()
11
+
12
+ def libdir():
13
+ return rbbt('puts Rbbt.find(:lib)').rstrip()
14
+
15
+ def add_libdir():
16
+ pythondir = os.path.join(libdir(), 'python')
17
+ sys.path.insert(0, pythondir)
7
18
 
8
19
  def path(subdir = None, base_dir = None):
9
20
  from pathlib import Path
10
21
  import os
11
22
 
12
- if (base_dir == None):
23
+ if (base_dir == 'base'):
13
24
  base_dir = os.path.join(Path.home(), ".rbbt")
25
+ elif (base_dir == 'lib'):
26
+ base_dir = libdir()
27
+ else:
28
+ for base_dir in ('lib', 'base'):
29
+ file = path(subdir, base_dir)
30
+ if os.path.exists(file):
31
+ return file
32
+ return path(subdir, 'base')
33
+
14
34
  if (subdir == None):
15
35
  return base_dir
16
36
  else:
17
37
  return os.path.join(base_dir, subdir)
18
38
 
39
+ def read(subdir, base_dir = None, encoding='utf-8'):
40
+ file = path(subdir, base_dir)
41
+ with open(file, encoding=encoding) as f:
42
+ return f.read()
43
+
19
44
  def inspect(obj):
20
45
  print(dir(obj))
21
46
 
47
+ def rich(obj):
48
+ import rich
49
+ rich.inspect(obj)
50
+
22
51
  def log_tsv(tsv):
23
52
  print(tsv)
24
53
  print(tsv.keys())
@@ -7,11 +7,12 @@ $0 = "rbbt #{$previous_commands*""} #{ File.basename(__FILE__) }" if $previous_c
7
7
 
8
8
  options = SOPT.setup <<EOF
9
9
 
10
- Description
10
+ Write a Excel file with the contents of a TSV
11
11
 
12
- $ rbbt tsv write_excel [options] <filename.tsv|-> <filename.xls|filename.xlsx>
12
+ $ rbbt tsv write_excel [options] <filename.tsv|-> [<filename.xls|filename.xlsx>]
13
13
 
14
- Use - to read from STDIN
14
+ If no target file is specified it uses the same input files but replaces extension. Specifying
15
+ the extension of the excel file select the excel format to use.
15
16
 
16
17
  -k--key_field* Key field
17
18
  -f--fields* Fields
@@ -70,9 +70,14 @@ begin
70
70
  exit 0
71
71
  else
72
72
  if command == 'bootstrap'
73
- Log.info "No bootstrap for #{ workflow }, running examples instead"
74
- puts `rbbt workflow example #{ workflow }`
75
- exit 0
73
+ if wf.libdir["test_workflow.rb"].exists?
74
+ Log.info "No bootstrap for #{ workflow }, running test_workflow.rb instead"
75
+ CMD.cmd_log('ruby', wf.libdir["test_workflow.rb"].find)
76
+ else
77
+ Log.info "No bootstrap for #{ workflow }, running examples instead"
78
+ CMD.cmd_log("rbbt workflow example #{ workflow }")
79
+ exit 0
80
+ end
76
81
  end
77
82
 
78
83
  raise ParameterException, "Error: Command not understood: #{command}"
@@ -114,6 +114,7 @@ end
114
114
  if dependencies and dependencies.any?
115
115
  puts Log.color(:magenta, "Dependencies") << ": "
116
116
  dependencies.each do |name,task,file|
117
+ file = name if file.nil?
117
118
  puts " " << file
118
119
  end
119
120
  end
@@ -46,6 +46,7 @@ app.get '/' do
46
46
  begin
47
47
  template_render('main', params, 'main', :cache_type => :asynchronous)
48
48
  rescue TemplateMissing
49
+ Log.exception $!
49
50
  redirect to(File.join('/', wf.to_s))
50
51
  end
51
52
  end
@@ -88,7 +89,16 @@ load_file Rbbt.etc['app.d/semaphores.rb'].find_all
88
89
  if etc_dir['target_workflow_exports'].exists?
89
90
  exports = etc_dir['target_workflow_exports'].read.split("\n")
90
91
  exports.each do |task|
91
- wf.export task.to_sym
92
+ if task.include?('#')
93
+ wf_name, task_name = task.split("#")
94
+ begin
95
+ task_wf = Kernel.const_get wf_name
96
+ task_wf.export task_name.to_sym
97
+ rescue
98
+ end
99
+ else
100
+ wf.export task.to_sym
101
+ end
92
102
  end
93
103
  end
94
104
 
@@ -35,6 +35,7 @@ class TestMiscOmics < Test::Unit::TestCase
35
35
  end
36
36
 
37
37
  def test_translate_prot_mutation_hgvs2rbbt
38
+ assert_equal Misc.translate_prot_mutation_hgvs2rbbt("p.Arg2459Gly"), "R2459G"
38
39
  assert_equal Misc.translate_prot_mutation_hgvs2rbbt("p.E255K"), "E255K"
39
40
  assert_equal Misc.translate_prot_mutation_hgvs2rbbt("p.E279Z"), "E279Z"
40
41
  assert_equal Misc.translate_prot_mutation_hgvs2rbbt("p.R132?"), "R132?"
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.40.4
4
+ version: 5.41.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Miguel Vazquez
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-10-18 00:00:00.000000000 Z
11
+ date: 2023-12-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -338,7 +338,7 @@ files:
338
338
  - lib/rbbt/workflow/util/orchestrator.rb
339
339
  - lib/rbbt/workflow/util/provenance.rb
340
340
  - lib/rbbt/workflow/util/trace.rb
341
- - python/rbbt.py
341
+ - python/rbbt/__init__.py
342
342
  - share/Rlib/plot.R
343
343
  - share/Rlib/svg.R
344
344
  - share/Rlib/util.R
@@ -584,7 +584,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
584
584
  - !ruby/object:Gem::Version
585
585
  version: '0'
586
586
  requirements: []
587
- rubygems_version: 3.4.19
587
+ rubygems_version: 3.5.0.dev
588
588
  signing_key:
589
589
  specification_version: 4
590
590
  summary: Utilities for the Ruby Bioinformatics Toolkit (rbbt)