rbbt-util 5.34.25 → 5.34.27

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f1a0dc0772864a83c7c6b159d53dc1c5d95e7f58619c4e4b0c630e8240a621aa
4
- data.tar.gz: c8a029debfd1ee7c820185aa1dead29575ecd173a1868692751c6a01dc7be01a
3
+ metadata.gz: 40a3d86f01180255239e05fc23309b2c798eb94ee4c213ab8699f7954c1f5346
4
+ data.tar.gz: 3357e23002f032213a6b4c01ef046527092c8e4bf9ebce96dfc714176c3cb239
5
5
  SHA512:
6
- metadata.gz: b151561ce56b42af19160eff58a8f45be7fedd6226d960987111e8b9d1147802eb612f96b85a47ad849476b7d4520df457ed70e91e9528d67e9e03a6959f78c4
7
- data.tar.gz: 60b1a486a88bd2c65a4c003130c7c81de42ce72446420797132d1047be2446fce74f7cb35c80a652a1f56dcc630ba6e32d7c991a524efeab85a05325aaae1024
6
+ metadata.gz: 8454ec0e14dac9fbdb5fa00a2219248b5037c890289fb5b013d69d6dac63e869b5160620d1ac744392546bf58dc8acfb1afba5c9172f366ddae01fc6cc008810
7
+ data.tar.gz: c85e5b6defde582d6af2c08281dd659bd8f71ae9867d4258d2c96c9824b3d0fe7020472fc6ccec3e66f4f70228bdc3dea425756abd510ded61a7f59420b78b98
@@ -560,6 +560,16 @@ env > #{batch_options[:fenv]}
560
560
  def run_job(job, options = {})
561
561
  system = self.to_s.split("::").last
562
562
 
563
+ if (batch_job = job.info[:batch_job]) && job_queued(batch_job)
564
+ Log.info "Job #{job.short_path} already queued in #{batch_job}"
565
+ return batch_job
566
+ end
567
+
568
+ if job.running?
569
+ Log.info "Job #{job.short_path} already running in #{job.info[:pid]}"
570
+ return job.info[:batch_job]
571
+ end
572
+
563
573
  batch_base_dir, clean_batch_job, remove_batch_dir, procpath, tail, batch_dependencies, dry_run = Misc.process_options options,
564
574
  :batch_base_dir, :clean_batch_job, :remove_batch_dir, :batch_procpath, :tail, :batch_dependencies, :dry_run,
565
575
  :batch_base_dir => File.expand_path(File.join('~/rbbt-batch'))
@@ -583,6 +593,8 @@ env > #{batch_options[:fenv]}
583
593
 
584
594
  batch_job = run_template(batch_dir, dry_run)
585
595
 
596
+ hold_dependencies(job, batch_job) unless dry_run
597
+
586
598
  return [batch_job, batch_dir] unless tail
587
599
 
588
600
  t_monitor = Thread.new do
@@ -603,6 +615,17 @@ env > #{batch_options[:fenv]}
603
615
  end
604
616
  end
605
617
 
618
+ def hold_dependencies(job, batch_job)
619
+ job.set_info :batch_job, batch_job
620
+ job.set_info :batch_system, self.batch_system
621
+ job.dependencies.each do |dep|
622
+ next unless dep.waiting?
623
+ next if (dep_batch_job = dep.info[:batch_job]) && job_queued(dep_batch_job)
624
+
625
+ hold_dependencies(dep, batch_job)
626
+ end
627
+ end
628
+
606
629
  def follow_job(batch_dir, tail = true)
607
630
  fjob = File.join(batch_dir, 'job.id')
608
631
  fout = File.join(batch_dir, 'std.out')
@@ -672,7 +695,7 @@ env > #{batch_options[:fenv]}
672
695
  terr = Misc.consume_stream(err, true, STDERR) if err
673
696
  tout = Misc.consume_stream(out, true, STDOUT) if out
674
697
 
675
- sleep 3 while job_status(job).include? job.to_s
698
+ sleep 3 while job_queued(job)
676
699
  rescue Aborted
677
700
  ensure
678
701
  begin
@@ -692,6 +715,10 @@ env > #{batch_options[:fenv]}
692
715
  end
693
716
  end
694
717
 
718
+ def job_queued(job)
719
+ job_status(job).split(/\s+/).include?(job.to_s)
720
+ end
721
+
695
722
  def wait_for_job(batch_dir, time = 1)
696
723
  fexit = File.join(batch_dir, 'exit.status')
697
724
  fjob = File.join(batch_dir, 'job.id')
data/lib/rbbt/hpc/lsf.rb CHANGED
@@ -5,6 +5,10 @@ module HPC
5
5
  extend HPC::TemplateGeneration
6
6
  extend HPC::Orchestration
7
7
 
8
+ def self.batch_system
9
+ "LSF"
10
+ end
11
+
8
12
  def self.batch_system_variables
9
13
  <<-EOF
10
14
  let TOTAL_PROCESORS="$(cat /proc/cpuinfo|grep ^processor |wc -l)"
@@ -13,7 +17,7 @@ let MAX_MEMORY_DEFAULT="$(grep MemTotal /proc/meminfo|grep -o "[[:digit:]]*") /
13
17
  export MAX_MEMORY_DEFAULT
14
18
  export MAX_MEMORY
15
19
  export BATCH_JOB_ID=$LSF_JOBID
16
- export BATCH_SYSTEM=LSF
20
+ export BATCH_SYSTEM=#{batch_system}
17
21
  EOF
18
22
  end
19
23
 
@@ -206,7 +206,7 @@ module HPC
206
206
  options.delete "detach"
207
207
  options.delete "jobname"
208
208
 
209
- rules = YAML.load(Open.read(options[:orchestration_rules])) if options[:orchestration_rules]
209
+ rules = Misc.load_yaml(options[:orchestration_rules]) if options[:orchestration_rules]
210
210
  rules ||= {}
211
211
  IndiferentHash.setup(rules)
212
212
 
@@ -37,9 +37,9 @@ module HPC
37
37
  prepare_for_execution(job)
38
38
 
39
39
  if options[:orchestration_rules]
40
- rules = YAML.load(Open.read(options[:orchestration_rules]))
40
+ rules = Misc.load_yaml(options[:orchestration_rules])
41
41
  elsif Rbbt.etc.slurm["default.yaml"].exists?
42
- rules = YAML.load(Open.read(Rbbt.etc.slurm["default.yaml"]))
42
+ rules = Misc.load_yaml(Rbbt.etc.slurm["default.yaml"])
43
43
  else
44
44
  rules = {}
45
45
  end
@@ -6,6 +6,10 @@ module HPC
6
6
  extend HPC::TemplateGeneration
7
7
  extend HPC::Orchestration
8
8
 
9
+ def self.batch_system
10
+ "SLURM"
11
+ end
12
+
9
13
  def self.batch_system_variables
10
14
  <<-EOF
11
15
  let TOTAL_PROCESORS="$(cat /proc/cpuinfo|grep ^processor |wc -l)"
@@ -16,7 +20,7 @@ MAX_MEMORY="$MAX_MEMORY_DEFAULT"
16
20
  export MAX_MEMORY_DEFAULT
17
21
  export MAX_MEMORY
18
22
  export BATCH_JOB_ID=$SLURM_JOB_ID
19
- export BATCH_SYSTEM=SLURM
23
+ export BATCH_SYSTEM=#{batch_system}
20
24
  EOF
21
25
  end
22
26
 
@@ -145,7 +149,11 @@ export BATCH_SYSTEM=SLURM
145
149
  if job.nil?
146
150
  CMD.cmd("squeue").read
147
151
  else
