rbbt-util 5.20.2 → 5.20.3
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/association/index.rb +3 -4
- data/lib/rbbt/tsv/accessor.rb +1 -1
- data/lib/rbbt/tsv/manipulate.rb +0 -1
- data/lib/rbbt/tsv/parallel/traverse.rb +8 -2
- data/lib/rbbt/util/cmd.rb +1 -1
- data/lib/rbbt/util/concurrency/processes.rb +4 -3
- data/lib/rbbt/util/concurrency/processes/worker.rb +4 -2
- data/lib/rbbt/util/log/progress/util.rb +20 -1
- data/lib/rbbt/util/misc/bgzf.rb +1 -1
- data/lib/rbbt/util/misc/inspect.rb +7 -3
- data/lib/rbbt/util/misc/multipart_payload.rb +8 -8
- data/lib/rbbt/util/misc/pipes.rb +115 -51
- data/lib/rbbt/util/open.rb +1 -1
- data/lib/rbbt/workflow.rb +1 -0
- data/lib/rbbt/workflow/accessor.rb +86 -15
- data/lib/rbbt/workflow/definition.rb +10 -17
- data/lib/rbbt/workflow/step.rb +4 -16
- data/lib/rbbt/workflow/step/dependencies.rb +451 -0
- data/lib/rbbt/workflow/step/run.rb +43 -226
- data/lib/rbbt/workflow/task.rb +7 -1
- data/share/rbbt_commands/association/subset +6 -1
- data/share/rbbt_commands/workflow/task +21 -9
- data/test/rbbt/util/misc/test_pipes.rb +54 -0
- data/test/rbbt/workflow/step/test_dependencies.rb +206 -0
- metadata +5 -2
@@ -133,6 +133,41 @@ row1 A B C
|
|
133
133
|
end
|
134
134
|
end
|
135
135
|
|
136
|
+
def test_dup_stream_multiple
|
137
|
+
text =<<-EOF
|
138
|
+
row2 AA BB CC
|
139
|
+
row3 AAA BBB CCC
|
140
|
+
row1 A B C
|
141
|
+
EOF
|
142
|
+
Log.severity = 0
|
143
|
+
|
144
|
+
text = text * 10000
|
145
|
+
num = 5
|
146
|
+
str_io = StringIO.new
|
147
|
+
strs = []
|
148
|
+
num.times{ strs << StringIO.new }
|
149
|
+
TmpFile.with_file(text) do |tmp|
|
150
|
+
io = Open.open(tmp)
|
151
|
+
copies = Misc.dup_stream_multiple(io, num)
|
152
|
+
|
153
|
+
|
154
|
+
copies.each_with_index do |cio,i|
|
155
|
+
cio.add_callback do
|
156
|
+
str = strs[i]
|
157
|
+
str.rewind
|
158
|
+
assert_equal text, str.read
|
159
|
+
end
|
160
|
+
Misc.consume_stream cio, true, strs[i], false
|
161
|
+
end
|
162
|
+
|
163
|
+
|
164
|
+
Misc.consume_stream io, false, str_io, false
|
165
|
+
str_io.rewind
|
166
|
+
assert_equal text, str_io.read
|
167
|
+
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
136
171
|
def test_remove_lines
|
137
172
|
text1 =<<-EOF
|
138
173
|
line1
|
@@ -176,4 +211,23 @@ line1
|
|
176
211
|
end
|
177
212
|
end
|
178
213
|
end
|
214
|
+
|
215
|
+
def test_consume_into_string_io
|
216
|
+
text =<<-EOF
|
217
|
+
line1
|
218
|
+
line2
|
219
|
+
line3
|
220
|
+
line4
|
221
|
+
EOF
|
222
|
+
|
223
|
+
TmpFile.with_file(text) do |file|
|
224
|
+
out = StringIO.new
|
225
|
+
io = Open.open(file)
|
226
|
+
Misc.consume_stream(io, false, out, false)
|
227
|
+
out.rewind
|
228
|
+
assert_equal text, out.read
|
229
|
+
end
|
230
|
+
|
231
|
+
|
232
|
+
end
|
179
233
|
end
|
@@ -0,0 +1,206 @@
|
|
1
|
+
require File.join(File.expand_path(File.dirname(__FILE__)), '../../..', 'test_helper.rb')
|
2
|
+
require 'rbbt/workflow'
|
3
|
+
|
4
|
+
module DepWorkflow
|
5
|
+
extend Workflow
|
6
|
+
|
7
|
+
input :input_file, :file, "Input file", nil, :stream => true
|
8
|
+
task :task1 => :array do |input_file|
|
9
|
+
TSV.traverse input_file, :type => :array, :into => :stream, :bar => "Task1" do |line|
|
10
|
+
line + "\t" << "Task1"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
dep :task1
|
15
|
+
task :task2 => :array do
|
16
|
+
TSV.traverse step(:task1), :type => :array, :into => :stream, :bar => "Task2" do |line|
|
17
|
+
line + "\t" << "Task2"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
dep :task1
|
22
|
+
task :task3 => :array do
|
23
|
+
TSV.traverse step(:task1), :type => :array, :into => :stream, :bar => "Task3" do |line|
|
24
|
+
line + "\t" << "Task3"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
dep :task2
|
29
|
+
dep :task3
|
30
|
+
task :task4 => :array do
|
31
|
+
s1 = TSV.get_stream step(:task2)
|
32
|
+
s2 = TSV.get_stream step(:task3)
|
33
|
+
Misc.paste_streams([s1, s2])
|
34
|
+
end
|
35
|
+
|
36
|
+
dep :task4
|
37
|
+
task :task5 => :array do
|
38
|
+
TSV.traverse step(:task4), :type => :array, :into => :stream, :bar => "Task5" do |line|
|
39
|
+
line + "\t" << "Task5"
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
dep :task2
|
44
|
+
dep :task5
|
45
|
+
task :task6 => :array do
|
46
|
+
s1 = TSV.get_stream step(:task2)
|
47
|
+
s2 = TSV.get_stream step(:task5)
|
48
|
+
Misc.paste_streams([s1, s2])
|
49
|
+
end
|
50
|
+
|
51
|
+
input :stream_file, :file, "Streamed file", nil, :stream => true
|
52
|
+
task :task7 => :array do |file|
|
53
|
+
TSV.traverse file, :type => :array, :into => :stream, :bar => "Task7" do |line|
|
54
|
+
line + "\t" << "Task7"
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
dep :task6
|
59
|
+
dep :task7, :stream_file => :task6
|
60
|
+
task :task8 => :array do
|
61
|
+
TSV.get_stream step(:task7)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
module ComputeWorkflow
|
66
|
+
extend Workflow
|
67
|
+
|
68
|
+
input :input_file, :file, "Input file", nil, :stream => true
|
69
|
+
task :task1 => :array do |input_file|
|
70
|
+
TSV.traverse input_file, :type => :array, :into => :stream, :bar => "Task1" do |line|
|
71
|
+
line + "\t" << "Task1"
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
dep :task1, :compute => :produce
|
76
|
+
task :task2 => :array do
|
77
|
+
TSV.traverse step(:task1), :type => :array, :into => :stream, :bar => "Task2" do |line|
|
78
|
+
line + "\t" << "Task2"
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
end
|
83
|
+
|
84
|
+
class TestWorkflowDependency < Test::Unit::TestCase
|
85
|
+
def test_task1
|
86
|
+
size = 10000
|
87
|
+
content = (0..size).to_a.collect{|num| "Line #{num}" } * "\n"
|
88
|
+
TmpFile.with_file(content) do |input_file|
|
89
|
+
job = DepWorkflow.job(:task1, "TEST", :input_file => input_file)
|
90
|
+
io = TSV.get_stream job.run(:stream)
|
91
|
+
last_line = nil
|
92
|
+
while line = io.gets
|
93
|
+
last_line = line.strip
|
94
|
+
end
|
95
|
+
io.join
|
96
|
+
|
97
|
+
assert_equal "Line #{size}\tTask1", last_line
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
def test_task2
|
102
|
+
size = 10000
|
103
|
+
content = (0..size).to_a.collect{|num| "Line #{num}" } * "\n"
|
104
|
+
TmpFile.with_file(content) do |input_file|
|
105
|
+
job = DepWorkflow.job(:task2, "TEST", :input_file => input_file)
|
106
|
+
io = TSV.get_stream job.run(:stream)
|
107
|
+
last_line = nil
|
108
|
+
while line = io.gets
|
109
|
+
last_line = line.strip
|
110
|
+
end
|
111
|
+
io.join
|
112
|
+
|
113
|
+
assert_equal "Line #{size}\tTask1\tTask2", last_line
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
def test_task4
|
118
|
+
size = 1000
|
119
|
+
content = (0..size).to_a.collect{|num| "Line #{num}" } * "\n"
|
120
|
+
last_line = nil
|
121
|
+
TmpFile.with_file(content) do |input_file|
|
122
|
+
job = DepWorkflow.job(:task4, "TEST", :input_file => input_file)
|
123
|
+
io = TSV.get_stream job.run(:stream) while line = io.gets last_line = line.strip
|
124
|
+
end
|
125
|
+
io.join
|
126
|
+
end
|
127
|
+
|
128
|
+
assert_equal "Line #{size}\tTask1\tTask2\tTask1\tTask3", last_line
|
129
|
+
end
|
130
|
+
|
131
|
+
def test_task5
|
132
|
+
size = 1000
|
133
|
+
content = (0..size).to_a.collect{|num| "Line #{num}" } * "\n"
|
134
|
+
last_line = nil
|
135
|
+
TmpFile.with_file(content) do |input_file|
|
136
|
+
job = DepWorkflow.job(:task5, "TEST", :input_file => input_file)
|
137
|
+
io = TSV.get_stream job.run(:stream)
|
138
|
+
while line = io.gets
|
139
|
+
last_line = line.strip
|
140
|
+
end
|
141
|
+
io.join
|
142
|
+
end
|
143
|
+
assert_equal "Line #{size}\tTask1\tTask2\tTask1\tTask3\tTask5", last_line
|
144
|
+
end
|
145
|
+
|
146
|
+
def test_task6
|
147
|
+
size = 100000
|
148
|
+
content = (0..size).to_a.collect{|num| "Line #{num}" } * "\n"
|
149
|
+
last_line = nil
|
150
|
+
Log.severity = 0
|
151
|
+
TmpFile.with_file(content) do |input_file|
|
152
|
+
begin
|
153
|
+
job = DepWorkflow.job(:task6, "TEST", :input_file => input_file)
|
154
|
+
job.run(:stream)
|
155
|
+
io = TSV.get_stream job
|
156
|
+
while line = io.gets
|
157
|
+
last_line = line.strip
|
158
|
+
end
|
159
|
+
io.join
|
160
|
+
rescue Exception
|
161
|
+
job.abort
|
162
|
+
raise $!
|
163
|
+
end
|
164
|
+
end
|
165
|
+
assert_equal "Line #{size}\tTask1\tTask2\tTask1\tTask2\tTask1\tTask3\tTask5", last_line
|
166
|
+
end
|
167
|
+
|
168
|
+
def test_task8
|
169
|
+
size = 100000
|
170
|
+
content = (0..size).to_a.collect{|num| "Line #{num}" } * "\n"
|
171
|
+
last_line = nil
|
172
|
+
Log.severity = 0
|
173
|
+
TmpFile.with_file(content) do |input_file|
|
174
|
+
begin
|
175
|
+
job = DepWorkflow.job(:task8, "TEST", :input_file => input_file)
|
176
|
+
job.run(:stream)
|
177
|
+
io = TSV.get_stream job
|
178
|
+
while line = io.gets
|
179
|
+
last_line = line.strip
|
180
|
+
end
|
181
|
+
io.join
|
182
|
+
rescue Exception
|
183
|
+
job.abort
|
184
|
+
raise $!
|
185
|
+
end
|
186
|
+
end
|
187
|
+
assert_equal "Line #{size}\tTask1\tTask2\tTask1\tTask2\tTask1\tTask3\tTask5\tTask7", last_line
|
188
|
+
end
|
189
|
+
|
190
|
+
def test_compute
|
191
|
+
size = 10000
|
192
|
+
content = (0..size).to_a.collect{|num| "Line #{num}" } * "\n"
|
193
|
+
TmpFile.with_file(content) do |input_file|
|
194
|
+
job = ComputeWorkflow.job(:task2, "TEST", :input_file => input_file)
|
195
|
+
io = TSV.get_stream job.run(:stream)
|
196
|
+
last_line = nil
|
197
|
+
while line = io.gets
|
198
|
+
last_line = line.strip
|
199
|
+
end
|
200
|
+
io.join
|
201
|
+
|
202
|
+
assert_equal "Line #{size}\tTask1\tTask2", last_line
|
203
|
+
end
|
204
|
+
end
|
205
|
+
end
|
206
|
+
|
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.20.
|
4
|
+
version: 5.20.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Miguel Vazquez
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-05-
|
11
|
+
date: 2016-05-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -304,6 +304,7 @@ files:
|
|
304
304
|
- lib/rbbt/workflow/examples.rb
|
305
305
|
- lib/rbbt/workflow/soap.rb
|
306
306
|
- lib/rbbt/workflow/step.rb
|
307
|
+
- lib/rbbt/workflow/step/dependencies.rb
|
307
308
|
- lib/rbbt/workflow/step/run.rb
|
308
309
|
- lib/rbbt/workflow/task.rb
|
309
310
|
- lib/rbbt/workflow/usage.rb
|
@@ -449,6 +450,7 @@ files:
|
|
449
450
|
- test/rbbt/util/test_simpleDSL.rb
|
450
451
|
- test/rbbt/util/test_simpleopt.rb
|
451
452
|
- test/rbbt/util/test_tmpfile.rb
|
453
|
+
- test/rbbt/workflow/step/test_dependencies.rb
|
452
454
|
- test/rbbt/workflow/test_doc.rb
|
453
455
|
- test/rbbt/workflow/test_step.rb
|
454
456
|
- test/rbbt/workflow/test_task.rb
|
@@ -525,6 +527,7 @@ test_files:
|
|
525
527
|
- test/rbbt/association/test_util.rb
|
526
528
|
- test/rbbt/association/test_database.rb
|
527
529
|
- test/rbbt/test_tsv.rb
|
530
|
+
- test/rbbt/workflow/step/test_dependencies.rb
|
528
531
|
- test/rbbt/workflow/test_task.rb
|
529
532
|
- test/rbbt/workflow/test_step.rb
|
530
533
|
- test/rbbt/workflow/test_doc.rb
|