eco-helpers 2.6.0 → 2.6.2
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 +4 -4
- data/CHANGELOG.md +91 -1
- data/README.md +5 -0
- data/eco-helpers.gemspec +1 -1
- data/lib/eco/api/common/class_helpers.rb +1 -1
- data/lib/eco/api/common/loaders/base.rb +5 -0
- data/lib/eco/api/common/loaders/case_base.rb +0 -2
- data/lib/eco/api/common/loaders/config/workflow/mailer.rb +78 -0
- data/lib/eco/api/common/loaders/config/workflow.rb +11 -0
- data/lib/eco/api/common/loaders/config.rb +29 -0
- data/lib/eco/api/common/loaders/error_handler.rb +0 -2
- data/lib/eco/api/common/loaders/parser.rb +0 -1
- data/lib/eco/api/common/loaders/policy.rb +0 -2
- data/lib/eco/api/common/loaders.rb +1 -0
- data/lib/eco/api/common/session/mailer.rb +3 -1
- data/lib/eco/api/common/version_patches/exception.rb +2 -2
- data/lib/eco/api/common/version_patches/ruby3/object.rb +18 -0
- data/lib/eco/api/common/version_patches/ruby3.rb +1 -0
- data/lib/eco/api/common/version_patches.rb +3 -0
- data/lib/eco/api/custom/config.rb +10 -0
- data/lib/eco/api/custom/mailer.rb +9 -0
- data/lib/eco/api/custom/namespace.rb +2 -0
- data/lib/eco/api/custom/workflow.rb +9 -0
- data/lib/eco/api/custom.rb +3 -0
- data/lib/eco/api/session/batch/base_policy.rb +13 -5
- data/lib/eco/api/session/batch/job.rb +10 -7
- data/lib/eco/api/session/config/tagtree.rb +15 -1
- data/lib/eco/api/session/config/workflow.rb +94 -58
- data/lib/eco/api/session/config.rb +2 -2
- data/lib/eco/api/usecases/base_io.rb +50 -4
- data/lib/eco/api/usecases/cli/dsl.rb +23 -13
- data/lib/eco/api/usecases/default/locations/cli/tagtree_extract_cli.rb +5 -0
- data/lib/eco/api/usecases/default/locations/tagtree_extract_case.rb +12 -4
- data/lib/eco/api/usecases/graphql/helpers/location/base.rb +1 -2
- data/lib/eco/api/usecases/ooze_samples/helpers/creatable.rb +62 -0
- data/lib/eco/api/usecases/ooze_samples/helpers/rescuable.rb +59 -0
- data/lib/eco/api/usecases/ooze_samples/helpers.rb +2 -0
- data/lib/eco/api/usecases/ooze_samples/ooze_base_case.rb +2 -1
- data/lib/eco/api/usecases/ooze_samples/register_migration_case.rb +2 -26
- data/lib/eco/api/usecases/ooze_samples/register_update_case.rb +64 -47
- data/lib/eco/api/usecases/ooze_samples/target_oozes_update_case.rb +8 -0
- data/lib/eco/api/usecases/use_case.rb +12 -2
- data/lib/eco/assets.rb +2 -2
- data/lib/eco/cli_default/workflow.rb +102 -120
- data/lib/eco/data/locations/node_base/tag_validations.rb +19 -9
- data/lib/eco/data/locations/node_base/treeify.rb +193 -18
- data/lib/eco/data/locations/node_diff/nodes_diff.rb +11 -9
- data/lib/eco/data/locations/node_diff/selectors.rb +1 -1
- data/lib/eco/data/locations/node_level.rb +1 -1
- data/lib/eco/data/locations/node_plain/parsing.rb +1 -1
- data/lib/eco/data/locations/node_plain/serial.rb +1 -1
- data/lib/eco/data/locations/node_plain.rb +4 -3
- data/lib/eco/language/klass/when_inherited.rb +17 -0
- data/lib/eco/language/klass.rb +8 -0
- data/lib/eco/language/methods/delegate_missing.rb +28 -0
- data/lib/eco/language/methods/dsl_able.rb +25 -0
- data/lib/eco/language/methods.rb +9 -0
- data/lib/eco/language.rb +2 -0
- data/lib/eco/version.rb +1 -1
- metadata +18 -3
@@ -66,8 +66,8 @@ class Eco::API::UseCases::OozeSamples::RegisterMigrationCase < Eco::API::UseCase
|
|
66
66
|
|
67
67
|
def process_ooze
|
68
68
|
with_target_stage(self.class::SOURCE_STAGE) do |source|
|
69
|
-
|
70
|
-
|
69
|
+
draft_reference = object_reference(source)
|
70
|
+
creating_new_page(draft_reference, template_id: elf.class::TEMPLATE_ID) do |draft|
|
71
71
|
draft.base_tags << ["IMPORTED", "MIGRATED"]
|
72
72
|
|
73
73
|
pairing_tracking = copy_pairings(source, draft)
|
@@ -89,13 +89,6 @@ class Eco::API::UseCases::OozeSamples::RegisterMigrationCase < Eco::API::UseCase
|
|
89
89
|
if msg = pairing_tracking.report_dst_unpaired(only_required: false, exclude_ximport: !self.class::REPORT_DST_XIMPORT)
|
90
90
|
logger.warn(msg)
|
91
91
|
end
|
92
|
-
|
93
|
-
if page_id = create_entry(draft, reference: draft_reference)
|
94
|
-
csv << [source.id, page_id]
|
95
|
-
logger.info("Page '#{page_id}' created successfully.")
|
96
|
-
elsif options.dig(:dry_run)
|
97
|
-
logger.info("Simulated launch for #{draft_reference}")
|
98
|
-
end
|
99
92
|
end
|
100
93
|
end
|
101
94
|
end
|
@@ -153,23 +146,6 @@ class Eco::API::UseCases::OozeSamples::RegisterMigrationCase < Eco::API::UseCase
|
|
153
146
|
"#{sym}_callback".to_sym
|
154
147
|
end
|
155
148
|
|
156
|
-
def create_entry(draft, reference:, from: self.class::TEMPLATE_ID)
|
157
|
-
with_rescue(reference) do
|
158
|
-
if !options[:dry_run]
|
159
|
-
create_ooze(draft, template_id: from).page_id
|
160
|
-
else
|
161
|
-
logger.info("Creation sample follows...")
|
162
|
-
dry_run_feedback(draft)
|
163
|
-
false
|
164
|
-
end
|
165
|
-
end
|
166
|
-
end
|
167
|
-
|
168
|
-
def drafting_entry(template_id = selfTEMPLATE_ID)
|
169
|
-
draft = apiv2.pages.get_new(template_id)
|
170
|
-
yield(draft)
|
171
|
-
end
|
172
|
-
|
173
149
|
def with_target_stage(name)
|
174
150
|
if stg = target_stage(name)
|
175
151
|
yield(stg)
|
@@ -4,6 +4,8 @@
|
|
4
4
|
# - You need to define the `process_ooze` method
|
5
5
|
# This case expects `options[:source][:register_id]`
|
6
6
|
class Eco::API::UseCases::OozeSamples::RegisterUpdateCase < Eco::API::UseCases::OozeSamples::OozeBaseCase
|
7
|
+
include Eco::API::UseCases::OozeSamples::Helpers::Creatable
|
8
|
+
|
7
9
|
class << self
|
8
10
|
# @return [Integer] the number of pages to be processed in each batch
|
9
11
|
def batch_size(size = nil)
|
@@ -18,31 +20,25 @@ class Eco::API::UseCases::OozeSamples::RegisterUpdateCase < Eco::API::UseCases::
|
|
18
20
|
|
19
21
|
attr_reader :retrieved_oozes, :non_retrieved_oozes
|
20
22
|
attr_reader :total_search_oozes, :dupped_search_oozes
|
21
|
-
attr_reader :ooze_result_ids
|
23
|
+
attr_reader :ooze_result_ids
|
24
|
+
attr_reader :updated_oozes, :failed_update_oozes, :attempted_ooze_updates
|
25
|
+
attr_reader :created_oozes, :ooze_create_attempts
|
22
26
|
|
23
|
-
def main(session, options, usecase, &block)
|
24
|
-
|
25
|
-
@non_retrieved_oozes = 0
|
26
|
-
@dupped_search_oozes = 0
|
27
|
-
@ooze_result_ids = {}
|
28
|
-
@updated_oozes = 0
|
29
|
-
@failed_update_oozes = 0
|
30
|
-
@created_oozes = 0
|
27
|
+
def main(session, options, usecase, mode: :legacy, &block)
|
28
|
+
init_kpis
|
31
29
|
|
32
30
|
super(session, options, usecase) do
|
33
|
-
|
34
|
-
|
31
|
+
if mode == :legacy
|
32
|
+
with_each_entry do |ooze|
|
33
|
+
process_ooze(&block)
|
34
|
+
end
|
35
|
+
elsif mode == :delegate
|
36
|
+
raise "You need to pass a block when running main in `:delegate` mode" unless block_given?
|
37
|
+
yield
|
35
38
|
end
|
36
39
|
end
|
37
|
-
|
38
|
-
|
39
|
-
msg += " • Duplicated search results #{dupped_search_oozes}\n"
|
40
|
-
msg += " • Retrieved a total of #{retrieved_oozes}\n"
|
41
|
-
msg += " • Could not get #{non_retrieved_oozes} oozes.\n"
|
42
|
-
msg += " • Updated #{updated_oozes} oozes.\n"
|
43
|
-
msg += " - Failed update on #{failed_update_oozes} oozes.\n"
|
44
|
-
msg += " • Created #{created_oozes} oozes.\n"
|
45
|
-
logger.info(msg)
|
40
|
+
|
41
|
+
log_kpis
|
46
42
|
end
|
47
43
|
|
48
44
|
def process_ooze(ooze = target)
|
@@ -51,29 +47,6 @@ class Eco::API::UseCases::OozeSamples::RegisterUpdateCase < Eco::API::UseCases::
|
|
51
47
|
|
52
48
|
private
|
53
49
|
|
54
|
-
def with_rescue(reference)
|
55
|
-
begin
|
56
|
-
yield
|
57
|
-
rescue StandardError => e
|
58
|
-
logger.error([reference, e.message].join(' => \n'))
|
59
|
-
lines = []
|
60
|
-
lines << '\nThere was an error. Choose one option:\n'
|
61
|
-
lines << ' (C) - Continue/resume. Just ignore this one.'
|
62
|
-
lines << ' (A) - Abort. Just break this run.'
|
63
|
-
|
64
|
-
session.prompt_user('Type one option (C/a):', explanation: lines.join('\n'), default: 'C') do |res|
|
65
|
-
res = res.upcase
|
66
|
-
case
|
67
|
-
when res.start_with?("A")
|
68
|
-
raise
|
69
|
-
else res.start_with?("C")
|
70
|
-
logger.warn "Script resumed after error..."
|
71
|
-
nil
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
50
|
def before_loading_new_target(ooze_id)
|
78
51
|
if pending = queue_shift(ooze_id)
|
79
52
|
update_ooze(pending).tap do |result|
|
@@ -95,6 +68,7 @@ class Eco::API::UseCases::OozeSamples::RegisterUpdateCase < Eco::API::UseCases::
|
|
95
68
|
end
|
96
69
|
end
|
97
70
|
|
71
|
+
# Main looper (invoked from `main`)
|
98
72
|
def with_each_entry
|
99
73
|
batched_search_results do |page_results|
|
100
74
|
page_results.each do |page_result|
|
@@ -172,12 +146,26 @@ class Eco::API::UseCases::OozeSamples::RegisterUpdateCase < Eco::API::UseCases::
|
|
172
146
|
yield(results) unless results.empty?
|
173
147
|
end
|
174
148
|
|
149
|
+
# Launches the actual request to create the entry
|
175
150
|
def create_ooze(draft, template_id:)
|
176
|
-
|
177
|
-
|
151
|
+
@ooze_create_attempts += 1
|
152
|
+
|
153
|
+
if dry_run?
|
154
|
+
dry_run_feedback(ooze)
|
155
|
+
false
|
156
|
+
else
|
157
|
+
apiv2.pages.create(draft, from: template_id).tap do |result|
|
158
|
+
@created_oozes += 1
|
159
|
+
end
|
178
160
|
end
|
179
161
|
end
|
180
162
|
|
163
|
+
# Capture the attempts count
|
164
|
+
def update_ooze(*args, **kargs, &block)
|
165
|
+
@attempted_ooze_updates += 1 if dirty?(ooze)
|
166
|
+
super
|
167
|
+
end
|
168
|
+
|
181
169
|
def update_oozes(batched_oozes = batch_queue)
|
182
170
|
batched_oozes.each do |ooze|
|
183
171
|
update_ooze(ooze).tap do |result|
|
@@ -215,10 +203,39 @@ class Eco::API::UseCases::OozeSamples::RegisterUpdateCase < Eco::API::UseCases::
|
|
215
203
|
end
|
216
204
|
end
|
217
205
|
|
206
|
+
def init_kpis
|
207
|
+
@retrieved_oozes = 0
|
208
|
+
@non_retrieved_oozes = 0
|
209
|
+
@dupped_search_oozes = 0
|
210
|
+
@ooze_result_ids = {}
|
211
|
+
@updated_oozes = 0
|
212
|
+
@failed_update_oozes = 0
|
213
|
+
@attempted_ooze_updates = 0
|
214
|
+
@created_oozes = 0
|
215
|
+
@ooze_create_attempts = 0
|
216
|
+
end
|
217
|
+
|
218
|
+
def log_kpis
|
219
|
+
log(:info) { kpis_message }
|
220
|
+
end
|
221
|
+
|
222
|
+
def kpis_message
|
223
|
+
msg = []
|
224
|
+
msg << "Run end:"
|
225
|
+
msg << " • Search results: #{total_search_oozes}"
|
226
|
+
msg << " • Duplicated search results #{dupped_search_oozes}"
|
227
|
+
msg << " • Retrieved a total of #{retrieved_oozes}"
|
228
|
+
msg << " • Could not get #{non_retrieved_oozes} oozes."
|
229
|
+
msg << " • Updated #{updated_oozes} oozes (attempted: #{attempted_ooze_updates})."
|
230
|
+
msg << " - Failed update on #{failed_update_oozes} oozes."
|
231
|
+
msg << " • Created #{created_oozes} oozes (out of: #{ooze_create_attempts})."
|
232
|
+
msg.join("\n")
|
233
|
+
end
|
234
|
+
|
218
235
|
def search_options
|
219
236
|
@search_options ||= {}.tap do |opts|
|
220
|
-
opts.merge!(sort:
|
221
|
-
opts.merge!(dir:
|
237
|
+
opts.merge!(sort: 'created_at')
|
238
|
+
opts.merge!(dir: 'asc')
|
222
239
|
opts.merge!(query: conf_search) if conf_search
|
223
240
|
opts.merge!(filters: conf_filters)
|
224
241
|
end
|
@@ -19,7 +19,11 @@ class Eco::API::UseCases::OozeSamples::TargetOozesUpdateCase < Eco::API::UseCase
|
|
19
19
|
end
|
20
20
|
end
|
21
21
|
if ooz = ooze(id)
|
22
|
+
@retrieved_oozes += 1
|
22
23
|
yield(ooz)
|
24
|
+
else
|
25
|
+
@non_retrieved_oozes += 1
|
26
|
+
logger.warn "Could not get page #{id}"
|
23
27
|
end
|
24
28
|
end
|
25
29
|
update_oozes
|
@@ -42,8 +46,12 @@ class Eco::API::UseCases::OozeSamples::TargetOozesUpdateCase < Eco::API::UseCase
|
|
42
46
|
|
43
47
|
def target_ids_preview
|
44
48
|
dups = target_ids.select {|id| target_ids.count(id) > 1}
|
49
|
+
@total_search_oozes = target_ids.count
|
50
|
+
@dupped_search_oozes = dups.count
|
51
|
+
|
45
52
|
dups_str = dups.count > 0 ? "There are #{dups.count} duplicated ids" : "No duplicates detected"
|
46
53
|
msg = "Total target entries: #{target_ids.count} (#{dups_str})"
|
54
|
+
|
47
55
|
session.prompt_user("Do you want to proceed (y/N):", explanation: msg, default: "N", timeout: 10) do |res|
|
48
56
|
unless res.upcase.start_with?("Y")
|
49
57
|
puts "..."
|
@@ -40,6 +40,7 @@ module Eco
|
|
40
40
|
# @option kargs [Eco::API::Organization::People] :people object.
|
41
41
|
# @option kargs [Eco::API:Session] :session
|
42
42
|
# @option kargs [Hash] :options hash with symbol keys (i.e. behaviour modifiers, cli trackers, filters, etc.)
|
43
|
+
# @return [Eco::API::UseCases::UseCaseIO] an io with the result in output
|
43
44
|
def launch(io: nil, **kargs)
|
44
45
|
params = io&.params(keyed: true, all: true) || {}
|
45
46
|
kargs = params.merge(kargs).merge(usecase: self)
|
@@ -88,12 +89,21 @@ module Eco
|
|
88
89
|
callback_self.instance_eval do
|
89
90
|
@session = sess
|
90
91
|
@options = opts
|
91
|
-
|
92
|
-
|
92
|
+
if peo
|
93
|
+
@people = peo
|
94
|
+
self.singleton_class.attr_reader(:people) unless respond_to?(:people)
|
95
|
+
end
|
96
|
+
|
97
|
+
if ent # entries/input
|
98
|
+
@input = ent
|
99
|
+
self.singleton_class.attr_reader(:input) unless respond_to?(:input)
|
100
|
+
end
|
93
101
|
|
94
102
|
# `self` is the use case itself (when used the Loader)
|
95
103
|
next unless self.is_a?(Eco::API::Common::Loaders::CaseBase)
|
104
|
+
|
96
105
|
@usecase = use_case_self
|
106
|
+
self.singleton_class.attr_reader(:usecase) unless respond_to?(:usecase)
|
97
107
|
end
|
98
108
|
true
|
99
109
|
end
|
data/lib/eco/assets.rb
CHANGED
@@ -1,189 +1,171 @@
|
|
1
|
-
ASSETS.cli
|
1
|
+
ASSETS.cli do |cli|
|
2
2
|
ASSETS.config.workflow do |wf|
|
3
|
-
io = nil
|
4
|
-
rescued = false
|
5
|
-
cases_with_input = nil
|
6
|
-
cases_with_output = nil
|
7
3
|
|
4
|
+
rescued = false
|
8
5
|
# default rescue
|
9
|
-
wf.rescue do |
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
rescue Exception => e
|
17
|
-
puts "Some problem in workflow.rescue: #{e}"
|
18
|
-
end
|
19
|
-
io
|
6
|
+
wf.rescue do |err, io|
|
7
|
+
next io if rescued
|
8
|
+
rescued = true
|
9
|
+
log(:debug) { err.patch_full_message }
|
10
|
+
wf.run(:close, io: io)
|
11
|
+
rescue StandardError => e
|
12
|
+
puts "Some problem in workflow.rescue: #{e}"
|
20
13
|
end
|
21
14
|
|
22
|
-
wf.on(:options) do |
|
23
|
-
config.usecases.cli_apply(io: io)
|
24
|
-
io
|
15
|
+
wf.on(:options) do |_wf_opt, io|
|
16
|
+
cli.config.usecases.cli_apply(io: io)
|
17
|
+
io.new(options: cli.config.options_set.process(io: io))
|
25
18
|
end
|
26
19
|
|
27
20
|
wf.for(:load) do |wf_load|
|
28
|
-
wf_load.for(:input) do |
|
29
|
-
|
30
|
-
cases_with_input =
|
21
|
+
wf_load.for(:input) do |wf_in|
|
22
|
+
wf_in.on(:get) do |_wf_ig, io|
|
23
|
+
cases_with_input = cli.config.usecases.active(io: io).select do |usecase, data|
|
31
24
|
io.class.input_required?(usecase.type)
|
32
25
|
end
|
33
26
|
|
34
|
-
input_is_required = !cases_with_input.empty? ||
|
35
|
-
missing_input = !
|
36
|
-
next
|
27
|
+
input_is_required = !cases_with_input.empty? || options.dig(:input, :entries_from)
|
28
|
+
missing_input = !input || input.empty?
|
29
|
+
next unless missing_input && input_is_required
|
37
30
|
|
38
|
-
if
|
39
|
-
io
|
31
|
+
if options.dig(:input, :entries_from)
|
32
|
+
io.new(input: cli.config.input.get(io: io))
|
40
33
|
else
|
41
34
|
opt_case = cases_with_input.values.first.option
|
42
|
-
io
|
35
|
+
io.new(input: cli.config.input.get(io: io, option: opt_case))
|
43
36
|
end
|
44
|
-
io
|
45
37
|
end
|
46
38
|
|
47
|
-
|
48
|
-
next
|
49
|
-
io
|
39
|
+
wf_in.on(:filter) do |_wf_if, io|
|
40
|
+
next unless input && !input.empty?
|
41
|
+
io.new(input: cli.config.input_filters.process(io: io))
|
50
42
|
end
|
51
43
|
end
|
52
44
|
|
53
|
-
wf_load.for(:people) do |
|
54
|
-
|
55
|
-
cases_with_people = config.usecases.active(io: io).select do |usecase, data|
|
45
|
+
wf_load.for(:people) do |wf_peo|
|
46
|
+
wf_peo.on(:get) do |_wf_pg, io|
|
47
|
+
cases_with_people = cli.config.usecases.active(io: io).select do |usecase, data|
|
56
48
|
io.class.people_required?(usecase.type)
|
57
49
|
end
|
58
|
-
next
|
59
|
-
io
|
50
|
+
next if cases_with_people.empty? && !options.dig(:people, :get)
|
51
|
+
io.new(people: cli.config.people(io: io))
|
60
52
|
end
|
61
53
|
|
62
|
-
|
63
|
-
next
|
64
|
-
io
|
54
|
+
wf_peo.on(:filter) do |_wf_pf, io|
|
55
|
+
next unless people && !people.empty?
|
56
|
+
io.new(people: cli.config.people_filters.process(io: io))
|
65
57
|
end
|
66
58
|
end
|
67
59
|
end
|
68
60
|
|
69
|
-
wf.before(:usecases) do |
|
61
|
+
wf.before(:usecases) do |_wf_ca, io|
|
70
62
|
# save partial entries -> should be native to session.workflow
|
71
|
-
get_people =
|
63
|
+
get_people = options.dig(:people, :get)
|
72
64
|
partial_update = get_people && get_people.dig(:type) == :partial
|
73
|
-
if !
|
74
|
-
partial_file =
|
75
|
-
|
65
|
+
if !options[:dry_run] && partial_update
|
66
|
+
partial_file = session.config.people.partial_cache
|
67
|
+
session.file_manager.save_json(io.people, partial_file, :timestamp)
|
76
68
|
end
|
77
|
-
io
|
78
69
|
end
|
79
70
|
|
80
|
-
wf.on(:usecases) do |
|
81
|
-
unless config.usecases.process(io: io)
|
82
|
-
|
83
|
-
|
84
|
-
exit(0)
|
71
|
+
wf.on(:usecases) do |_wf_ca, io|
|
72
|
+
unless cli.config.usecases.process(io: io)
|
73
|
+
log(:info) { "No update operation specified... quitting" }
|
74
|
+
exit 0
|
85
75
|
end
|
86
|
-
io
|
87
76
|
end
|
88
77
|
|
89
|
-
wf.before(:launch_jobs) do
|
78
|
+
wf.before(:launch_jobs) do
|
90
79
|
SCR.stop_on_unknown!
|
91
|
-
io
|
92
80
|
end
|
93
81
|
|
94
|
-
wf.on(:launch_jobs) do
|
95
|
-
|
96
|
-
io
|
82
|
+
wf.on(:launch_jobs) do
|
83
|
+
session.jobs_launch(simulate: options[:dry_run])
|
97
84
|
end
|
98
85
|
|
99
86
|
wf.before(:post_launch) do |wf_post, io|
|
100
|
-
if
|
87
|
+
next wf_post.skip! if session.post_launch.empty?
|
88
|
+
|
89
|
+
run_it = !options[:dry_run] || options.dig(:post_launch, :run)
|
90
|
+
unless run_it
|
101
91
|
wf_post.skip!
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
msg += ", because it is not a partial update (-get-partial option not present)."
|
118
|
-
end
|
119
|
-
io.session.logger.info(msg)
|
120
|
-
end
|
121
|
-
else
|
122
|
-
wf_post.skip!
|
123
|
-
msg = "Although there are post_launch cases, they will NOT be RUN"
|
92
|
+
log(:info) {
|
93
|
+
msg = "Although there are post_launch cases, they will NOT be RUN"
|
94
|
+
msg += ", because we are in dry-run (simulate)." if options[:dry_run]
|
95
|
+
msg
|
96
|
+
}
|
97
|
+
next
|
98
|
+
end
|
99
|
+
|
100
|
+
get_people = options.dig(:people, :get)
|
101
|
+
partial_update = get_people && get_people.dig(:type) == :partial
|
102
|
+
refresh_data = !options[:dry_run] && partial_update
|
103
|
+
|
104
|
+
unless refresh_data
|
105
|
+
log(:info) {
|
106
|
+
msg = "Although there are post_launch cases, data will not be refreshed before their run"
|
124
107
|
if io.options[:dry_run]
|
125
|
-
msg+= ", because we are in dry-run (simulate)."
|
108
|
+
msg += ", because we are in dry-run (simulate)."
|
109
|
+
elsif !partial_update
|
110
|
+
msg += ", because it is not a partial update (-get-partial option not present)."
|
126
111
|
end
|
127
|
-
|
128
|
-
|
112
|
+
msg
|
113
|
+
}
|
114
|
+
next
|
129
115
|
end
|
130
|
-
|
116
|
+
|
117
|
+
# get target people afresh
|
118
|
+
peo_aux = session.micro.people_refresh(people: people, include_created: true)
|
119
|
+
io.base.new(people: peo_aux)
|
131
120
|
end
|
132
121
|
|
133
122
|
wf.for(:post_launch) do |wf_post|
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
else
|
143
|
-
raise
|
144
|
-
end
|
145
|
-
end
|
123
|
+
wf_post.on(:usecases) do |_wf_pu, io|
|
124
|
+
session.post_launch.each do |use|
|
125
|
+
use.launch(io: io).base
|
126
|
+
rescue Eco::API::UseCases::BaseIO::MissingParameter => e
|
127
|
+
raise unless e.required == :people
|
128
|
+
log(:debug) {
|
129
|
+
"Skipping use case '#{use.name}' -- no base people detected for the current run"
|
130
|
+
}
|
146
131
|
end
|
147
|
-
io
|
148
132
|
end
|
149
133
|
|
150
|
-
wf_post.on(:launch_jobs) do |
|
151
|
-
|
152
|
-
io
|
134
|
+
wf_post.on(:launch_jobs) do |_wf_pl, io|
|
135
|
+
session.jobs_launch(simulate: options[:dry_run])
|
153
136
|
end
|
154
137
|
end
|
155
138
|
|
156
|
-
wf.on(:report) do |
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
io.session.process_case("to-csv", io: aux_io, type: :export)
|
165
|
-
end
|
139
|
+
wf.on(:report) do |_wf_rep, io|
|
140
|
+
if file = options.dig(:report, :people, :csv)
|
141
|
+
options.deep_merge!(export: {
|
142
|
+
options: {internal_names: true, nice_header: true, split_schemas: true},
|
143
|
+
file: {name: file, format: :csv}
|
144
|
+
})
|
145
|
+
aux_io = io.new(people: people.updated_or_created)
|
146
|
+
session.process_case("to-csv", io: aux_io, type: :export)
|
166
147
|
end
|
167
148
|
end
|
168
149
|
|
169
|
-
wf.on(:end) do |
|
170
|
-
get_people =
|
150
|
+
wf.on(:end) do |_wf_end, io|
|
151
|
+
get_people = options.dig(:people, :get)
|
171
152
|
partial_update = get_people && get_people.dig(:type) == :partial
|
172
153
|
|
173
|
-
unless !
|
174
|
-
people_update_cases = config.usecases.active(io: io).any? do |usecase, data|
|
175
|
-
[:transform, :sync].any? {|type| usecase.type == type}
|
154
|
+
unless !options[:end_get] || options[:dry_run] || partial_update
|
155
|
+
people_update_cases = cli.config.usecases.active(io: io).any? do |usecase, data|
|
156
|
+
[:transform, :sync].any? { |type| usecase.type == type }
|
176
157
|
end
|
177
158
|
|
178
159
|
if !people_update_cases
|
179
160
|
# Prevent getting people when there were no use cases that used them
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
161
|
+
log(:info) {
|
162
|
+
"Won't be recaching people, as there haven't been any targetted updates"
|
163
|
+
}
|
164
|
+
elsif !people
|
165
|
+
people = session.micro.people_cache
|
166
|
+
io.new(people: people)
|
184
167
|
end
|
185
168
|
end
|
186
|
-
io
|
187
169
|
end
|
188
170
|
end
|
189
171
|
end
|
@@ -1,33 +1,43 @@
|
|
1
1
|
module Eco::Data::Locations::NodeBase
|
2
2
|
module TagValidations
|
3
|
+
include Eco::Language::AuxiliarLogger
|
4
|
+
|
3
5
|
ALLOWED_CHARACTERS = "A-Za-z0-9 &_'\/.-"
|
4
6
|
VALID_TAG_REGEX = /^[#{ALLOWED_CHARACTERS}]+$/
|
5
7
|
INVALID_TAG_REGEX = /[^#{ALLOWED_CHARACTERS}]+/
|
6
8
|
VALID_TAG_CHARS = /[#{ALLOWED_CHARACTERS}]+/
|
7
9
|
DOUBLE_BLANKS = /\s\s+/
|
8
10
|
|
9
|
-
def clean_id(str, notify: true)
|
11
|
+
def clean_id(str, notify: true, ref: '')
|
10
12
|
blanks_x2 = has_double_blanks?(str)
|
11
13
|
partial = replace_not_allowed(str)
|
12
14
|
remove_double_blanks(partial).tap do |result|
|
13
15
|
next unless notify
|
14
|
-
next if invalid_warned?
|
16
|
+
next if invalid_warned?(str)
|
15
17
|
if partial != str
|
16
18
|
invalid_chars = identify_invalid_characters(str)
|
17
|
-
|
19
|
+
log(:warn) {
|
20
|
+
"• #{ref}Invalid characters _#{invalid_chars}_ <<_removed_: '#{str}' :_converted_>> '#{result}'"
|
21
|
+
}
|
18
22
|
elsif blanks_x2
|
19
|
-
|
23
|
+
log(:warn) {
|
24
|
+
"• #{ref}Double blanks removed: '#{str}' :_converted_>> '#{result}'"
|
25
|
+
}
|
20
26
|
end
|
21
|
-
invalid_warned!
|
27
|
+
invalid_warned!(str)
|
22
28
|
end
|
23
29
|
end
|
24
30
|
|
25
|
-
def invalid_warned?
|
26
|
-
|
31
|
+
def invalid_warned?(str)
|
32
|
+
invalid_warned[str] ||= false
|
33
|
+
end
|
34
|
+
|
35
|
+
def invalid_warned!(str)
|
36
|
+
invalid_warned[str] = true
|
27
37
|
end
|
28
38
|
|
29
|
-
def invalid_warned
|
30
|
-
@invalid_warned
|
39
|
+
def invalid_warned
|
40
|
+
@invalid_warned ||= {}
|
31
41
|
end
|
32
42
|
|
33
43
|
def has_double_blanks?(str)
|