148
- CMD.cmd("squeue --job #{job}").read
152
+ begin
153
+ CMD.cmd("squeue --job #{job}").read
154
+ rescue
155
+ ""
156
+ end
149
157
  end
150
158
  end
151
159
 
data/lib/rbbt/monitor.rb CHANGED
@@ -64,14 +64,14 @@ module Rbbt
64
64
  lock_info[f].merge!(file_time(f))
65
65
  if File.size(f) > 0
66
66
  info = Open.open(f) do |s|
67
- YAML.load(s)
67
+ Misc.load_yaml(s)
68
68
  end
69
69
  IndiferentHash.setup(info)
70
70
  lock_info[f][:pid] = info[:pid]
71
71
  lock_info[f][:ppid] = info[:ppid]
72
72
  end
73
73
  rescue Exception
74
- #Log.exception $!
74
+ Log.exception $!
75
75
  end
76
76
  end
77
77
  lock_info
@@ -272,7 +272,7 @@ module Rbbt
272
272
  def self.load_lock(lock)
273
273
  begin
274
274
  info = Misc.insist 3 do
275
- YAML.load(Open.read(lock))
275
+ Misc.load_yaml(lock)
276
276
  end
277
277
  info.values_at "pid", "ppid", "time"
278
278
  rescue Exception
data/lib/rbbt/persist.rb CHANGED
@@ -148,9 +148,7 @@ module Persist
148
148
  JSON.parse(stream.read)
149
149
  end
150
150
  when :yaml
151
- Open.open(path) do |stream|
152
- YAML.load(stream)
153
- end
151
+ Misc.load_yaml(path)
154
152
  when :float
155
153
  Open.read(path).to_f
156
154
  when :integer
@@ -150,7 +150,7 @@ module Path
150
150
  search_path_file = File.join(ENV['HOME'], '.rbbt/etc/search_paths')
151
151
  if File.exist?(search_path_file)
152
152
  begin
153
- YAML.load(File.open(search_path_file)).each do |where, location|
153
+ Misc.load_yaml(search_path_file).each do |where, location|
154
154
  SEARCH_PATHS[where.to_sym] = location
155
155
  end
156
156
  rescue
@@ -0,0 +1,26 @@
1
+ module Misc
2
+ def self.load_yaml(yaml)
3
+ case yaml
4
+ when IO, StringIO
5
+ if YAML.respond_to?(:unsafe_load)
6
+ YAML.unsafe_load(yaml)
7
+ else
8
+ YAML.load(yaml)
9
+ end
10
+ when (defined?(Path) && Path)
11
+ yaml.open do |io|
12
+ load_yaml(io)
13
+ end
14
+ when String
15
+ if Misc.is_filename?(yaml)
16
+ File.open(yaml) do |io|
17
+ load_yaml(io)
18
+ end
19
+ else
20
+ load_yaml(StringIO.new(yaml))
21
+ end
22
+ else
23
+ raise "Unkown YAML object: #{Misc.fingerprint yaml}"
24
+ end
25
+ end
26
+ end
@@ -22,6 +22,8 @@ require 'rbbt/util/misc/objects'
22
22
  require 'rbbt/util/misc/manipulation'
23
23
  require 'rbbt/util/misc/communication'
24
24
 
25
+ require 'rbbt/util/misc/serialize'
26
+
25
27
  require 'to_regexp'
26
28
 
27
29
  module MultipleResult; end
@@ -72,12 +72,7 @@ module Workflow
72
72
  def setup_override_dependency(dep, workflow, task_name)
73
73
  return [] if dep == :skip || dep == 'skip'
74
74
 
75
- if not Step === dep
76
- located = Open.exists?(dep) || Open.exists?(dep + '.info')
77
- dep = Workflow.load_step(dep)
78
- else
79
- located = true
80
- end
75
+ dep = Workflow.load_step(dep) if not Step === dep
81
76
 
