rbbt-util 5.26.85 → 5.26.86

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b150d8b85d7565e2ec820343f002c8bfc80e46302d5a35d83b10f132d2ebfc94
4
- data.tar.gz: 66359a6ec5533d41ab1bb2344bf6795844e0f4ca46332523647ba13319a7d6e8
3
+ metadata.gz: fc6102e3c95948e874ce0ef40256083bc5bbb61c27700dbab1e864a3ec14ebe3
4
+ data.tar.gz: 5267bbf2d76c3a1ec0920fa5ecb03acf711ae541198d220055afae0965fa9630
5
5
  SHA512:
6
- metadata.gz: 1cf80ad89a6007b291518458b7eb995b2a589ce34230a8fea9b03e83cf196df787f7c46376dfb80d0c8a4d3fdbb83cc906a8a1240ac26bbee25c8bebc67c606c
7
- data.tar.gz: 6a9fc1eee7bf113ccefa6aef14d704406fbe68a07a24f0c603102e2cfe3e9863ec4b88a01a3029885b2e98754ad85c215956e2a267b71d894659c041da62ae43
6
+ metadata.gz: 8b5fa3392feae0691db1b06276294be43f6f8e0c8dd2d553967cf4993277b2cee9284ccb10b4c1b27848c0fc6beb09c5e9b65f5b3235f97180eaad2d2279df05
7
+ data.tar.gz: 7cc7b7c0207712ff2541d9ced370131c431359f28de3f9aaee4d1ce840f59506c6e05776021f04fe47d8fe461362f7fbfa867cc2982afe760dc451178342ab08
data/bin/rbbt CHANGED
@@ -55,11 +55,13 @@ $ rbbt <command> <subcommand> ... -a --arg1 --arg2='value' --arg3 'another-value
55
55
  --update_tsv #{Log.color :yellow, "Update persisted TSV files also if source has been updated"}
56
56
  --locate_file #{Log.color :yellow, "Report the location of the script instead of executing it"}
57
57
  --dump_mem* #{Log.color :yellow, "Dump strings in memory each second into file"}
58
- -nolock--no_lock_id #{Log.color :yellow, "Do not track lockfiles with ids (prevent stale file handlers for high-througput and high-concurrency)"}
58
+ -nolock--no_lock_id #{Log.color :yellow, "Do not track lockfiles with ids (prevent stale file handlers for high-througput and high-concurrency)"}
59
59
  -ji--jobname_show_inputs #{Log.color :yellow, "Show inputs as part of the jobname in workflows instead of digesting them"}
60
60
  -ck--config_keys* #{Log.color :yellow, "Override some config keys"}
61
+ -srand--random_seed* #{Log.color :yellow, "Set the random seed"}
61
62
  EOF
62
63
 
64
+ srand(options[:random_seed].to_i) if options[:random_seed]
63
65
  if options[:jobname_show_inputs]
64
66
  ENV["RBBT_INPUT_JOBNAME"] = "true"
65
67
  end
data/lib/rbbt/hpc.rb CHANGED
@@ -15,6 +15,7 @@ module Marenostrum
15
15
  def self.template(args, options = {})
16
16
 
17
17
  development = options.delete :drbbt
18
+ singularity = options.delete :singularity
18
19
  contain = options.delete :contain
19
20
  sync = options.delete :sync
20
21
  contain_and_sync = options.delete :contain_and_sync
@@ -38,7 +39,7 @@ module Marenostrum
38
39
 
39
40
  contain = File.expand_path(contain) if contain
40
41
 
41
- singularity = true if contain || ! development
42
+ singularity = true if contain
42
43
 
43
44
 
44
45
  name = options[:name] ||= Misc.obj2digest({:options => options.collect{|k,v| [k,v]}.sort_by{|k,v| k.to_s }, :args => args})
@@ -228,7 +229,11 @@ EOF
228
229
 
229
230
  exec_cmd = singularity_exec + " " + exec_cmd
230
231
  else
231
- exec_cmd << %(~/git/rbbt-util/bin/rbbt --dev=~/git/)
232
+ if development
233
+ exec_cmd << " " << %(~/git/rbbt-util/bin/rbbt --dev=~/git/)
234
+ else
235
+ exec_cmd << " " << 'rbbt'
236
+ end
232
237
  end
233
238
 
234
239
 
data/lib/rbbt/util/log.rb CHANGED
@@ -34,6 +34,70 @@ module Log
34
34
  line.gsub('`', "'")
35
35
  end
36
36
 
37
+
38
+ def self.trap_std(msg = "STDOUT", msge = "STDERR", severity = 0, severity_err = nil)
39
+ sout, sin = Misc.pipe
40
+ soute, sine = Misc.pipe
41
+ backup_stderr = STDERR.dup
42
+ backup_stdout = STDOUT.dup
43
+ old_logfile = Log.logfile
44
+ Log.logfile(backup_stderr)
45
+
46
+ severity_err ||= severity
47
+ th_log = Thread.new do
48
+ while line = sout.gets
49
+ Log.logn "#{msg}: " + line, severity
50
+ end
51
+ end
52
+
53
+ th_loge = Thread.new do
54
+ while line = soute.gets
55
+ Log.logn "#{msge}: " + line, severity_err
56
+ end
57
+ end
58
+
59
+ begin
60
+ STDOUT.reopen(sin)
61
+ STDERR.reopen(sine)
62
+ yield
63
+ ensure
64
+ STDERR.reopen backup_stderr
65
+ STDOUT.reopen backup_stdout
66
+ sin.close
67
+ sine.close
68
+ th_log.join
69
+ th_loge.join
70
+ backup_stdout.close
71
+ backup_stderr.close
72
+ Log.logfile = old_logfile
73
+ end
74
+ end
75
+
76
+ def self.trap_stderr(msg = "STDERR", severity = 0)
77
+ sout, sin = Misc.pipe
78
+ backup_stderr = STDERR.dup
79
+ old_logfile = Log.logfile
80
+ Log.logfile(backup_stderr)
81
+
82
+ th_log = Thread.new do
83
+ while line = sout.gets
84
+ Log.logn "#{msg}: " + line, severity
85
+ end
86
+ end
87
+
88
+ begin
89
+ STDERR.reopen(sin)
90
+ yield
91
+ sin.close
92
+ ensure
93
+ STDERR.reopen backup_stderr
94
+ th_log.join
95
+ backup_stderr.close
96
+ Log.logfile = old_logfile
97
+ end
98
+ end
99
+
100
+
37
101
  def self._ignore_stderr
38
102
  backup_stderr = STDERR.dup
39
103
  File.open('/dev/null', 'w') do |f|
@@ -47,6 +111,7 @@ module Log
47
111
  end
48
112
  end
49
113
 
114
+
50
115
  def self.ignore_stderr(&block)
51
116
  LOG_MUTEX.synchronize do
52
117
  _ignore_stderr &block
@@ -174,9 +239,12 @@ module Log
174
239
  str = prefix << " " << message.to_s
175
240
 
176
241
  LOG_MUTEX.synchronize do
177
- STDERR.write str
242
+ if logfile.nil?
243
+ STDERR.write str
244
+ else
245
+ logfile.write str
246
+ end
178
247
  Log::LAST.replace "log"
179
- logfile.write str unless logfile.nil?
180
248
  nil
181
249
  end
182
250
  end
@@ -389,14 +457,3 @@ def eef(obj=nil, file = $stdout)
389
457
  Log.log_obj_fingerprint(obj, :error, file)
390
458
  end
391
459
 
392
- if __FILE__ == $0
393
- Log.severity = 0
394
-
395
- (0..6).each do |level|
396
- Log.log("Level #{level}", level)
397
- end
398
-
399
- require 'rbbt/util/misc'
400
- eee [1,2,3]
401
- eef [1,2,3]
402
- end
@@ -1,23 +1,45 @@
1
1
  require 'rbbt-util'
2
-
3
2
  require 'pycall/import'
4
3
 
5
4
  module RbbtPython
6
5
  extend PyCall::Import
7
6
  def self.run(mod = nil, imports = nil, &block)
8
- begin
9
- if mod
10
- if imports
11
- pyfrom mod, :import => imports
12
- else
13
- pyimport mod
14
- end
7
+ if mod
8
+ if imports
9
+ pyfrom mod, :import => imports
10
+ else
11
+ pyimport mod
15
12
  end
13
+ end
14
+
15
+ module_eval(&block)
16
+ end
17
+
18
+ def self.run_log(mod = nil, imports = nil, severity = 0, severity_err = nil, &block)
19
+ if mod
20
+ if imports
21
+ pyfrom mod, :import => imports
22
+ else
23
+ pyimport mod
24
+ end
25
+ end
16
26
 
27
+ Log.trap_std("Python STDOUT", "Python STDERR", severity, severity_err) do
17
28
  module_eval(&block)
29
+ end
30
+ end
31
+
32
+ def self.run_log_stderr(mod = nil, imports = nil, severity = 0, &block)
33
+ if mod
34
+ if imports
35
+ pyfrom mod, :import => imports
36
+ else
37
+ pyimport mod
38
+ end
39
+ end
18
40
 
19
- rescue
20
- Log.exception $!
41
+ Log.trap_stderr("Python STDERR", severity) do
42
+ module_eval(&block)
21
43
  end
22
44
  end
23
45
 
@@ -283,7 +283,7 @@ class Step
283
283
  now = Time.now
284
284
  str = Log.color :reset
285
285
  str << "#{ Log.color status_color, status}"
286
- str << ": #{ message }" if message
286
+ str << ": #{ message }" if message and message != :result
287
287
  str << " -- #{Log.color :blue, path.to_s}" if path
288
288
  str << " #{Log.color :yellow, Process.pid}"
289
289
  str
@@ -293,6 +293,7 @@ class Step
293
293
  Log.info do
294
294
  now = Time.now
295
295
  str = "#{ Log.color :cyan, status.to_s } +#{Log.color :green, "%.2f" % (eend - start)}"
296
+ str << ": #{ res }" if message == :result
296
297
  str << " -- #{Log.color :blue, path.to_s}" if path
297
298
  str << " #{Log.color :yellow, Process.pid}"
298
299
  str
@@ -2,7 +2,7 @@ require File.join(File.expand_path(File.dirname(__FILE__)), '../..', 'test_helpe
2
2
  require 'rbbt/util/log'
3
3
 
4
4
  class TestLog < Test::Unit::TestCase
5
- def test_get_level
5
+ def _test_get_level
6
6
  assert_equal 0, Log.get_level(:debug)
7
7
  assert_equal 1, Log.get_level(:low)
8
8
  assert_equal 1, Log.get_level("LOW")
@@ -10,14 +10,45 @@ class TestLog < Test::Unit::TestCase
10
10
  assert_equal 0, Log.get_level(nil)
11
11
  end
12
12
 
13
- def test_color
13
+ def _test_color
14
14
  assert Log.color(:green, "green")
15
15
  end
16
16
 
17
- def test_no_stderr
17
+ def _test_no_stderr
18
18
  Log.ignore_stderr do
19
19
  STDERR.puts "NOPRINT"
20
20
  end
21
21
  end
22
+
23
+ def _test_trap_stderr
24
+ Log.severity = 0
25
+ Log.trap_stderr do
26
+ STDERR.puts "NOPRINT"
27
+ STDERR.puts "NOPRINT"
28
+ STDERR.puts "NOPRINT"
29
+ STDOUT.puts "PRINT STDOUT"
30
+ STDOUT.puts "PRINT STDOUT"
31
+ end
32
+ Log.trap_stderr do
33
+ STDERR.puts "NOPRINT"
34
+ STDOUT.puts "PRINT STDOUT"
35
+ end
36
+ Log.trap_std do
37
+ STDERR.puts "NOPRINT"
38
+ STDOUT.puts "NOPRINT STDOUT"
39
+ end
40
+ end
41
+
42
+ def test_trap_std
43
+ Log.severity = 0
44
+ Log.trap_std do
45
+ STDERR.puts "NOPRINT STDERR"
46
+ STDOUT.puts "NOPRINT STDOUT"
47
+ end
48
+ Log.trap_std "OUT", "ERR", 4, 2 do
49
+ STDERR.puts "NOPRINT STDERR"
50
+ STDOUT.puts "NOPRINT STDOUT"
51
+ end
52
+ end
22
53
  end
23
54
 
@@ -40,5 +40,29 @@ def python_test(a, b):
40
40
  assert_equal 3, res
41
41
  end
42
42
  end
43
- end
43
+
44
+ def test_run_log
45
+ Log.severity = 0
46
+ TmpFile.with_file do |tmpdir|
47
+ code =<<-EOF
48
+ import sys
49
+ def python_print():
50
+ print("Test STDERR", file=sys.stderr)
51
+ print("Test STDOUT")
52
+ EOF
53
+ Open.write(File.join(tmpdir, 'file_print.py'), code)
54
+ RbbtPython.add_path tmpdir
55
+
56
+ RbbtPython.run_log 'file_print' do
57
+ file_print.python_print
58
+ end
59
+ RbbtPython.run_log_stderr 'file_print' do
60
+ file_print.python_print
61
+ end
62
+
63
+ RbbtPython.run_log 'file_print' do
64
+ file_print.python_print
65
+ end
66
+ end
67
+ end
44
68
 
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.26.85
4
+ version: 5.26.86
5
5
  platform: ruby
6
6
  authors:
7
7
  - Miguel Vazquez
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-11-08 00:00:00.000000000 Z
11
+ date: 2019-11-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake