libis-workflow 2.0.beta.8 → 2.0.beta.9

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: b5de50bdbec1831269e20c93de425558b98664b3
4
- data.tar.gz: de4304d9f1ba4728cb77fdf7803a21e3108ec2bb
3
+ metadata.gz: 33d4917463c7c17ee5cd775275ccfe09c00a9360
4
+ data.tar.gz: f22d17de924236c69fefad0958257209d6cd94e2
5
5
  SHA512:
6
- metadata.gz: fb92583480199f480507dbabd8978507b331e666916771dc957807785cfe8ac5b2250fad4c5798497ca056dcbd3733bcbccc471df740eea318559c4994cbdcef
7
- data.tar.gz: 7306f086712430b41121fda993b110c1dd39d6aa94a63b0e0629d7b8fc12733f2b9f516c9c8b6b3fbc8879e145da186bdf2a7574c8e09f8ea0cd9f694357fceb
6
+ metadata.gz: 85837ac165f1e2d720ff6ca7d4386576b653eb592ff2bf721708253ce9549bc97df7a0d90003427c1e670a9bf66992f8151279bdc86c002f1021e65bc6135842
7
+ data.tar.gz: 59415cf0503c7821d3ee363760ba686114d1258bb142b5aa1cda68d03dcb8dab1a7076374fb9d1bc1bf75c99844424fe7f87543e03f0a4d2ebba4c2db34c260b
@@ -48,7 +48,7 @@ module Libis
48
48
  self.status = :STARTED
49
49
 
50
50
  self.tasks.each do |task|
51
- next if self.failed? and not task.options[:always_run]
51
+ next if self.failed? and not task.parameter(:always_run)
52
52
  task.run self
53
53
  end
54
54
 
@@ -15,8 +15,9 @@ module Libis
15
15
  include ::Libis::Workflow::Base::Logger
16
16
  include ::Libis::Tools::ParameterContainer
17
17
 
18
- attr_accessor :parent, :name, :options, :workitem, :tasks
18
+ attr_accessor :parent, :name, :workitem, :tasks
19
19
 
20
+ parameter quiet: false, description: 'Prevemt generating log output.'
20
21
  parameter abort_on_error: false, description: 'Stop all tasks when an error occurs.'
21
22
  parameter always_run: false, description: 'Run this task, even if the item failed a previous task.'
22
23
  parameter subitems: false, description: 'Do not process the given item, but only the subitems.'
@@ -40,9 +41,9 @@ module Libis
40
41
 
41
42
  check_item_type WorkItem, item
42
43
 
43
- return if item.failed? unless options[:always_run]
44
+ return if item.failed? unless parameter(:always_run)
44
45
 
45
- if options[:subitems]
46
+ if parameter(:subitems)
46
47
  log_started item
47
48
  run_subitems item
48
49
  log_done(item) unless item.failed?
@@ -64,7 +65,7 @@ module Libis
64
65
 
65
66
  pre_process item
66
67
  process_item item
67
- post_process item
68
+ post_process workitem
68
69
 
69
70
  rescue WorkflowError => e
70
71
  error e.message
@@ -93,10 +94,11 @@ module Libis
93
94
  def apply_options(opts)
94
95
  o = opts[self.name] || opts[self.names.join('/')]
95
96
 
97
+
96
98
  default_values.each do |name,_|
97
99
  next unless o.key?(name)
98
100
  parameter = get_parameter_definition name
99
- self.options[name] = parameter.parse(o[name])
101
+ self.parameter(name, parameter.parse(o[name]))
100
102
  end if o and o.is_a? Hash
101
103
 
102
104
  self.tasks.each do |task|
@@ -123,8 +125,8 @@ module Libis
123
125
 
124
126
  def process_item(item)
125
127
  process item
126
- run_subitems(item) if options[:recursive]
127
- run_subtasks item
128
+ run_subitems(workitem) if parameter(:recursive)
129
+ run_subtasks workitem
128
130
  end
129
131
 
130
132
  def process(item)
@@ -168,7 +170,7 @@ module Libis
168
170
  run_item item
169
171
  if item.failed?
170
172
  failed += 1
171
- if options[:abort_on_error]
173
+ if parameter(:abort_on_error)
172
174
  error 'Aborting ...', parent_item
173
175
  raise WorkflowAbort.new "Aborting: task #{name} failed on #{item}"
174
176
  end
@@ -193,7 +195,7 @@ module Libis
193
195
  debug 'Running subtask (%d/%d): %s', item, i+1, tasks.count, task.name
194
196
  task.run item
195
197
  if item.failed?
196
- if task.options[:abort_on_error]
198
+ if task.parameter(:abort_on_error)
197
199
  error 'Aborting ...'
198
200
  raise WorkflowAbort.new "Aborting: task #{task.name} failed on #{item}"
199
201
  end
@@ -204,12 +206,11 @@ module Libis
204
206
 
205
207
  def configure(cfg)
206
208
  self.name = cfg[:name] || (cfg[:class] || self.class).to_s.split('::').last
207
- self.options =
208
- default_values.merge(
209
- cfg[:options] || {}
210
- ).merge(
211
- cfg.reject { |k, _| [:options].include? k.to_sym }
212
- ).symbolize_keys!
209
+ default_values.merge(
210
+ cfg[:options] || {}
211
+ ).merge(
212
+ cfg.reject { |k, _| [:options].include? k.to_sym }
213
+ ).symbolize_keys!.each { |k,v| parameter(k, v) }
213
214
  end
214
215
 
215
216
  def to_status(text)
@@ -232,13 +233,13 @@ module Libis
232
233
 
233
234
  def subtasks(item = nil)
234
235
  self.tasks.map do |task|
235
- ((item || self.workitem).failed? and not task.options[:always_run]) ? nil : task
236
+ ((item || self.workitem).failed? and not task.parameter(:always_run)) ? nil : task
236
237
  end.compact
237
238
  end
238
239
 
239
240
  def subitems(item = nil)
240
241
  items = (item || workitem).items
241
- return items if self.options[:always_run]
242
+ return items if self.parameter(:always_run)
242
243
  items.reject { |i| i.failed? }
243
244
  end
244
245
 
@@ -8,14 +8,14 @@ module Libis
8
8
 
9
9
  class Analyzer < Task
10
10
 
11
- def default_options
12
- { quiet: true, always_run: true }
13
- end
11
+ parameter quiet: true
12
+ parameter always_run: true
14
13
 
15
14
  def run(item)
16
15
 
17
16
  item.properties[:ingest_failed] = item.failed?
18
17
 
18
+ item.summary = {}
19
19
  item.log_history.each do |log|
20
20
  level = log[:severity]
21
21
  item.summary[level] ||= 0
@@ -30,6 +30,13 @@ module Libis
30
30
  end
31
31
  end
32
32
 
33
+ rescue Exception => ex
34
+
35
+ puts 'Failed to analyze item: %s - %s' % [item.class, item.name]
36
+ puts 'Exception: %s' % ex.message
37
+
38
+ ensure
39
+
33
40
  item.save
34
41
 
35
42
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Libis
4
4
  module Workflow
5
- VERSION = '2.0.beta.8' unless const_defined? :VERSION # the guard is against a redefinition warning that happens on Travis
5
+ VERSION = '2.0.beta.9' unless const_defined? :VERSION # the guard is against a redefinition warning that happens on Travis
6
6
  end
7
- end
7
+ end
data/spec/task_spec.rb CHANGED
@@ -10,7 +10,7 @@ describe 'Task' do
10
10
 
11
11
  expect(task.parent).to eq nil
12
12
  expect(task.name).to eq 'Task'
13
- expect(task.options[:abort_on_error]).to eq false
13
+ expect(task.parameter(:abort_on_error)).to eq false
14
14
 
15
15
  end
16
16
 
@@ -13,7 +13,7 @@ class ChecksumTester < ::Libis::Workflow::Task
13
13
  def process(item)
14
14
  return unless item.is_a? TestFileItem
15
15
 
16
- checksum_type = options[:checksum_type]
16
+ checksum_type = parameter(:checksum_type)
17
17
 
18
18
  if checksum_type.nil?
19
19
  ::Libis::Tools::Checksum::CHECKSUM_TYPES.each do |x|
@@ -14,7 +14,7 @@ class CollectFiles < ::Libis::Workflow::Task
14
14
 
15
15
  def process(item)
16
16
  if item.is_a? TestRun
17
- add_item(item, options[:location])
17
+ add_item(item, parameter(:location))
18
18
  elsif item.is_a? TestDirItem
19
19
  collect_files(item, item.fullpath)
20
20
  end
@@ -22,11 +22,11 @@ class CollectFiles < ::Libis::Workflow::Task
22
22
 
23
23
  def collect_files(item, dir)
24
24
  glob_string = dir
25
- glob_string = File.join(glob_string, '**') if options[:subdirs]
25
+ glob_string = File.join(glob_string, '**') if parameter(:subdirs)
26
26
  glob_string = File.join(glob_string, '*')
27
27
 
28
28
  Dir.glob(glob_string).select do |x|
29
- options[:selection] && !options[:selection].empty? ? x =~ Regexp.new(options[:selection]) : true
29
+ parameter(:selection) && !parameter(:selection).empty? ? x =~ Regexp.new(parameter(:selection)) : true
30
30
  end.sort.each do |file|
31
31
  next if %w'. ..'.include? file
32
32
  add_item(item, file)
@@ -4,24 +4,22 @@ require 'stringio'
4
4
 
5
5
  describe 'TestWorkflow' do
6
6
 
7
- DIRNAME = File.absolute_path(File.join(File.dirname(__FILE__), 'items'))
7
+ let(:dirname) { File.absolute_path(File.join(File.dirname(__FILE__), 'items')) }
8
8
 
9
- before :all do
10
-
11
- puts DIRNAME
12
-
13
- @logoutput = StringIO.new
9
+ let(:logoutput) { StringIO.new }
14
10
 
11
+ let(:workflow) {
12
+ # noinspection RubyResolve
15
13
  ::Libis::Workflow.configure do |cfg|
16
14
  cfg.itemdir = File.join(File.dirname(__FILE__), 'items')
17
15
  cfg.taskdir = File.join(File.dirname(__FILE__), 'tasks')
18
16
  cfg.workdir = File.join(File.dirname(__FILE__), 'work')
19
- cfg.logger = Logger.new @logoutput
17
+ cfg.logger = Logger.new logoutput
20
18
  cfg.logger.level = Logger::DEBUG
21
19
  end
22
20
 
23
- @workflow = ::Libis::Workflow::Workflow.new
24
- @workflow.configure(
21
+ workflow = ::Libis::Workflow::Workflow.new
22
+ workflow.configure(
25
23
  name: 'TestWorkflow',
26
24
  description: 'Workflow for testing',
27
25
  tasks: [
@@ -42,33 +40,30 @@ describe 'TestWorkflow' do
42
40
  checksum_type: {default: 'SHA1', propagate_to: 'ChecksumTester'}
43
41
  }
44
42
  )
43
+ workflow
44
+ }
45
45
 
46
- # noinspection RubyStringKeysInHashInspection
47
- @run = @workflow.run(dirname: DIRNAME, checksum_type: 'SHA256')
48
- puts @logoutput.string
49
-
50
- end
46
+ let!(:run) {
47
+ workflow.run(dirname: dirname, checksum_type: 'SHA256')
48
+ }
51
49
 
52
50
  it 'should contain three tasks' do
53
-
54
- expect(@workflow.config[:tasks].size).to eq 3
55
- expect(@workflow.config[:tasks].first[:class]).to eq 'CollectFiles'
56
- expect(@workflow.config[:tasks].last[:class]).to eq '::Libis::Workflow::Tasks::Analyzer'
57
-
51
+ expect(workflow.config[:tasks].size).to eq 3
52
+ expect(workflow.config[:tasks].first[:class]).to eq 'CollectFiles'
53
+ expect(workflow.config[:tasks].last[:class]).to eq '::Libis::Workflow::Tasks::Analyzer'
58
54
  end
59
55
 
60
56
  # noinspection RubyResolve
61
57
  it 'should camelize the workitem name' do
58
+ expect(run.options[:dirname]).to eq dirname
59
+ expect(run.items.count).to eq 1
60
+ expect(run.items.first.class).to eq TestDirItem
61
+ expect(run.items.first.count).to eq 3
62
+ expect(run.items.first.first.class).to eq TestFileItem
62
63
 
63
- expect(@run.options[:dirname]).to eq DIRNAME
64
- expect(@run.items.count).to eq 1
65
- expect(@run.items.first.class).to eq TestDirItem
66
- expect(@run.items.first.count).to eq 3
67
- expect(@run.items.first.first.class).to eq TestFileItem
68
-
69
- expect(@run.items.first.name).to eq 'Items'
64
+ expect(run.items.first.name).to eq 'Items'
70
65
 
71
- @run.items.first.each_with_index do |x, i|
66
+ run.items.first.each_with_index do |x, i|
72
67
  expect(x.name).to eq %w'TestDirItem.rb TestFileItem.rb TestRun.rb'[i]
73
68
  end
74
69
  end
@@ -126,19 +121,18 @@ DEBUG -- ProcessFiles - TestRun : 1 of 1 subitems passed
126
121
  DEBUG -- ProcessFiles - TestRun : Completed
127
122
  STR
128
123
  sample_out = sample_out.lines.to_a
129
- output = @logoutput.string.lines.to_a
124
+ output = logoutput.string.lines.to_a
130
125
 
131
- puts output.join '\n'
132
126
  expect(sample_out.count).to eq output.count
133
127
  output.each_with_index do |o, i|
134
128
  expect(o[/(?<=\] ).*/]).to eq sample_out[i].strip
135
129
  end
136
130
 
137
- expect(@run.summary['DEBUG']).to eq 48
138
- expect(@run.log_history.count).to eq 8
139
- expect(@run.status_log.count).to eq 6
140
- expect(@run.items.first.log_history.count).to eq 22
141
- expect(@run.items.first.status_log.count).to eq 8
131
+ expect(run.summary['DEBUG']).to eq 48
132
+ expect(run.log_history.count).to eq 8
133
+ expect(run.status_log.count).to eq 6
134
+ expect(run.items.first.log_history.count).to eq 22
135
+ expect(run.items.first.status_log.count).to eq 8
142
136
 
143
137
  [
144
138
  {tasklist: nil, text: :STARTED},
@@ -148,7 +142,7 @@ STR
148
142
  {tasklist: %w'ProcessFiles', text: :Done},
149
143
  {tasklist: nil, :text => :DONE},
150
144
  ].each_with_index do |h, i|
151
- h.keys.each { |key| expect(@run.status_log[i][key]).to eq h[key] }
145
+ h.keys.each { |key| expect(run.status_log[i][key]).to eq h[key] }
152
146
  end
153
147
 
154
148
  [
@@ -161,7 +155,7 @@ STR
161
155
  {tasklist: %w'ProcessFiles CamelizeName', text: :Done},
162
156
  {tasklist: %w'ProcessFiles', text: :Done},
163
157
  ].each_with_index do |h, i|
164
- h.keys.each { |key| expect(@run.items.first.status_log[i][key]).to eq h[key] }
158
+ h.keys.each { |key| expect(run.items.first.status_log[i][key]).to eq h[key] }
165
159
  end
166
160
 
167
161
  [
@@ -172,7 +166,7 @@ STR
172
166
  {tasklist: %w'ProcessFiles CamelizeName', text: :Started},
173
167
  {tasklist: %w'ProcessFiles CamelizeName', text: :Done},
174
168
  ].each_with_index do |h, i|
175
- h.keys.each { |key| expect(@run.items.first.first.status_log[i][key]).to eq h[key] }
169
+ h.keys.each { |key| expect(run.items.first.first.status_log[i][key]).to eq h[key] }
176
170
  end
177
171
 
178
172
  [
@@ -185,7 +179,7 @@ STR
185
179
  {severity: 'DEBUG', task: 'ProcessFiles', id: 0, message: '1 of 1 subitems passed'},
186
180
  {severity: 'DEBUG', task: 'ProcessFiles', id: 0, message: 'Completed'},
187
181
  ].each_with_index do |h, i|
188
- h.keys.each { |key| expect(@run.log_history[i][key]).to eq h[key] }
182
+ h.keys.each { |key| expect(run.log_history[i][key]).to eq h[key] }
189
183
  end
190
184
 
191
185
  [
@@ -212,7 +206,7 @@ STR
212
206
  {severity: 'DEBUG', task: 'ProcessFiles/CamelizeName', id: 0, message: 'Completed'},
213
207
  {severity: 'DEBUG', task: 'ProcessFiles', id: 0, message: 'Completed'},
214
208
  ].each_with_index do |h, i|
215
- h.keys.each { |key| expect(@run.items.first.log_history[i][key]).to eq h[key] }
209
+ h.keys.each { |key| expect(run.items.first.log_history[i][key]).to eq h[key] }
216
210
  end
217
211
 
218
212
  [
@@ -223,7 +217,7 @@ STR
223
217
  {severity: 'DEBUG', task: 'ProcessFiles/CamelizeName', id: 0, message: 'Started'},
224
218
  {severity: 'DEBUG', task: 'ProcessFiles/CamelizeName', id: 0, message: 'Completed'},
225
219
  ].each_with_index do |h, i|
226
- h.keys.each { |key| expect(@run.items.first.first.log_history[i][key]).to eq h[key] }
220
+ h.keys.each { |key| expect(run.items.first.first.log_history[i][key]).to eq h[key] }
227
221
  end
228
222
 
229
223
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: libis-workflow
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.beta.8
4
+ version: 2.0.beta.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kris Dekeyser
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-16 00:00:00.000000000 Z
11
+ date: 2015-06-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler