rbbt-util 5.14.12 → 5.14.14

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
  SHA1:
3
- metadata.gz: 9356cc63437a98fd8c9f12dd2e0645858c2f3250
4
- data.tar.gz: 5531ca7de68fb6d150d7e616e9bea2b0bd6a9ca7
3
+ metadata.gz: 12a27683f6ea8562a740927dac6dca9e22854834
4
+ data.tar.gz: 6d69aab1d30fa8d56fc8b579a241779e3d84054c
5
5
  SHA512:
6
- metadata.gz: c0937701e8dc4bceb89a7f2b55c15b4a0893ac94012678c2b534c426dcaec732cbc3a09aaf74c9b2c78c9e694444ad5e9e967daaa1502856060c7bb9961ff588
7
- data.tar.gz: 4bb412bb30f2b17014d7ce818ec71754335ffe12c89494893fe29a3045a666277404e1109280e42debf751bf8415a7d291096dc5f599a5cf48553452e6f8cb15
6
+ metadata.gz: 7e33da494e19497c5f1aaaca0a6bd35f32edf91d66dbbc2f6b7cfc9932e381bb4ca08ad703b85d5fde85d5c4cba483a48d2ea287ab5e83c5f4d4a82d4f174833
7
+ data.tar.gz: 8fafdc22a685ce746ceb13cf10c6162c27afbcc51478c241a2d10402d904655b1c2e348e636758ac29cdcb48a3bf7ce9f3c6f4b50fecb45d895780308b8ff172
data/bin/rbbt CHANGED
@@ -205,6 +205,10 @@ rescue ParameterException
205
205
  print_error($!.message, $!.backtrace)
206
206
  puts
207
207
  exit -1
208
+ rescue SystemExit
209
+ Log.exception $! unless $?.success?
210
+ rescue Exception
211
+ Log.exception $!
208
212
  ensure
209
213
  if options[:profile]
210
214
  result = RubyProf.stop
@@ -90,28 +90,6 @@ module AnnotatedArray
90
90
  end
91
91
  end
92
92
 
93
- def select(method = nil, *args)
94
-
95
- if method
96
-
97
- res = self.zip( self.send(method, *args) ).
98
- select{|e,result| result }.
99
- collect{|element,r| element }
100
- else
101
-
102
- return self unless block_given?
103
-
104
- res = []
105
- each do |value|
106
- res << value if yield(value)
107
- end
108
- end
109
-
110
- annotate(res)
111
- res.extend AnnotatedArray
112
-
113
- res
114
- end
115
93
 
116
94
  def reject
117
95
  res = []
@@ -62,11 +62,12 @@ module AssociationItem
62
62
  end
63
63
 
64
64
  property :tsv => :array do
65
- fields = self.info_fields
65
+ info_fields = self.info_fields
66
+ fields = [self.source_type, self.target_type].concat info_fields
66
67
  type = [self.source_type, self.target_type] * "~"
67
68
  tsv = TSV.setup({}, :key_field => type, :fields => fields, :type => :list, :namespace => self.namespace)
68
69
  self.each do |match|
69
- tsv[match] = match.info.values_at *fields
70
+ tsv[match] = [match.source, match.target].concat match.info.values_at(*info_fields)
70
71
  end
71
72
  tsv
72
73
  end
@@ -94,4 +95,38 @@ module AssociationItem
94
95
 
95
96
  defined?(TSV)? TSV.setup(matrix, :key_field => (key_field || "Source") , :fields => targets, :type => :list) : matrix
96
97
  end
98
+
99
+ def self._select_match(orig, elem)
100
+ if Array === orig and Array === elem
101
+ (orig & elem).any?
102
+ elsif Array === orig
103
+ orig.include? elem
104
+ elsif Array === elem
105
+ elem.include? orig
106
+ else
107
+ elem === orif
108
+ end
109
+ false
110
+ end
111
+
112
+ def self.select(list, method = nil, &block)
113
+ if method and method.any?
114
+ list.select do |item|
115
+ method.collect do |key,value|
116
+ case key
117
+ when :target
118
+ _select_match item.target, value
119
+ when :source
120
+ _select_match item.source, value
121
+ else
122
+ orig = item.info[key]
123
+ orig = orig.split(";;") if String orig
124
+ _select_match orig, value
125
+ end
126
+ end
127
+ end
128
+ else
129
+ list.select(&block)
130
+ end
131
+ end
97
132
  end
