scout-gear 10.6.1 → 10.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/lib/scout/entity.rb +1 -0
- data/lib/scout/tsv/annotation/repo.rb +11 -7
- data/lib/scout/tsv/attach.rb +2 -2
- data/lib/scout/tsv/transformer.rb +1 -0
- data/lib/scout/tsv/traverse.rb +2 -1
- data/lib/scout/tsv.rb +1 -4
- data/lib/scout/work_queue.rb +5 -2
- data/lib/scout/workflow/definition.rb +4 -2
- data/lib/scout/workflow/deployment/orchestrator.rb +1 -0
- data/lib/scout/workflow/step/dependencies.rb +1 -1
- data/lib/scout/workflow/step/status.rb +1 -0
- data/lib/scout/workflow/task/dependencies.rb +1 -1
- data/lib/scout/workflow/task/inputs.rb +1 -1
- data/scout-gear.gemspec +3 -5
- data/test/scout/test_work_queue.rb +2 -0
- data/test/scout/test_workflow.rb +16 -0
- data/test/scout/tsv/test_attach.rb +29 -0
- metadata +2 -4
- data/lib/scout/tsv/entity.rb +0 -5
- data/test/scout/tsv/test_entity.rb +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ac64d599e0df97b8ba5abd7aef4855ed1181ab9d9a3ba39196255b6649f56a0c
|
4
|
+
data.tar.gz: 9f1cf16da9432beb46eeb486de5bab1c57e460b09f2126556126eb356c6a6fd6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 27015e493797ff3e80631a49e0d9bf2ccc115997e86d449b217dd55adc6dd0abd7701019c19467e9c48aa6bc7ff3c372238fcd58200069533686e2729870938f
|
7
|
+
data.tar.gz: 4930f226926fdc18b06952f037f8e60b45b49116be115409cbcee36bf66202f0bb909691f20fddc6711babbb2ec9b604a5f3e551742ab52cb3f96748665b13a6
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
10.
|
1
|
+
10.7.0
|
data/lib/scout/entity.rb
CHANGED
@@ -1,17 +1,21 @@
|
|
1
1
|
module Persist
|
2
|
+
REPO_CACHE = {}
|
2
3
|
def self.annotation_repo_persist(repo, name, &block)
|
3
4
|
|
4
5
|
if String === repo
|
5
|
-
repo = repo
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
6
|
+
repo = REPO_CACHE[repo] ||= begin
|
7
|
+
repo = repo.find if Path === repo
|
8
|
+
repo = Persist.open_tokyocabinet(repo, false, :list, :BDB)
|
9
|
+
repo_fields = ["literal", "annotation_types", "JSON"]
|
10
|
+
TSV.setup(repo, :fields => repo_fields, :key_field => "Annotation ID")
|
11
|
+
repo.save_annotation_hash
|
12
|
+
repo
|
13
|
+
end
|
10
14
|
repo.close
|
11
|
-
else
|
12
|
-
repo_fields = repo.fields
|
13
15
|
end
|
14
16
|
|
17
|
+
repo_fields = repo.fields
|
18
|
+
|
15
19
|
subkey = name + ":"
|
16
20
|
|
17
21
|
keys = repo.read_and_close do
|
data/lib/scout/tsv/attach.rb
CHANGED
@@ -154,7 +154,7 @@ module TSV
|
|
154
154
|
|
155
155
|
other_values.zip(overlaps).each do |v,overlap|
|
156
156
|
if type == :list
|
157
|
-
current_values[overlap] = v if current_values[overlap].nil? || String === current_values[overlap] && current_values[overlap].empty?
|
157
|
+
current_values[overlap] = v if current_values[overlap].nil? || (String === current_values[overlap] && current_values[overlap].empty?)
|
158
158
|
elsif type == :flat
|
159
159
|
next if v.nil?
|
160
160
|
v = [v] unless Array === v
|
@@ -206,7 +206,7 @@ module TSV
|
|
206
206
|
if overlap == :key
|
207
207
|
other_key = Array === v ? v : v.first
|
208
208
|
elsif type == :list
|
209
|
-
new_values[overlap] = v if
|
209
|
+
new_values[overlap] = v if new_values[overlap].nil? || (String === new_values[overlap] && new_values[overlap].empty?)
|
210
210
|
else
|
211
211
|
v = [v] unless Array === v
|
212
212
|
new_values[overlap].concat v
|
@@ -80,6 +80,7 @@ module TSV
|
|
80
80
|
def each(*args, **kwargs, &block)
|
81
81
|
kwargs[:into] = @dumper
|
82
82
|
kwargs[:bar] = "Transform #{Log.fingerprint @parser} into #{Log.fingerprint @target}" if TrueClass === kwargs[:bar]
|
83
|
+
@dumper.namespace ||= @namespace
|
83
84
|
@dumper.init if @dumper.respond_to?(:init) && ! @dumper.initialized
|
84
85
|
Open.traverse(@parser, *args, **kwargs) do |k,v|
|
85
86
|
NamedArray.setup(v, @parser.fields, k) unless @unnamed
|
data/lib/scout/tsv/traverse.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require_relative 'parser'
|
2
2
|
module TSV
|
3
|
-
def traverse(key_field_pos = :key, fields_pos = nil, type: nil, one2one: false, unnamed: false, key_field: nil, fields: nil, bar: false, cast: nil, select: nil, &block)
|
3
|
+
def traverse(key_field_pos = :key, fields_pos = nil, type: nil, one2one: false, unnamed: false, key_field: nil, fields: nil, bar: false, cast: nil, select: nil, uniq: false, &block)
|
4
4
|
key_field = key_field_pos if key_field.nil?
|
5
5
|
fields = fields_pos.dup if fields.nil?
|
6
6
|
type = @type if type.nil?
|
@@ -74,6 +74,7 @@ module TSV
|
|
74
74
|
values = TSV.cast_value(values, cast) if cast
|
75
75
|
|
76
76
|
if Array === key
|
77
|
+
key = key.uniq if uniq
|
77
78
|
if @type == :double && one2one
|
78
79
|
if one2one == :strict
|
79
80
|
key.each_with_index do |key_i,i|
|
data/lib/scout/tsv.rb
CHANGED
@@ -11,13 +11,12 @@ require_relative 'tsv/open'
|
|
11
11
|
require_relative 'tsv/attach'
|
12
12
|
require_relative 'tsv/change_id'
|
13
13
|
require_relative 'tsv/stream'
|
14
|
-
require_relative 'tsv/entity'
|
15
14
|
require_relative 'tsv/annotation'
|
16
15
|
require_relative 'tsv/csv'
|
17
16
|
|
18
17
|
module TSV
|
19
18
|
extend Annotation
|
20
|
-
annotation :key_field, :fields, :type, :cast, :filename, :namespace, :unnamed, :identifiers, :
|
19
|
+
annotation :key_field, :fields, :type, :cast, :filename, :namespace, :unnamed, :identifiers, :serializer
|
21
20
|
|
22
21
|
def self.str2options(str)
|
23
22
|
field_options,_sep, rest = str.partition("#")
|
@@ -122,8 +121,6 @@ module TSV
|
|
122
121
|
end
|
123
122
|
end
|
124
123
|
|
125
|
-
tsv.entity_options = entity_options
|
126
|
-
|
127
124
|
tsv
|
128
125
|
end
|
129
126
|
end
|
data/lib/scout/work_queue.rb
CHANGED
@@ -138,17 +138,19 @@ class WorkQueue
|
|
138
138
|
end
|
139
139
|
|
140
140
|
def abort
|
141
|
+
@aborted = true
|
141
142
|
Log.low "Aborting #{@workers.length} workers in queue #{queue_id}"
|
142
143
|
@worker_mutex.synchronize do
|
143
144
|
@workers.each do |w|
|
144
|
-
ScoutSemaphore.post_semaphore(@output.write_sem)
|
145
|
-
ScoutSemaphore.post_semaphore(@input.read_sem)
|
145
|
+
ScoutSemaphore.post_semaphore(@output.write_sem)
|
146
|
+
ScoutSemaphore.post_semaphore(@input.read_sem)
|
146
147
|
w.abort
|
147
148
|
end
|
148
149
|
end
|
149
150
|
end
|
150
151
|
|
151
152
|
def close
|
153
|
+
return if @closed || @aborted
|
152
154
|
@closed = true
|
153
155
|
@worker_mutex.synchronize{ @workers.length }.times do
|
154
156
|
begin
|
@@ -165,6 +167,7 @@ class WorkQueue
|
|
165
167
|
end
|
166
168
|
|
167
169
|
def join(clean = true)
|
170
|
+
close
|
168
171
|
begin
|
169
172
|
@waiter.join if @waiter
|
170
173
|
@reader.join if @reader
|
@@ -21,12 +21,14 @@ module Workflow
|
|
21
21
|
@helpers ||= {}
|
22
22
|
end
|
23
23
|
|
24
|
-
def helper(name, *args, &block)
|
24
|
+
def helper(name, *args, **kwargs, &block)
|
25
25
|
if block_given?
|
26
26
|
helpers[name] = block
|
27
27
|
else
|
28
28
|
raise RbbtException, "helper #{name} unkown in #{self} workflow" unless helpers[name]
|
29
|
-
|
29
|
+
o = Object.new
|
30
|
+
o.extend step_module
|
31
|
+
o.send(name, *args, **kwargs)
|
30
32
|
end
|
31
33
|
end
|
32
34
|
|
@@ -26,6 +26,7 @@ class Step
|
|
26
26
|
newer = rec_dependencies.select{|dep| Path.newer?(self.path, dep.path) }
|
27
27
|
newer += input_dependencies.select{|dep| Path.newer?(self.path, dep.path) }
|
28
28
|
|
29
|
+
Log.low "Newer deps found for #{Log.fingerprint self}: #{Log.fingerprint newer}" if newer.any?
|
29
30
|
newer.empty?
|
30
31
|
end
|
31
32
|
|
@@ -101,7 +101,7 @@ module Task
|
|
101
101
|
else
|
102
102
|
dep = _res
|
103
103
|
dependencies << dep
|
104
|
-
dep_non_default_inputs = find_dep_non_default_inputs.call(dep,
|
104
|
+
dep_non_default_inputs = find_dep_non_default_inputs.call(dep, definition_options)
|
105
105
|
non_default_inputs.concat(dep_non_default_inputs)
|
106
106
|
end
|
107
107
|
end
|
@@ -47,7 +47,7 @@ module Task
|
|
47
47
|
elsif String === value && Symbol === provided && provided.to_s == value
|
48
48
|
same_as_default = true
|
49
49
|
else
|
50
|
-
|
50
|
+
same_as_default = false
|
51
51
|
end
|
52
52
|
if ! provided.nil? && ! same_as_default
|
53
53
|
non_default_inputs << name.to_sym
|
data/scout-gear.gemspec
CHANGED
@@ -2,16 +2,16 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Juwelier::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: scout-gear 10.
|
5
|
+
# stub: scout-gear 10.7.0 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "scout-gear".freeze
|
9
|
-
s.version = "10.
|
9
|
+
s.version = "10.7.0".freeze
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
12
12
|
s.require_paths = ["lib".freeze]
|
13
13
|
s.authors = ["Miguel Vazquez".freeze]
|
14
|
-
s.date = "2024-05
|
14
|
+
s.date = "2024-06-05"
|
15
15
|
s.description = "Temporary files, logs, path, resources, persistence, workflows, TSV, etc.".freeze
|
16
16
|
s.email = "mikisvaz@gmail.com".freeze
|
17
17
|
s.executables = ["scout".freeze]
|
@@ -72,7 +72,6 @@ Gem::Specification.new do |s|
|
|
72
72
|
"lib/scout/tsv/change_id/translate.rb",
|
73
73
|
"lib/scout/tsv/csv.rb",
|
74
74
|
"lib/scout/tsv/dumper.rb",
|
75
|
-
"lib/scout/tsv/entity.rb",
|
76
75
|
"lib/scout/tsv/index.rb",
|
77
76
|
"lib/scout/tsv/open.rb",
|
78
77
|
"lib/scout/tsv/parser.rb",
|
@@ -184,7 +183,6 @@ Gem::Specification.new do |s|
|
|
184
183
|
"test/scout/tsv/test_change_id.rb",
|
185
184
|
"test/scout/tsv/test_csv.rb",
|
186
185
|
"test/scout/tsv/test_dumper.rb",
|
187
|
-
"test/scout/tsv/test_entity.rb",
|
188
186
|
"test/scout/tsv/test_index.rb",
|
189
187
|
"test/scout/tsv/test_open.rb",
|
190
188
|
"test/scout/tsv/test_parser.rb",
|
@@ -117,6 +117,7 @@ class TestWorkQueue < Test::Unit::TestCase
|
|
117
117
|
|
118
118
|
assert_raise ScoutException do
|
119
119
|
begin
|
120
|
+
t.join
|
120
121
|
q.join(false)
|
121
122
|
rescue
|
122
123
|
t.raise($!)
|
@@ -158,6 +159,7 @@ class TestWorkQueue < Test::Unit::TestCase
|
|
158
159
|
|
159
160
|
assert_raise ScoutException do
|
160
161
|
begin
|
162
|
+
t.join
|
161
163
|
q.join(false)
|
162
164
|
rescue Exception
|
163
165
|
t.raise($!)
|
data/test/scout/test_workflow.rb
CHANGED
@@ -85,4 +85,20 @@ class TestWorkflow < Test::Unit::TestCase
|
|
85
85
|
assert_equal "Baking batter (Mixing base (Mixing base (Whisking eggs from share/pantry/eggs) with mixer (share/pantry/flour)) with mixer (share/pantry/blueberries))",
|
86
86
|
Baking.job(:bake_muffin_tray, "Blueberry muffin", :add_bluberries => true).run
|
87
87
|
end
|
88
|
+
|
89
|
+
def test_call_helper
|
90
|
+
wf = Module.new do
|
91
|
+
extend Workflow
|
92
|
+
|
93
|
+
helper :m1 do
|
94
|
+
"TEST"
|
95
|
+
end
|
96
|
+
|
97
|
+
helper :m2 do
|
98
|
+
m1
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
assert_equal "TEST", wf.helper(:m2)
|
103
|
+
end
|
88
104
|
end
|
@@ -449,4 +449,33 @@ A Id3
|
|
449
449
|
assert res["row2"].include? "Id3"
|
450
450
|
assert ! res["row2"].include?("b")
|
451
451
|
end
|
452
|
+
|
453
|
+
def test_attach_list_to_list_with_complete
|
454
|
+
content1 =<<-EOF
|
455
|
+
#Id ValueA ValueB
|
456
|
+
row1 a b
|
457
|
+
row2 A B
|
458
|
+
EOF
|
459
|
+
|
460
|
+
content2 =<<-EOF
|
461
|
+
#Id ValueC
|
462
|
+
row1 c
|
463
|
+
row2 C
|
464
|
+
row3 CC
|
465
|
+
EOF
|
466
|
+
|
467
|
+
tsv1 = tsv2 = index = nil
|
468
|
+
TmpFile.with_file(content1) do |filename|
|
469
|
+
tsv1 = TSV.open(File.open(filename), type: :list, fields: ["ValueA"], sep: /\s+/)
|
470
|
+
end
|
471
|
+
|
472
|
+
TmpFile.with_file(content2) do |filename|
|
473
|
+
tsv2 = TSV.open(File.open(filename), type: :list, sep: /\s+/)
|
474
|
+
end
|
475
|
+
|
476
|
+
res = tsv1.attach tsv2, :fields => ["ValueC"], complete: true
|
477
|
+
assert res["row2"].include?("C")
|
478
|
+
refute res["row2"].include?("b")
|
479
|
+
assert res["row3"].include?("CC")
|
480
|
+
end
|
452
481
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: scout-gear
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 10.
|
4
|
+
version: 10.7.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: 2024-05
|
11
|
+
date: 2024-06-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: scout-essentials
|
@@ -184,7 +184,6 @@ files:
|
|
184
184
|
- lib/scout/tsv/change_id/translate.rb
|
185
185
|
- lib/scout/tsv/csv.rb
|
186
186
|
- lib/scout/tsv/dumper.rb
|
187
|
-
- lib/scout/tsv/entity.rb
|
188
187
|
- lib/scout/tsv/index.rb
|
189
188
|
- lib/scout/tsv/open.rb
|
190
189
|
- lib/scout/tsv/parser.rb
|
@@ -296,7 +295,6 @@ files:
|
|
296
295
|
- test/scout/tsv/test_change_id.rb
|
297
296
|
- test/scout/tsv/test_csv.rb
|
298
297
|
- test/scout/tsv/test_dumper.rb
|
299
|
-
- test/scout/tsv/test_entity.rb
|
300
298
|
- test/scout/tsv/test_index.rb
|
301
299
|
- test/scout/tsv/test_open.rb
|
302
300
|
- test/scout/tsv/test_parser.rb
|
data/lib/scout/tsv/entity.rb
DELETED
File without changes
|