82
77
  dep.original_workflow ||= dep.workflow if dep.workflow
83
78
  dep.original_task_name ||= dep.task_name if dep.task_name
@@ -88,7 +83,6 @@ module Workflow
88
83
  dep.workflow = workflow
89
84
  dep.info[:name] = dep.name
90
85
 
91
-
92
86
  begin
93
87
  workflow = Kernel.const_get workflow if String === workflow
94
88
  dep.task = workflow.tasks[task_name] if dep.task.nil? && workflow.tasks.include?(task_name)
@@ -97,13 +91,17 @@ module Workflow
97
91
  end
98
92
 
99
93
  dep.task_name = task_name
100
- dep.overriden = dep.original_task_name.to_sym if dep.original_task_name && located
94
+ dep.overriden = dep.original_task_name.to_sym if dep.original_task_name
101
95
 
102
96
  dep.extend step_module
103
97
 
104
98
  dep
105
99
  end
106
100
 
101
+ def unlocated_override?(dep)
102
+ String === dep && ! (Open.exists?(dep) || Open.exists?(dep + '.info'))
103
+ end
104
+
107
105
  def assign_dep_inputs(_inputs, options, all_d, task_info)
108
106
  IndiferentHash.setup(_inputs)
109
107
 
@@ -155,6 +153,7 @@ module Workflow
155
153
 
156
154
  override_dependencies = override_dependencies(inputs)
157
155
 
156
+ overriden = false
158
157
  dependencies.each do |dependency|
159
158
  _inputs = IndiferentHash.setup(inputs.dup)
160
159
  jobname = orig_jobname
@@ -165,6 +164,7 @@ module Workflow
165
164
  workflow, dep_task, options = dependency
166
165
 
167
166
  if override_dependencies[workflow.to_s] && value = override_dependencies[workflow.to_s][dep_task]
167
+ overriden = true if (options.nil? || ! options[:not_overriden]) && ! unlocated_override?(value)
168
168
  setup_override_dependency(value, workflow, dep_task)
169
169
  else
170
170
 
@@ -177,15 +177,23 @@ module Workflow
177
177
 
178
178
  job = workflow._job(dep_task, jobname, _inputs)
179
179
  ComputeDependency.setup(job, compute) if compute
180
+
181
+ overriden = true if TrueClass === job.overriden && (options.nil? || ! options[:not_overriden])
182
+
180
183
  job
181
184
  end
182
185
  when Step
183
- dependency
186
+ job = dependency
187
+ overriden = true if TrueClass === job.overriden && (options.nil? || ! options[:not_overriden])
188
+ job
184
189
  when Symbol
185
190
  if override_dependencies[self.to_s] && value = override_dependencies[self.to_s][dependency]
191
+ overriden = true if (options.nil? || ! options[:not_overriden]) && ! unlocated_override?(value)
186
192
  setup_override_dependency(value, self, dependency)
187
193
  else
188
- _job(dependency, jobname, _inputs)
194
+ job = _job(dependency, jobname, _inputs)
195
+ overriden = true if TrueClass === job.overriden && (options.nil? || ! options[:not_overriden])
196
+ job
189
197
  end
190
198
  when Proc
191
199
  if DependencyBlock === dependency
@@ -193,6 +201,7 @@ module Workflow
193
201
  wf, task_name, options = orig_dep
194
202
 
195
203
  if override_dependencies[wf.to_s] && value = override_dependencies[wf.to_s][task_name]
204
+ overriden = true if (options.nil? || ! options[:not_overriden]) && ! unlocated_override?(value)
196
205
  dep = setup_override_dependency(value, wf, task_name)
197
206
  else
198
207
 
@@ -208,16 +217,20 @@ module Workflow
208
217
  dep.each{|d|
209
218
  next if d.nil?
210
219
  if Hash === d
220
+ d = d.merge(options)
211
221
  d[:workflow] ||= wf
212
222
  d[:task] ||= task_name
213
223
  _override_dependencies = override_dependencies.merge(override_dependencies(d[:inputs] || {}))
214
224
  d = if _override_dependencies[d[:workflow].to_s] && value = _override_dependencies[d[:workflow].to_s][d[:task]]
225
+ overriden = true if (options.nil? || ! options[:not_overriden]) && ! unlocated_override?(value)
215
226
  setup_override_dependency(value, d[:workflow], d[:task])
216
227
  else
217
228
  task_info = d[:workflow].task_info(d[:task])
218
229
 
219
230
  _inputs = assign_dep_inputs({}, options.merge(d[:inputs] || {}), real_dependencies, task_info)
220
- d[:workflow]._job(d[:task], d[:jobname], _inputs)
231
+ job = d[:workflow]._job(d[:task], d[:jobname], _inputs)
232
+ overriden = true if TrueClass === job.overriden && (d.nil? || ! d[:not_overriden])
233
+ job
221
234
  end
222
235
  end
223
236
  ComputeDependency.setup(d, compute) if compute
@@ -232,11 +245,15 @@ module Workflow
232
245
  dep[:workflow] ||= wf || self
233
246
  _override_dependencies = override_dependencies.merge(override_dependencies(dep[:inputs] || {}))
234
247
  if _override_dependencies[dep[:workflow].to_s] && value = _override_dependencies[dep[:workflow].to_s][dep[:task]]
248
+ overriden = true if (options.nil? || ! options[:not_overriden]) && ! unlocated_override?(value)
235
249
  setup_override_dependency(value, dep[:workflow], dep[:task])
236
250
  else
237
251
  task_info = (dep[:task] && dep[:workflow]) ? dep[:workflow].task_info(dep[:task]) : nil
238
252
  _inputs = assign_dep_inputs({}, dep[:inputs], real_dependencies, task_info)
239
- dep = dep[:workflow]._job(dep[:task], dep[:jobname], _inputs)
253
+ job = dep[:workflow]._job(dep[:task], dep[:jobname], _inputs)
254
+ job = d[:workflow]._job(d[:task], d[:jobname], _inputs)
255
+ overriden = true if TrueClass === job.overriden && (d.nil? || ! d[:not_overriden])
256
+ job
240
257
  end
241
258
  end
242
259
  end
@@ -248,6 +265,6 @@ module Workflow
248
265
 
249
266
  real_dependencies << real_dep
250
267
  end
251
- real_dependencies.flatten.compact
268
+ [real_dependencies.flatten.compact, overriden]
252
269
  end
253
270
  end
@@ -143,8 +143,12 @@ class Step
143
143
 
144
144
  def init_info(force = false)
145
145
  return nil if @exec || info_file.nil? || (Open.exists?(info_file) && ! force)
146
+ batch_job = info[:batch_job] if Open.exists?(info_file)
147
+ batch_system = info[:batch_system] if Open.exists?(info_file)
146
148
  Open.lock(info_file, :lock => info_lock) do
147
149
  i = {:status => :waiting, :pid => Process.pid, :path => path, :real_inputs => real_inputs, :overriden => overriden}
150
+ i[:batch_job] = batch_job if batch_job
151
+ i[:batch_system] = batch_system if batch_system
148
152
  i[:dependencies] = dependencies.collect{|dep| [dep.task_name, dep.name, dep.path]} if dependencies
149
153
  Misc.sensiblewrite(info_file, Step.serialize_info(i), :force => true, :lock => false)
150
154
  @info_cache = IndiferentHash.setup(i)
@@ -253,7 +257,7 @@ class Step
253
257
  #Open.read(file(name)).split /\n|,\s*/
254
258
  Open.read(file(name)).split "\n"
255
259
  when :yaml
256
- YAML.load(Open.open(file(name)))
260
+ Misc.load_yaml(file(name))
257
261
  when :marshal
258
262
  Marshal.load(Open.open(file(name)))
259
263
  else
@@ -526,6 +526,7 @@ class Step
526
526
  end
527
527
 
528
528
  def overriden?
529
+ return @overriden
529
530
  return true if @overriden
530
531
  return true if dependencies && dependencies.select{|dep| TrueClass === dep.overriden }.any?
531
532
  info[:archived_info].each do |f,i|
@@ -698,7 +698,7 @@ class Step
698
698
  end
699
699
 
700
700
  def grace
701
- until done? || result || error? || aborted? || streaming? || waiting?
701
+ until done? || result || error? || aborted? || streaming? || waiting? || running?
702
702
  sleep 1
703
703
  end
704
704
  self
@@ -82,7 +82,7 @@ module Workflow
82
82
  when :file, :binary
83
83
  Log.debug "Pointing #{ input } to #{file}"
84
84
  if file =~ /\.yaml/
85
- inputs[input.to_sym] = YAML.load(Open.read(file))
85
+ inputs[input.to_sym] = Misc.load_yaml(file)
86
86
  else
87
87
  if File.symlink?(file)
88
88
  link_target = File.expand_path(File.readlink(file), File.dirname(file))
@@ -15,7 +15,7 @@ class Step
15
15
  raise "DO NOT CLEAN"
16
16
  end
17
17
 
18
- if (Open.exists?(path) or Open.broken_link?(path)) or Open.exists?(pid_file) or Open.exists?(info_file) or Open.exists?(files_dir) or Open.broken_link?(files_dir)
18
+ if (Open.exists?(path) or Open.broken_link?(path)) or Open.exists?(pid_file) or Open.exists?(info_file) or Open.exists?(files_dir) or Open.broken_link?(files_dir) or Open.exists?(pid_file)
19
19
 
20
20
  @result = nil
21
21
  @pid = nil
data/lib/rbbt/workflow.rb CHANGED
@@ -285,6 +285,7 @@ module Workflow
285
285
 
286
286
  workdir[taskname][tagged_jobname].find
287
287
  end
288
+
288
289
  def import_task(workflow, orig, new)
289
290
  orig_task = workflow.tasks[orig]
290
291
  new_task = orig_task.dup
@@ -442,10 +443,8 @@ module Workflow
442
443
  end
443
444
 
444
445
  real_inputs = {}
445
- has_overriden_inputs = false
446
446
 
447
447
  inputs.each do |k,v|
448
- #has_overriden_inputs = true if String === k and k.include? "#"
449
448
  next unless (task_inputs.include?(k.to_sym) or task_inputs.include?(k.to_s))
450
449
  default = all_defaults[k]
451
450
  next if default == v
@@ -461,12 +460,10 @@ module Workflow
461
460
 
462
461
  jobname = DEFAULT_NAME if jobname.nil? or jobname.empty?
463
462
 
464
- dependencies = real_dependencies(task, jobname, defaults.merge(inputs), task_dependencies[taskname] || [])
465
-
466
- overriden_deps = dependencies.select{|d| d.overriden }
467
- true_overriden_deps = overriden_deps.select{|d| TrueClass === d.overriden }
463
+ dependencies, overriden = real_dependencies(task, jobname, defaults.merge(inputs), task_dependencies[taskname] || [])
468
464
 
469
- overriden = has_overriden_inputs || overriden_deps.any?
465
+ #overriden_deps = dependencies.select{|d| Symbol === d.overriden }
466
+ #overriden_target_deps = overriden_deps.select{|d| TrueClass === d.overriden }
470
467
 
471
468
  extension = task.extension
472
469
 
@@ -492,19 +489,20 @@ module Workflow
492
489
  step_path = step_path taskname, jobname, input_values, dependencies, extension
493
490
  end
494
491
 
495
-
496
492
  job = get_job_step step_path, task, input_values, dependencies
497
493
  job.workflow = self
494
+ job.overriden ||= overriden
498
495
  job.clean_name = jobname
499
496
 
500
- case not_overriden
501
- when TrueClass
502
- job.overriden = has_overriden_inputs || true_overriden_deps.any?
503
- when :not_overriden_dep
504
- job.overriden = true if has_overriden_inputs || true_overriden_deps.any?
505
- else
506
- job.overriden = true if has_overriden_inputs || true_overriden_deps.any?
507
- end
497
+ #iif [job, not_overriden]
498
+ #case not_overriden
499
+ #when TrueClass
500
+ # job.overriden = false
501
+ #when :not_overriden_dep
502
+ # job.overriden = true if overriden_target_deps.any?
503
+ #else
504
+ # job.overriden = true if overriden_deps.any?
505
+ #end
508
506
 
509
507
  job.real_inputs = real_inputs.keys
510
508
  job
@@ -836,8 +834,7 @@ module Workflow
836
834
  end
837
835
 
838
836
  def self.load_remote_tasks(filename)
839
- yaml_text = Open.read(filename)
840
- remote_workflow_tasks = YAML.load(yaml_text)
837
+ remote_workflow_tasks = Misc.load_yaml(filename)
841
838
  Workflow.process_remote_tasks(remote_workflow_tasks)
842
839
  end
843
840
 
@@ -861,8 +858,7 @@ module Workflow
861
858
  end
862
859
 
863
860
  def self.load_relay_tasks(filename)
864
- yaml_text = Open.read(filename)
865
- relay_workflow_tasks = YAML.load(yaml_text)
861
+ remote_workflow_tasks = Misc.load_yaml(filename)
866
862
  Workflow.process_relay_tasks(relay_workflow_tasks)
867
863
  end
868
864
  end
@@ -46,7 +46,7 @@ if locks.any?
46
46
  puts
47
47
  puts Log.color(:magenta, "Locks:")
48
48
  locks.each do |file,info|
49
- if force or (info[:pid] and not Misc.pid_exists? info[:pid])
49
+ if force or (info[:pid] && ! Misc.pid_exists?(info[:pid]))
50
50
  puts " Removing #{ file }"
51
51
  File.unlink file
52
52
  end
@@ -166,6 +166,33 @@ for this dependency
166
166
  dep = dependencies.flatten.first
167
167
  end
168
168
 
169
+ task :overr_orig => :string do
170
+ "over"
171
+ end
172
+
173
+ task :overr_alt => :string do
174
+ "alt"
175
+ end
176
+
177
+ dep :overr_orig
178
+ task :overr_target => :string do
179
+ step(:overr_orig).load.reverse
180
+ end
181
+
182
+ dep :overr_alt, :not_overriden => true
183
+ dep :overr_target, "TestWF#overr_orig" => :overr_alt, :not_overriden => true
184
+ task :overr_action => :string do
185
+ step(:overr_target).load.upcase
186
+ end
187
+
188
+
189
+ dep :overr_alt, :not_overriden => true
190
+ dep :overr_target, "TestWF#overr_orig" => :overr_alt
191
+ task :overr_action2 => :string do
192
+ step(:overr_target).load.upcase
193
+ end
194
+
195
+
169
196
  end
170
197
 
171
198
  TestWF.workdir = Rbbt.tmp.test.jobs.TestWF
@@ -419,7 +446,7 @@ class TestWorkflow < Test::Unit::TestCase
419
446
  TmpFile.with_file do |dir|
420
447
  Path.setup(dir)
421
448
  Step.save_job_inputs(job, dir)
422
- assert_equal Dir.glob(dir + "/*"), [dir.file.find]
449
+ assert_equal Dir.glob(dir + "/*"), [dir.file.find + '.as_path']
423
450
  end
424
451
  end
425
452
 
@@ -427,7 +454,7 @@ class TestWorkflow < Test::Unit::TestCase
427
454
  TmpFile.with_file do |dir|
428
455
  Path.setup(dir)
429
456
  Step.save_job_inputs(job, dir)
430
- assert_equal Dir.glob(dir + "/*"), [dir.file.find + '.yaml']
457
+ assert_equal Dir.glob(dir + "/*"), [dir.file.find + '.as_path']
431
458
  inputs = Workflow.load_inputs(dir, [:file], :file => :file)
432
459
  assert_equal inputs, {:file => 'code'}
433
460
  end
@@ -472,4 +499,18 @@ class TestWorkflow < Test::Unit::TestCase
472
499
  end
473
500
  end
474
501
  end
502
+
503
+ def test_overriden
504
+ job = TestWF.job(:overr_action)
505
+ job.recursive_clean
506
+ assert_equal "TLA", job.run
507
+
508
+ assert Symbol === job.step(:overr_orig).overriden
509
+ assert TrueClass === job.step(:overr_target).overriden
510
+ assert ! job.overriden
511
+
512
+ job = TestWF.job(:overr_action2)
513
+ assert_equal "TLA", job.run
514
+ assert job.overriden
515
+ end
475
516
  end
@@ -0,0 +1,24 @@
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), '../../..', 'test_helper.rb')
2
+ require 'rbbt/util/misc/serialize'
3
+
4
+ class TestClass < Test::Unit::TestCase
5
+ def test_load_yaml
6
+ yaml_txt=<<-EOF
7
+ ---
8
+ a: b
9
+ EOF
10
+ yaml_sio = StringIO.new yaml_txt
11
+
12
+ assert_equal "b", Misc.load_yaml(yaml_txt)["a"]
13
+ assert_equal "b", Misc.load_yaml(yaml_sio)["a"]
14
+
15
+ TmpFile.with_file yaml_txt do |yaml_file|
16
+ assert_equal "b", Misc.load_yaml(yaml_file)["a"]
17
+ Open.open(yaml_file) do |yaml_io|
18
+ assert_equal "b", Misc.load_yaml(yaml_io)["a"]
19
+ end
20
+ end
21
+
22
+ end
23
+ end
24
+
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.34.25
4
+ version: 5.34.27
5
5
  platform: ruby
6
6
  authors:
7
7
  - Miguel Vazquez
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-12-12 00:00:00.000000000 Z
11
+ date: 2022-12-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -323,6 +323,7 @@ files:
323
323
  - lib/rbbt/util/misc/omics.rb
324
324
  - lib/rbbt/util/misc/options.rb
325
325
  - lib/rbbt/util/misc/pipes.rb
326
+ - lib/rbbt/util/misc/serialize.rb
326
327
  - lib/rbbt/util/misc/system.rb
327
328
  - lib/rbbt/util/named_array.rb
328
329
  - lib/rbbt/util/open.rb
@@ -559,6 +560,7 @@ files:
559
560
  - test/rbbt/util/misc/test_multipart_payload.rb
560
561
  - test/rbbt/util/misc/test_omics.rb
561
562
  - test/rbbt/util/misc/test_pipes.rb
563
+ - test/rbbt/util/misc/test_serialize.rb
562
564
  - test/rbbt/util/python/test_util.rb
563
565
  - test/rbbt/util/simpleopt/test_get.rb
564
566
  - test/rbbt/util/simpleopt/test_parse.rb
@@ -634,6 +636,7 @@ test_files:
634
636
  - test/rbbt/util/misc/test_development.rb
635
637
  - test/rbbt/util/misc/test_omics.rb
636
638
  - test/rbbt/util/misc/test_pipes.rb
639
+ - test/rbbt/util/misc/test_serialize.rb
637
640
  - test/rbbt/util/misc/test_format.rb
638
641
  - test/rbbt/util/misc/test_communication.rb
639
642
  - test/rbbt/util/misc/test_lock.rb