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

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
  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