rbbt-util 5.37.16 → 5.38.1
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 +4 -4
- data/lib/rbbt/annotations.rb +2 -0
- data/lib/rbbt/hpc/batch.rb +15 -6
- data/lib/rbbt/hpc/orchestrate.rb +1 -0
- data/lib/rbbt/persist.rb +2 -2
- data/lib/rbbt/resource/path.rb +1 -0
- data/lib/rbbt/resource/rake.rb +1 -1
- data/lib/rbbt/resource.rb +7 -2
- data/lib/rbbt/tsv/excel.rb +5 -1
- data/lib/rbbt/tsv/parser.rb +2 -2
- data/lib/rbbt/util/misc/development.rb +6 -1
- data/lib/rbbt/util/misc/exceptions.rb +10 -0
- data/lib/rbbt/util/misc/format.rb +3 -0
- data/lib/rbbt/util/misc/indiferent_hash.rb +9 -6
- data/lib/rbbt/util/misc/inspect.rb +22 -8
- data/lib/rbbt/util/misc/options.rb +1 -1
- data/lib/rbbt/util/misc/pipes.rb +3 -3
- data/lib/rbbt/util/open.rb +0 -1
- data/lib/rbbt/util/ssh.rb +107 -14
- data/lib/rbbt/workflow/remote_workflow/driver/ssh.rb +75 -15
- data/lib/rbbt/workflow/remote_workflow/remote_step/ssh.rb +16 -7
- data/lib/rbbt/workflow/remote_workflow/remote_step.rb +1 -0
- data/lib/rbbt/workflow/step/dependencies.rb +6 -5
- data/lib/rbbt/workflow/step/info.rb +1 -1
- data/lib/rbbt/workflow/step/run.rb +1 -1
- data/lib/rbbt/workflow/step/save_load_inputs.rb +9 -8
- data/lib/rbbt/workflow/step.rb +7 -2
- data/lib/rbbt/workflow/usage.rb +3 -3
- data/lib/rbbt/workflow.rb +1 -1
- data/share/rbbt_commands/hpc/list +293 -293
- data/share/rbbt_commands/lsf/list +293 -293
- data/share/rbbt_commands/resource/find +2 -1
- data/share/rbbt_commands/resource/glob +1 -1
- data/share/rbbt_commands/slurm/list +293 -293
- data/share/rbbt_commands/workflow/task +63 -21
- data/test/rbbt/test_resource.rb +7 -2
- data/test/rbbt/tsv/test_accessor.rb +21 -4
- data/test/rbbt/tsv/test_parser.rb +28 -0
- data/test/rbbt/util/misc/test_indiferent_hash.rb +14 -0
- data/test/rbbt/util/test_cmd.rb +7 -1
- data/test/rbbt/util/test_open.rb +3 -3
- data/test/rbbt/util/test_ssh.rb +10 -0
- metadata +7 -3
@@ -93,6 +93,8 @@ def fix_options(workflow, task, job_options)
|
|
93
93
|
TrueClass === value or %w(true TRUE T yes).include? value
|
94
94
|
when :float
|
95
95
|
value.to_f
|
96
|
+
when :path
|
97
|
+
Path.setup(value)
|
96
98
|
when :integer
|
97
99
|
value.to_i
|
98
100
|
when :text
|
@@ -419,13 +421,6 @@ begin
|
|
419
421
|
exit 0
|
420
422
|
end
|
421
423
|
|
422
|
-
if tasks = options.delete(:produce)
|
423
|
-
tasks = tasks.split(",")
|
424
|
-
produce_cpus = (options[:produce_cpus] || 1)
|
425
|
-
puts Step.produce_dependencies(job, tasks, prepare_cpus)
|
426
|
-
exit 0
|
427
|
-
end
|
428
|
-
|
429
424
|
def match_dependencies(queries, dependencies)
|
430
425
|
queries = queries.collect{|q| q.include?("#") ? q.split("#") : q }
|
431
426
|
|
@@ -443,30 +438,69 @@ begin
|
|
443
438
|
matched
|
444
439
|
end
|
445
440
|
|
441
|
+
def replace_relayed_jobs(jobs_to_relay, server, produce_dependencies_for_relay = false, run_type = :run)
|
442
|
+
jobs_to_relay.each do |job|
|
443
|
+
ComputeDependency.setup(job, :bootstrap)
|
444
|
+
next if job.done?
|
445
|
+
Log.low "Relaying #{Misc.fingerprint job} to #{server}"
|
446
|
+
jmeta = class << job; self; end
|
447
|
+
|
448
|
+
job.instance_variable_set(:@job, job)
|
449
|
+
job.instance_variable_set(:@host, server)
|
450
|
+
job.instance_variable_set(:@produce_dependencies, produce_dependencies_for_relay)
|
451
|
+
|
452
|
+
jmeta.define_method :run do |*args|
|
453
|
+
if done?
|
454
|
+
load
|
455
|
+
else
|
456
|
+
RemoteWorkflow::SSH.relay_job_list([@job], @host, :run_type => run_type, :migrate => true, :produce_dependencies => @produce_dependencies)
|
457
|
+
Step.migrate(@job, 'user', :source => @host)
|
458
|
+
load
|
459
|
+
end
|
460
|
+
end
|
461
|
+
#job.dependencies = []
|
462
|
+
|
463
|
+
#([job] + job.rec_dependencies).each do |j|
|
464
|
+
# next if job.done?
|
465
|
+
# jmeta = class << j; self; end
|
466
|
+
|
467
|
+
# j.instance_variable_set(:@job, job)
|
468
|
+
# j.instance_variable_set(:@host, server)
|
469
|
+
# j.instance_variable_set(:@produce_dependencies, produce_dependencies_for_relay)
|
470
|
+
|
471
|
+
# jmeta.define_method :run do |*args|
|
472
|
+
# if done?
|
473
|
+
# load
|
474
|
+
# else
|
475
|
+
# RemoteWorkflow::SSH.relay_job_list([@job], @host, :run_type => run_type, :migrate => true, :produce_dependencies => @produce_dependencies)
|
476
|
+
# Step.migrate(@job, 'user', :source => @host)
|
477
|
+
# load
|
478
|
+
# end
|
479
|
+
# end
|
480
|
+
#end
|
481
|
+
end
|
482
|
+
end
|
483
|
+
|
484
|
+
|
446
485
|
if server = options.delete(:relay)
|
447
486
|
require 'rbbt/workflow/remote_workflow'
|
448
487
|
relay_dependencies = options.delete(:relay_dependencies).split(",")
|
449
488
|
produce_dependencies_for_relay = options.delete(:produce_dependencies_for_relay)
|
450
|
-
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
|
455
|
-
RemoteWorkflow::SSH.relay_job(job, server, :run_type => :run, :migrate => true, :produce_dependencies => produce_dependencies_for_relay)
|
456
|
-
end
|
489
|
+
|
490
|
+
jobs_to_relay = relay_dependencies ? match_dependencies(relay_dependencies, job.rec_dependencies) : [job]
|
491
|
+
jobs_to_relay.reject!{|d| d.done? }
|
492
|
+
|
493
|
+
replace_relayed_jobs(jobs_to_relay, server, produce_dependencies_for_relay, :run)
|
457
494
|
end
|
458
495
|
|
459
496
|
if server = options.delete(:slurm_relay)
|
460
497
|
require 'rbbt/workflow/remote_workflow'
|
461
498
|
relay_dependencies = options.delete(:relay_dependencies).split(",")
|
462
499
|
produce_dependencies_for_relay = options.delete(:produce_dependencies_for_relay)
|
463
|
-
|
464
|
-
|
465
|
-
|
466
|
-
|
467
|
-
else
|
468
|
-
RemoteWorkflow::SSH.relay_job(job, server, :run_type => :orchestrate, :migrate => true, :produce_dependencies => produce_dependencies_for_relay)
|
469
|
-
end
|
500
|
+
jobs_to_relay = relay_dependencies ? match_dependencies(relay_dependencies, job.rec_dependencies) : [job]
|
501
|
+
jobs_to_relay.reject!{|d| d.done? }
|
502
|
+
|
503
|
+
replace_relayed_jobs(jobs_to_relay, server, produce_dependencies_for_relay, :orchestrate)
|
470
504
|
end
|
471
505
|
|
472
506
|
|
@@ -488,6 +522,14 @@ begin
|
|
488
522
|
end
|
489
523
|
end
|
490
524
|
|
525
|
+
if tasks = options.delete(:produce)
|
526
|
+
tasks = tasks.split(",")
|
527
|
+
produce_cpus = (options[:produce_cpus] || 1)
|
528
|
+
puts Step.produce_dependencies(job, tasks, produce_cpus)
|
529
|
+
exit 0
|
530
|
+
end
|
531
|
+
|
532
|
+
|
491
533
|
if do_fork
|
492
534
|
ENV["RBBT_NO_PROGRESS"] = "true"
|
493
535
|
if detach
|
data/test/rbbt/test_resource.rb
CHANGED
@@ -7,6 +7,8 @@ require 'test/unit'
|
|
7
7
|
module TestResource
|
8
8
|
extend Resource
|
9
9
|
|
10
|
+
self.subdir = 'tmp/tmp-share/resource/TestResource/'
|
11
|
+
|
10
12
|
claim tmp.test.google, :url, "http://google.com"
|
11
13
|
claim tmp.test.string, :string, "TEST"
|
12
14
|
claim tmp.test.proc, :proc do
|
@@ -79,8 +81,8 @@ class TestTSV < Test::Unit::TestCase
|
|
79
81
|
end
|
80
82
|
|
81
83
|
def test_libdir
|
82
|
-
assert File.exist?(
|
83
|
-
assert File.exist?(
|
84
|
+
assert File.exist?(Rbbt.share.Rlib["util.R"].find(:lib))
|
85
|
+
assert File.exist?(Rbbt.share.Rlib["util.R"].find)
|
84
86
|
end
|
85
87
|
|
86
88
|
def __test_server
|
@@ -100,6 +102,9 @@ class TestTSV < Test::Unit::TestCase
|
|
100
102
|
assert_equal 'share/databases/DATABASE/FILE', Rbbt.identify('/usr/local/share/rbbt/databases/DATABASE/FILE')
|
101
103
|
assert_equal 'share/databases/DATABASE/FILE', Rbbt.identify(File.join(ENV["HOME"], '.rbbt/share/databases/DATABASE/FILE'))
|
102
104
|
assert_equal 'share/databases/DATABASE/FILE', Rbbt.identify('/usr/local/share/rbbt/databases/DATABASE/FILE')
|
105
|
+
|
106
|
+
assert_equal 'etc/somefile', TestResource.identify(TestResource.etc.somefile.find(:user))
|
107
|
+
assert_equal 'etc/somefile', TestResource.identify(TestResource.etc.somefile.find(:local))
|
103
108
|
end
|
104
109
|
|
105
110
|
end
|
@@ -199,13 +199,30 @@ row3 A|AA|AAA|AAA B Id3 3
|
|
199
199
|
|
200
200
|
def test_unzip
|
201
201
|
content =<<-EOF
|
202
|
-
|
203
|
-
|
204
|
-
|
202
|
+
#: :type=:list
|
203
|
+
#PMID:Sentence number:TF:TG Transcription Factor (Associated Gene Name) Target Gene (Associated Gene Name) Sign Negation PMID
|
204
|
+
24265317:3:NR1H3:FASN NR1H3 FASN 24265317
|
205
|
+
17522048:0:NR1H3:FASN NR1H3 FASN + 17522048
|
206
|
+
19903962:0:NR1H3:FASN NR1H3 FASN 19903962
|
207
|
+
19903962:7:NR1H3:FASN NR1H3 FASN 19903962
|
208
|
+
22183856:4:NR1H3:FASN NR1H3 FASN 22183856
|
209
|
+
22641099:4:NR1H3:FASN NR1H3 FASN + 22641099
|
210
|
+
23499676:8:NR1H3:FASN NR1H3 FASN + 23499676
|
211
|
+
11790787:5:NR1H3:FASN NR1H3 FASN 11790787
|
212
|
+
11790787:7:NR1H3:FASN NR1H3 FASN + 11790787
|
213
|
+
11790787:9:NR1H3:FASN NR1H3 FASN + 11790787
|
214
|
+
11790787:11:NR1H3:FASN NR1H3 FASN 11790787
|
215
|
+
17522048:1:NR1H3:FASN NR1H3 FASN + 17522048
|
216
|
+
17522048:3:NR1H3:FASN NR1H3 FASN 17522048
|
217
|
+
22160584:1:NR1H3:FASN NR1H3 FASN 22160584
|
218
|
+
22160584:5:NR1H3:FASN NR1H3 FASN + 22160584
|
219
|
+
22160584:8:NR1H3:FASN NR1H3 FASN + 22160584
|
205
220
|
EOF
|
206
221
|
|
207
222
|
TmpFile.with_file(content) do |filename|
|
208
|
-
tsv = TSV.open(filename, :
|
223
|
+
tsv = TSV.open(filename, :key_field => "Transcription Factor (Associated Gene Name)", :fields => ["Target Gene (Associated Gene Name)", "Sign", "PMID"], :merge => true, :type => :double)
|
224
|
+
unzip = tsv.unzip(0,true)
|
225
|
+
assert_equal unzip["NR1H3:FASN"][0].length, unzip["NR1H3:FASN"][1].length
|
209
226
|
end
|
210
227
|
end
|
211
228
|
|
@@ -69,5 +69,33 @@ A B C D E
|
|
69
69
|
end
|
70
70
|
end
|
71
71
|
|
72
|
+
def test_merge
|
73
|
+
content =<<-EOF
|
74
|
+
#: :type=:double
|
75
|
+
#PMID:Sentence number:TF:TG Transcription Factor (Associated Gene Name) Target Gene (Associated Gene Name) Sign Negation PMID
|
76
|
+
24265317:3:NR1H3:FASN NR1H3 FASN 24265317
|
77
|
+
17522048:0:NR1H3:FASN NR1H3 FASN + 17522048
|
78
|
+
19903962:0:NR1H3:FASN NR1H3 FASN 19903962
|
79
|
+
19903962:7:NR1H3:FASN NR1H3 FASN 19903962
|
80
|
+
22183856:4:NR1H3:FASN NR1H3 FASN 22183856
|
81
|
+
22641099:4:NR1H3:FASN NR1H3 FASN + 22641099
|
82
|
+
23499676:8:NR1H3:FASN NR1H3 FASN + 23499676
|
83
|
+
11790787:5:NR1H3:FASN NR1H3 FASN 11790787
|
84
|
+
11790787:7:NR1H3:FASN NR1H3 FASN + 11790787
|
85
|
+
11790787:9:NR1H3:FASN NR1H3 FASN + 11790787
|
86
|
+
11790787:11:NR1H3:FASN NR1H3 FASN 11790787
|
87
|
+
17522048:1:NR1H3:FASN NR1H3 FASN + 17522048
|
88
|
+
17522048:3:NR1H3:FASN NR1H3 FASN 17522048
|
89
|
+
22160584:1:NR1H3:FASN NR1H3 FASN 22160584
|
90
|
+
22160584:5:NR1H3:FASN NR1H3 FASN + 22160584
|
91
|
+
22160584:8:NR1H3:FASN NR1H3 FASN + 22160584
|
92
|
+
EOF
|
93
|
+
|
94
|
+
TmpFile.with_file(content) do |filename|
|
95
|
+
tsv = TSV.open(filename, :key_field => "Transcription Factor (Associated Gene Name)", :fields => ["Target Gene (Associated Gene Name)", "Sign", "PMID"], :merge => true, :type => :double)
|
96
|
+
assert_equal 16, tsv["NR1H3"]["Sign"].length
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
72
100
|
end
|
73
101
|
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require File.expand_path(__FILE__).sub(%r(/test/.*), '/test/test_helper.rb')
|
2
|
+
require File.expand_path(__FILE__).sub(%r(.*/test/), '').sub(/test_(.*)\.rb/,'\1')
|
3
|
+
|
4
|
+
class TestIndiferentHash < Test::Unit::TestCase
|
5
|
+
def test_recursive
|
6
|
+
a = {:a => {:b => 1 } }
|
7
|
+
IndiferentHash.setup(a)
|
8
|
+
|
9
|
+
assert IndiferentHash === a["a"]
|
10
|
+
assert_equal 1, a[:a]["b"]
|
11
|
+
assert_equal 1, a["a"][:b]
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
data/test/rbbt/util/test_cmd.rb
CHANGED
@@ -39,7 +39,7 @@ class TestCmd < Test::Unit::TestCase
|
|
39
39
|
assert_nothing_raised ProcessFailed do CMD.cmd('ls -fake_option', :no_fail => true, :pipe => true) end
|
40
40
|
|
41
41
|
assert_raise ProcessFailed do CMD.cmd('fake-command', :stderr => true, :pipe => true).join end
|
42
|
-
assert_raise
|
42
|
+
assert_raise ConcurrentStreamProcessFailed do CMD.cmd('ls -fake_option', :stderr => true, :pipe => true).join end
|
43
43
|
end
|
44
44
|
|
45
45
|
def test_pipes
|
@@ -78,4 +78,10 @@ line33
|
|
78
78
|
def test_bash
|
79
79
|
puts CMD.bash("awk 'test'")
|
80
80
|
end
|
81
|
+
|
82
|
+
def test_cmd_error
|
83
|
+
assert_raise ConcurrentStreamProcessFailed do
|
84
|
+
CMD.cmd_log("ruby -e 'puts 1; STDERR.puts 1; sleep 2; raise'")
|
85
|
+
end
|
86
|
+
end
|
81
87
|
end
|
data/test/rbbt/util/test_open.rb
CHANGED
@@ -98,7 +98,7 @@ class TestOpen < Test::Unit::TestCase
|
|
98
98
|
4
|
99
99
|
EOF
|
100
100
|
TmpFile.with_file(content) do |file|
|
101
|
-
`
|
101
|
+
`gzip #{file}`
|
102
102
|
assert_equal(content, Open.read(file + '.gz'))
|
103
103
|
puts content
|
104
104
|
FileUtils.rm file + '.gz'
|
@@ -181,8 +181,8 @@ class TestOpen < Test::Unit::TestCase
|
|
181
181
|
Misc.consume_stream(StringIO.new(text), false, file)
|
182
182
|
|
183
183
|
assert_equal text, Open.read(file)
|
184
|
-
assert
|
185
|
-
|
184
|
+
assert Open.exists?(file)
|
185
|
+
refute File.exist?(file)
|
186
186
|
end
|
187
187
|
|
188
188
|
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
require File.expand_path(__FILE__).sub(%r(/test/.*), '/test/test_helper.rb')
|
2
|
+
require File.expand_path(__FILE__).sub(%r(.*/test/), '').sub(/test_(.*)\.rb/,'\1')
|
3
|
+
|
4
|
+
class TestSSH < Test::Unit::TestCase
|
5
|
+
def test_marshal
|
6
|
+
|
7
|
+
assert TrueClass === SSHLine.rbbt('turbo', 'true')
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
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.
|
4
|
+
version: 5.38.1
|
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-
|
11
|
+
date: 2023-06-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -530,6 +530,7 @@ files:
|
|
530
530
|
- test/rbbt/util/misc/test_communication.rb
|
531
531
|
- test/rbbt/util/misc/test_development.rb
|
532
532
|
- test/rbbt/util/misc/test_format.rb
|
533
|
+
- test/rbbt/util/misc/test_indiferent_hash.rb
|
533
534
|
- test/rbbt/util/misc/test_lock.rb
|
534
535
|
- test/rbbt/util/misc/test_multipart_payload.rb
|
535
536
|
- test/rbbt/util/misc/test_omics.rb
|
@@ -556,6 +557,7 @@ files:
|
|
556
557
|
- test/rbbt/util/test_semaphore.rb
|
557
558
|
- test/rbbt/util/test_simpleDSL.rb
|
558
559
|
- test/rbbt/util/test_simpleopt.rb
|
560
|
+
- test/rbbt/util/test_ssh.rb
|
559
561
|
- test/rbbt/util/test_tmpfile.rb
|
560
562
|
- test/rbbt/workflow/step/test_dependencies.rb
|
561
563
|
- test/rbbt/workflow/step/test_save_load_inputs.rb
|
@@ -587,7 +589,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
587
589
|
- !ruby/object:Gem::Version
|
588
590
|
version: '0'
|
589
591
|
requirements: []
|
590
|
-
rubygems_version: 3.4.
|
592
|
+
rubygems_version: 3.4.13
|
591
593
|
signing_key:
|
592
594
|
specification_version: 4
|
593
595
|
summary: Utilities for the Ruby Bioinformatics Toolkit (rbbt)
|
@@ -608,6 +610,7 @@ test_files:
|
|
608
610
|
- test/rbbt/util/test_procpath.rb
|
609
611
|
- test/rbbt/util/python/test_util.rb
|
610
612
|
- test/rbbt/util/misc/test_development.rb
|
613
|
+
- test/rbbt/util/misc/test_indiferent_hash.rb
|
611
614
|
- test/rbbt/util/misc/test_omics.rb
|
612
615
|
- test/rbbt/util/misc/test_pipes.rb
|
613
616
|
- test/rbbt/util/misc/test_serialize.rb
|
@@ -630,6 +633,7 @@ test_files:
|
|
630
633
|
- test/rbbt/util/test_excel2tsv.rb
|
631
634
|
- test/rbbt/util/test_misc.rb
|
632
635
|
- test/rbbt/util/test_open.rb
|
636
|
+
- test/rbbt/util/test_ssh.rb
|
633
637
|
- test/rbbt/util/test_simpleopt.rb
|
634
638
|
- test/rbbt/util/simpleopt/test_parse.rb
|
635
639
|
- test/rbbt/util/simpleopt/test_setup.rb
|