rbbt-util 5.21.137 → 5.22.0
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/bin/rbbt +14 -0
- data/lib/rbbt-util.rb +2 -0
- data/lib/rbbt/persist.rb +2 -0
- data/lib/rbbt/util/config.rb +109 -0
- data/lib/rbbt/util/misc/system.rb +0 -1
- data/lib/rbbt/workflow/accessor.rb +17 -0
- data/lib/rbbt/workflow/step/run.rb +11 -2
- data/test/rbbt/util/test_config.rb +18 -0
- metadata +4 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8d7a4ccc9fa31a719cf11e4b0c5341f610a05fbe
|
4
|
+
data.tar.gz: 6f001470b29bab8072d156f18039a13823176f89
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 553306c45688f65865f87be18554a92d90a954d1f3402b6d657300c253d5ce6c21183fddd4fe60e99ef867da11338256165b3b30f1598ab4a15fe4f01d2e2be4
|
7
|
+
data.tar.gz: 8952ede274862e68aef03b6117560335fb7a552a146a1b36678ebe8bf606dcfc7483d1c060a3501361a6680d930b9c6628601e476e6b000fbd4f93024aad0157
|
data/bin/rbbt
CHANGED
@@ -27,6 +27,7 @@ end
|
|
27
27
|
|
28
28
|
require 'rbbt'
|
29
29
|
require 'rbbt/util/simpleopt'
|
30
|
+
require 'rbbt/util/config'
|
30
31
|
|
31
32
|
Log.nocolor = true if ARGV.include? "--nocolor"
|
32
33
|
|
@@ -49,6 +50,7 @@ $ rbbt <command> <subcommand> ... -a --arg1 --arg2='value' --arg3 'another-value
|
|
49
50
|
--dump_mem* #{Log.color :yellow, "Dump strings in memory each second into file"}
|
50
51
|
-nolock--no_lock_id #{Log.color :yellow, "Do not track lockfiles with ids (prevent stale file handlers for high-througput and high-concurrency)"}
|
51
52
|
-ji--jobname_as_inputs #{Log.color :yellow, "Use inputs as part of the jobname in workflows instead of digesting them"}
|
53
|
+
-ck--config_keys* #{Log.color :yellow, "Override some config keys"}
|
52
54
|
EOF
|
53
55
|
|
54
56
|
if options[:jobname_as_inputs]
|
@@ -89,6 +91,18 @@ if mem_dump = options.delete(:dump_mem)
|
|
89
91
|
Rbbt.dump_memory(mem_dump, String)
|
90
92
|
end
|
91
93
|
|
94
|
+
if options[:config_keys]
|
95
|
+
options[:config_keys].split(",").each do |config|
|
96
|
+
key, value, *tokens = config.split(/\s/)
|
97
|
+
tokens = ['key:' << key << '::0'] if tokens.empty?
|
98
|
+
tokens = tokens.collect do |tok|
|
99
|
+
tok, _sep, prio = tok.partition("::")
|
100
|
+
prio = "0" if prio.nil? or prio.empty?
|
101
|
+
[tok, prio] * "::"
|
102
|
+
end
|
103
|
+
Rbbt::Config.set({key => value}, *tokens)
|
104
|
+
end
|
105
|
+
end
|
92
106
|
|
93
107
|
if options.delete(:update_persist)
|
94
108
|
ENV["RBBT_UPDATE_TSV_PERSIST"] = "true"
|
data/lib/rbbt-util.rb
CHANGED
data/lib/rbbt/persist.rb
CHANGED
@@ -0,0 +1,109 @@
|
|
1
|
+
require 'rbbt-util'
|
2
|
+
require 'rbbt/resource/path'
|
3
|
+
|
4
|
+
module Rbbt::Config
|
5
|
+
|
6
|
+
CACHE = IndiferentHash.setup({})
|
7
|
+
|
8
|
+
def self.add_entry(key, value, tokens)
|
9
|
+
CACHE[key.to_s] ||= []
|
10
|
+
CACHE[key.to_s] << [tokens, value]
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.load_file(file)
|
14
|
+
Log.debug "Loading file: #{ file }"
|
15
|
+
TSV.traverse file, :type => :array do |line|
|
16
|
+
next if line =~ /^#/
|
17
|
+
key, value, *tokens = line.split(/\s/)
|
18
|
+
|
19
|
+
self.add_entry(key, value, tokens) if key
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.load_config
|
24
|
+
Rbbt.etc.config.find_all.each do |file|
|
25
|
+
self.load_file(file)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
|
30
|
+
def self.set(values, *tokens)
|
31
|
+
values.each do |key,value|
|
32
|
+
add_entry key, value, tokens
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.token_priority(token)
|
37
|
+
token, _sep, priority = token.to_s.partition("::")
|
38
|
+
|
39
|
+
if priority.nil? || priority.empty?
|
40
|
+
type, _sep, rest = token.partition(":")
|
41
|
+
priority = case type
|
42
|
+
when "workflow"
|
43
|
+
4
|
44
|
+
when "task"
|
45
|
+
3
|
46
|
+
when "file"
|
47
|
+
2
|
48
|
+
when "line"
|
49
|
+
1
|
50
|
+
when "key"
|
51
|
+
20
|
52
|
+
else
|
53
|
+
10
|
54
|
+
end
|
55
|
+
else
|
56
|
+
priority = priority.to_i
|
57
|
+
end
|
58
|
+
|
59
|
+
[token, priority]
|
60
|
+
end
|
61
|
+
|
62
|
+
def self.match(entries, token)
|
63
|
+
priorities = {}
|
64
|
+
entries.each do |tokens, value|
|
65
|
+
best_prio = nil
|
66
|
+
tokens.each do |tok|
|
67
|
+
tok, prio = token_priority tok
|
68
|
+
best_prio = prio if best_prio.nil? or best_prio > prio
|
69
|
+
next if prio > best_prio
|
70
|
+
next unless tok == token
|
71
|
+
priorities[prio] ||= []
|
72
|
+
priorities[prio] << value
|
73
|
+
end
|
74
|
+
end
|
75
|
+
priorities
|
76
|
+
end
|
77
|
+
|
78
|
+
def self.get(key, *tokens)
|
79
|
+
tokens = tokens.flatten
|
80
|
+
file, _sep, line = caller.reject{|l|
|
81
|
+
l =~ /rbbt\/(?:resource\.rb|workflow\.rb)/ or
|
82
|
+
l =~ /rbbt\/resource\/path\.rb/ or
|
83
|
+
l =~ /rbbt\/util\/misc\.rb/ or
|
84
|
+
l =~ /progress-monitor\.rb/
|
85
|
+
}.first.partition(":")
|
86
|
+
|
87
|
+
File.expand_path(file)
|
88
|
+
|
89
|
+
tokens << ("file:" << file)
|
90
|
+
tokens << ("line:" << file << ":" << line)
|
91
|
+
|
92
|
+
entries = CACHE[key.to_s]
|
93
|
+
priorities = {}
|
94
|
+
tokens = tokens + ["key:" << key.to_s]
|
95
|
+
tokens.each do |token|
|
96
|
+
token_prio = match entries, token.to_s
|
97
|
+
token_prio.each do |prio, values|
|
98
|
+
priorities[prio] ||= []
|
99
|
+
priorities[prio].concat(values)
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
return nil if priorities.empty?
|
104
|
+
|
105
|
+
priorities.sort_by{|p,v| p}.first.last.first
|
106
|
+
end
|
107
|
+
|
108
|
+
self.load_config
|
109
|
+
end
|
@@ -532,6 +532,23 @@ class Step
|
|
532
532
|
end
|
533
533
|
provenance
|
534
534
|
end
|
535
|
+
|
536
|
+
def config(key, *tokens)
|
537
|
+
options = tokens.pop if Hash === tokens.last
|
538
|
+
default = options[:default] if options
|
539
|
+
|
540
|
+
new_tokens = []
|
541
|
+
if workflow
|
542
|
+
workflow_name = workflow.to_s
|
543
|
+
new_tokens << ("workflow:" << workflow_name)
|
544
|
+
new_tokens << ("task:" << workflow_name << "#" << task_name.to_s)
|
545
|
+
end
|
546
|
+
new_tokens << ("task:" << task_name.to_s)
|
547
|
+
|
548
|
+
value = Rbbt::Config.get(key, tokens + new_tokens)
|
549
|
+
|
550
|
+
value || default
|
551
|
+
end
|
535
552
|
end
|
536
553
|
|
537
554
|
module Workflow
|
@@ -21,6 +21,7 @@ class Step
|
|
21
21
|
def resolve_input_steps
|
22
22
|
step = false
|
23
23
|
pos = 0
|
24
|
+
input_options = workflow.task_info(task_name)[:input_options]
|
24
25
|
new_inputs = inputs.collect do |i|
|
25
26
|
begin
|
26
27
|
if Step === i
|
@@ -38,7 +39,11 @@ class Step
|
|
38
39
|
if (task.input_options[task.inputs[pos]] || {})[:stream]
|
39
40
|
TSV.get_stream i
|
40
41
|
else
|
41
|
-
|
42
|
+
if (task.input_options[task.inputs[pos]] || {})[:nofile]
|
43
|
+
i.path
|
44
|
+
else
|
45
|
+
i.load
|
46
|
+
end
|
42
47
|
end
|
43
48
|
elsif i.streaming? and (task.input_options[task.inputs[pos]] || {})[:stream]
|
44
49
|
TSV.get_stream i
|
@@ -47,7 +52,11 @@ class Step
|
|
47
52
|
if (task.input_options[task.inputs[pos]] || {})[:stream]
|
48
53
|
TSV.get_stream i
|
49
54
|
else
|
50
|
-
|
55
|
+
if (task.input_options[task.inputs[pos]] || {})[:nofile]
|
56
|
+
i.path
|
57
|
+
else
|
58
|
+
i.load
|
59
|
+
end
|
51
60
|
end
|
52
61
|
end
|
53
62
|
else
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require File.join(File.expand_path(File.dirname(__FILE__)), '../..', 'test_helper.rb')
|
2
|
+
require 'rbbt/util/config'
|
3
|
+
|
4
|
+
class TestConfig < Test::Unit::TestCase
|
5
|
+
def setup
|
6
|
+
Rbbt::Config.set({:cpus => 30}, :test_config, :test)
|
7
|
+
Rbbt::Config.set({:cpus => 5}, "slow::2", :test)
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_simple
|
11
|
+
assert_equal 30, Rbbt::Config.get(:cpus, :test_config)
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_prio
|
15
|
+
assert_equal 5, Rbbt::Config.get(:cpus, :slow, :test)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rbbt-util
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.
|
4
|
+
version: 5.22.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Miguel Vazquez
|
@@ -274,6 +274,7 @@ files:
|
|
274
274
|
- lib/rbbt/util/concurrency/processes/socket_old.rb
|
275
275
|
- lib/rbbt/util/concurrency/processes/worker.rb
|
276
276
|
- lib/rbbt/util/concurrency/threads.rb
|
277
|
+
- lib/rbbt/util/config.rb
|
277
278
|
- lib/rbbt/util/docker.rb
|
278
279
|
- lib/rbbt/util/excel2tsv.rb
|
279
280
|
- lib/rbbt/util/filecache.rb
|
@@ -474,6 +475,7 @@ files:
|
|
474
475
|
- test/rbbt/util/test_cmd.rb
|
475
476
|
- test/rbbt/util/test_colorize.rb
|
476
477
|
- test/rbbt/util/test_concurrency.rb
|
478
|
+
- test/rbbt/util/test_config.rb
|
477
479
|
- test/rbbt/util/test_excel2tsv.rb
|
478
480
|
- test/rbbt/util/test_filecache.rb
|
479
481
|
- test/rbbt/util/test_log.rb
|
@@ -530,6 +532,7 @@ test_files:
|
|
530
532
|
- test/rbbt/util/R/test_plot.rb
|
531
533
|
- test/rbbt/util/R/test_eval.rb
|
532
534
|
- test/rbbt/util/R/test_model.rb
|
535
|
+
- test/rbbt/util/test_config.rb
|
533
536
|
- test/rbbt/util/test_log.rb
|
534
537
|
- test/rbbt/util/test_simpleDSL.rb
|
535
538
|
- test/rbbt/util/log/test_progress.rb
|