data/lib/rbbt/persist.rb CHANGED
@@ -38,7 +38,10 @@ module Persist
38
38
  check = persist_options[:check]
39
39
  if not check.nil?
40
40
  if Array === check
41
- return false if check.select{|file| newer? path, file}.any?
41
+ if check.select{|file| newer? path, file}.any?
42
+ Log.medium "Persistence check for #{path} failed in: #{ check.select{|file| newer? path, file} * ", "}"
43
+ return false
44
+ end
42
45
  else
43
46
  return false if newer? path, check
44
47
  end
@@ -49,8 +49,7 @@ module Rake
49
49
  end
50
50
  rescue
51
51
  Log.error "Error in rake: #{$!.message}"
52
- Log.exception $!
53
- raise $!
52
+ Kernel.exit! -1
54
53
  end
55
54
  }
56
55
  Process.waitpid(pid)
@@ -235,14 +235,25 @@ module TSV
235
235
 
236
236
  def zip_new(key, values)
237
237
  values = [values] unless Array === values
238
- if self.include? key
239
- new = []
240
- self[key, true].each_with_index do |v,i|
241
- new << (v << values[i])
238
+ case type
239
+ when :double
240
+ if self.include? key
241
+ new = []
242
+ self[key, true].each_with_index do |v,i|
243
+ new << (v << values[i])
244
+ end
245
+ self[key] == new
246
+ else
247
+ self[key] = values.collect{|v| [v] }
248
+ end
249
+ when :flat
250
+ if self.include? key
251
+ self[key] = (self[key] + values).uniq
252
+ else
253
+ self[key] = values
242
254
  end
243
- self[key] == new
244
255
  else
245
- self[key] = values.collect{|v| [v] }
256
+ raise "Cannot zip_new for type: #{type}"
246
257
  end
247
258
  end
248
259
 
@@ -294,12 +294,13 @@ module TSV
294
294
  Log.medium{"Aborted traversing 2 #{stream_name(obj)}"}
295
295
  rescue Exception
296
296
  Log.medium{"Exception traversing #{stream_name(obj)}"}
297
- Log.exception $!
298
297
  begin
299
298
  stream = obj_stream(obj)
300
299
  stream.abort if stream and stream.respond_to? :abort
301
300
  stream = obj_stream(options[:into])
302
301
  stream.abort if stream.respond_to? :abort
302
+ rescue Exception
303
+ ensure
303
304
  raise $!
304
305
  end
305
306
  end
@@ -378,19 +379,28 @@ module TSV
378
379
  return
379
380
  end
380
381
  begin
382
+ return false if value.nil?
381
383
  case store
382
- when Hash
383
- return false if value.nil?
384
- if Hash === value
385
- if TSV === store and store.type == :double
384
+ when TSV
385
+ if store.type == :double or store.type == :flat
386
+ case value
387
+ when TSV, Hash
386
388
  store.merge_zip value
387
389
  else
388
- store.merge! value
390
+ store.zip_new *value
389
391
  end
390
392
  else
391
393
  k,v = value
392
394
  store[k] = v
393
395
  end
396
+ when Hash
397
+ case value
398
+ when TSV, Hash
399
+ store.merge! value
400
+ else
401
+ k,v = value
402
+ store[k] = v
403
+ end
394
404
  when TSV::Dumper
395
405
  return false if value.nil?
396
406
  store.add *value
data/lib/rbbt/util/log.rb CHANGED
@@ -213,9 +213,8 @@ module Log
213
213
 
214
214
  def self.exception(e)
215
215
  stack = caller
216
- error("#{Log.color :error, "EXCEPTION:"} " << stack.first)
217
- error([e.class.to_s, e.message].compact * ": ")
218
- error("BACKTRACE:\n" + e.backtrace * "\n")
216
+ error([e.class.to_s, e.message].compact * ": " )
217
+ error("BACKTRACE: " << Log.last_caller(caller) << "\n" + color_stack(e.backtrace)*"\n")
219
218
  end
220
219
 
221
220
  def self.color_stack(stack)
data/lib/rbbt/workflow.rb CHANGED
@@ -297,7 +297,9 @@ module Workflow
297
297
  step_path = step_path taskname, jobname, input_values, dependencies, task.extension
298
298
  end
299
299
 
300
- get_job_step step_path, task, input_values, dependencies
300
+ job = get_job_step step_path, task, input_values, dependencies
301
+ job.clean_name = jobname
302
+ job
301
303
  end
302
304
 
303
305
  def load_step(path)
@@ -54,10 +54,6 @@ class Step
54
54
  path.sub(/.*\/#{Regexp.quote task.name.to_s}\/(.*)/, '\1')
55
55
  end
56
56
 
57
- def clean_name
58
- name.sub(/(.*)_.*/, '\1')
59
- end
60
-
61
57
  def task_name
62
58
  @task_name ||= task.name
63
59
  end
@@ -505,13 +501,17 @@ module Workflow
505
501
  case v
506
502
  when Symbol
507
503
  rec_dependency = real_dependencies.collect{|d| [d, d.dependencies].flatten}.flatten.select{|d| d.task.name == v }.first
508
- rec_dependency = rec_dependency.run(true).grace.join.load unless (dependency.first.tasks[dependency[1]].input_options[i] || {})[:stream]
509
- inputs[i] = rec_dependency
504
+ if (dependency.first.tasks[dependency[1]].input_options[i] || {})[:stream]
505
+ inputs[i] = rec_dependency.run(true).grace.join.path
506
+ else
507
+ inputs[i] = rec_dependency.run(true).join.load
508
+ end
510
509
  else
511
510
  inputs[i] = v
512
511
  end
513
512
  } if options
514
- dependency.first.job(dependency[1], jobname, inputs)
513
+ res = dependency.first.job(dependency[1], jobname, inputs)
514
+ res
515
515
  when Step
516
516
  dependency
517
517
  when Symbol
@@ -40,7 +40,10 @@ module Workflow
40
40
  @dependencies << dependency_list
41
41
  else
42
42
  @dependency_list ||= []
43
- dependency_list << block if block_given?
43
+ if block_given?
44
+ dependency_list.unshift self if dependency_list.length == 1
45
+ dependency_list << block
46
+ end
44
47
  dependencies.concat dependency_list
45
48
  end
46
49
  end
@@ -48,6 +51,7 @@ module Workflow
48
51
  def dep(*dependency, &block)
49
52
  @dependencies ||= []
50
53
  if block_given?
54
+ dependency.unshift self if dependency.length == 1
51
55
  DependencyBlock.setup block, dependency if dependency.any?
52
56
  @dependencies << block
53
57
  else
@@ -5,7 +5,7 @@ require 'rbbt/util/semaphore'
5
5
  require 'rbbt/workflow/accessor'
6
6
 
7
7
  class Step
8
- attr_accessor :path, :task, :inputs, :dependencies, :bindings
8
+ attr_accessor :clean_name, :path, :task, :inputs, :dependencies, :bindings
9
9
  attr_accessor :pid
10
10
  attr_accessor :exec
11
11
  attr_accessor :result, :mutex, :seen
@@ -22,9 +22,16 @@ class Step
22
22
  end
23
23
  end
24
24
 
25
- def initialize(path, task = nil, inputs = nil, dependencies = nil, bindings = nil)
25
+ def clean_name
26
+ @clean_name ||= begin
27
+ info[:clean_name] || path.sub(/_[a-z0-9]{32}/, '')
28
+ end
29
+ end
30
+
31
+ def initialize(path, task = nil, inputs = nil, dependencies = nil, bindings = nil, clean_name = nil)
26
32
  path = Path.setup(Misc.sanitize_filename(path)) if String === path
27
- pat = path.call if Proc === path
33
+ path = path.call if Proc === path
34
+
28
35
  @path = path
29
36
  @task = task
30
37
  @bindings = bindings
@@ -39,7 +46,7 @@ class Step
39
46
  @mutex = Mutex.new
40
47
  @info_mutex = Mutex.new
41
48
  @inputs = inputs || []
42
- NamedArray.setup @inputs, task.inputs.collect{|s| s.to_s} if task and task.inputs
49
+ NamedArray.setup @inputs, task.inputs.collect{|s| s.to_s} if task and task.respond_to? :inputs and task.inputs
43
50
  end
44
51
 
45
52
  def inputs
@@ -204,9 +211,13 @@ class Step
204
211
 
205
212
  def step(name)
206
213
  @steps ||= {}
207
- @steps[name] ||= rec_dependencies.select do |step|
208
- step.task_name.to_sym == name.to_sym
209
- end.first
214
+ @steps[name] ||= begin
215
+ deps = rec_dependencies.select{|step|
216
+ step.task_name.to_sym == name.to_sym
217
+ }
218
+ deps.first
219
+ end
220
+
210
221
  end
211
222
  end
212
223
 
@@ -123,15 +123,14 @@ class Step
123
123
  dependencies.uniq.each do |dependency|
124
124
  next if seen.collect{|d| d.path}.include?(dependency.path)
125
125
  dependency.seen = seen
126
- @seen << dependency
127
126
  @seen.concat dependency.rec_dependencies.collect{|d| d }
127
+ @seen << dependency
128
128
  @seen.uniq!
129
129
  end
130
130
 
131
131
  @seen.each do |dependency|
132
132
  next if dependency == self
133
133
  next unless dependencies.include? dependency
134
- #dependency.relay_log self
135
134
  dependency.dup_inputs
136
135
  end
137
136
 
@@ -147,8 +146,8 @@ class Step
147
146
  dependency.clean if (dependency.error? or dependency.aborted? or dependency.status.nil? or not (dependency.done? or dependency.running?))
148
147
  end
149
148
 
150
- unless dependency.started? #dependency.result or dependency.done?
151
- dependency.run(true)#.grace
149
+ unless dependency.started?
150
+ dependency.run(true)
152
151
  end
153
152
  rescue Aborted
154
153
  Log.error "Aborted dep. #{Log.color :red, dependency.task.name.to_s}"
@@ -183,6 +182,7 @@ class Step
183
182
  :pid => Process.pid,
184
183
  :issued => Time.now,
185
184
  :name => name,
185
+ :clean_name => clean_name,
186
186
  :dependencies => dependencies.collect{|dep| [dep.task_name, dep.name, dep.path]},
187
187
  })
188
188
 
@@ -51,18 +51,17 @@ when :subset
51
51
  source_entities = options[:source_entities] || :all
52
52
  target_entities = options[:target_entities] || :all
53
53
 
54
- source_entities = source_entities.split(/,\|/) if String === source_entities
55
- target_entities = target_entities.split(/,\|/) if String === target_entities
54
+ source_entities = source_entities.split(/[,|]/) if String === source_entities
55
+ target_entities = target_entities.split(/[,|]/) if String === target_entities
56
56
 
57
57
  if options[:identify]
58
- source_entities = knowledge_base.identify(database, source_entities)
59
- target_entities = knowledge_base.identify(database, target_entities)
58
+ source_entities = knowledge_base.identify_source(database, source_entities)
59
+ target_entities = knowledge_base.identify_target(database, target_entities)
60
60
  end
61
61
  entities = {source_format => source_entities, target_format => target_entities}
62
62
 
63
63
  matches = knowledge_base.subset(database, entities)
64
64
 
65
-
66
65
  if options[:tsv]
67
66
  puts matches.tsv.to_s
68
67
  else
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.14.12
4
+ version: 5.14.14
5
5
  platform: ruby
6
6
  authors:
7
7
  - Miguel Vazquez
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-20 00:00:00.000000000 Z
11
+ date: 2014-08-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake