eco-helpers 0.9.1 → 0.9.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/lib/eco/api/organization/people.rb +4 -0
- data/lib/eco/api/session.rb +5 -5
- data/lib/eco/api/session/batch_jobs.rb +7 -0
- data/lib/eco/api/session/batch_status.rb +1 -1
- data/lib/eco/api/session/config.rb +4 -0
- data/lib/eco/api/session/config/apis.rb +4 -0
- data/lib/eco/api/session/config/base_config.rb +5 -1
- data/lib/eco/api/session/task.rb +19 -0
- data/lib/eco/api/usecases/default_cases/delete_case.rb +3 -3
- data/lib/eco/api/usecases/default_cases/recover_db_case.rb +3 -1
- data/lib/eco/api/usecases/default_cases/refresh_presets_case.rb +0 -1
- data/lib/eco/api/usecases/use_case.rb +15 -3
- data/lib/eco/api/usecases/use_case_chain.rb +11 -3
- data/lib/eco/api/usecases/use_case_io.rb +3 -4
- data/lib/eco/assets.rb +12 -8
- data/lib/eco/language/models/collection.rb +0 -2
- data/lib/eco/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f3aec55ff6424177729ff863f6652dfe53fecd2df84111036d336e216f9df441
|
4
|
+
data.tar.gz: 86faa0568a8d3bc393cbbe4db62bb367230035de12230739c68891d551ae16b7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 49f68f024a1e129502ec505b79b945feec5f40a99dfa8c7ebb45ea9699c889efffaad23b1e0c08302032a92cc117a0fb9ecf404cb68cdf6d576deb283d63118e
|
7
|
+
data.tar.gz: 64777d1d3c04e878538f70b41fd0fc67ec4a951c1d59ade2300a96174c006ff68d1a2c12c9c661b57bc75af5e71e8d690c1e8239664373b426328d4e247a674d
|
data/lib/eco/api/session.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
module Eco
|
2
2
|
module API
|
3
3
|
class Session < Common::Session::BaseSession
|
4
|
-
attr_reader :batch
|
5
|
-
attr_reader :
|
4
|
+
attr_reader :batch, :job_groups
|
5
|
+
attr_reader :usecases
|
6
6
|
attr_accessor :schema
|
7
7
|
|
8
8
|
def initialize(init = {})
|
@@ -18,7 +18,7 @@ module Eco
|
|
18
18
|
@task = Task.new(enviro)
|
19
19
|
@job_groups = JobGroups.new(enviro)
|
20
20
|
|
21
|
-
@
|
21
|
+
@usecases = Eco::API::UseCases::DefaultCases.new.merge(config.usecases)
|
22
22
|
|
23
23
|
self.schema = config.people.default_schema || schemas.first
|
24
24
|
@policy_groups = config.policy_groups
|
@@ -142,9 +142,9 @@ module Eco
|
|
142
142
|
|
143
143
|
def process_case(name, type: nil, **params)
|
144
144
|
args = { session: self }.merge(params)
|
145
|
-
fatal("Undefined usecase '#{name}' of type '#{type.to_s}'") if
|
145
|
+
fatal("Undefined usecase '#{name}' of type '#{type.to_s}'") if !usecases.defined?(name, type: type)
|
146
146
|
logger.debug("Session: going to process '#{name}' defined case")
|
147
|
-
|
147
|
+
usecases.case(name, type: type).launch(**args)
|
148
148
|
end
|
149
149
|
|
150
150
|
def job_group(name, order: :last)
|
@@ -23,6 +23,13 @@ module Eco
|
|
23
23
|
@jobs.key?(name)
|
24
24
|
end
|
25
25
|
|
26
|
+
def job(name, type: nil, sets: nil, usecase: nil, &block)
|
27
|
+
new(name, type: type, sets: sets, usecase: usecase, &block) unless exists?(name)
|
28
|
+
self[name].tap do |job|
|
29
|
+
block.call(job) if block
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
26
33
|
def new(name, type:, sets:, usecase: nil)
|
27
34
|
fatal "Can't create job named '#{name}' because it already exists." if exists?(name)
|
28
35
|
|
@@ -176,7 +176,7 @@ module Eco
|
|
176
176
|
private
|
177
177
|
|
178
178
|
def person_ref(entry)
|
179
|
-
"(id: '#{get_attr(entry, :id)}')'#{get_attr(entry, :name)}' ('#{get_attr(entry, :external_id)}': '#{get_attr(entry, :email)}')"
|
179
|
+
"(id: '#{get_attr(entry, :id)}') '#{get_attr(entry, :name)}' ('#{get_attr(entry, :external_id)}': '#{get_attr(entry, :email)}')"
|
180
180
|
end
|
181
181
|
|
182
182
|
def get_attr(entry, attr)
|
data/lib/eco/api/session/task.rb
CHANGED
@@ -15,6 +15,25 @@ module Eco
|
|
15
15
|
Eco::API::Organization::People.new(people)
|
16
16
|
end
|
17
17
|
|
18
|
+
def search(data, silent: true)
|
19
|
+
# to scope people to be fresh data got via api
|
20
|
+
session.logger.info("going to api get entries...")
|
21
|
+
status = session.batch.search(data, silent: silent)
|
22
|
+
people = Eco::API::Organization::People.new(status.people)
|
23
|
+
# get the supervisors
|
24
|
+
session.logger.info("going to api get supervisors...")
|
25
|
+
supers = data.each_with_object([]) do |entry, sup|
|
26
|
+
if entry.respond_to?(:supervisor_id) && !entry.supervisor_id.to_s.strip.empty?
|
27
|
+
spr = {"id" => entry.supervisor_id}
|
28
|
+
sup.push(spr) unless sup.include?(spr)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
status = session.batch.search(supers, silent: silent)
|
32
|
+
people = people.merge(status.people)
|
33
|
+
session.logger.info("could get #{people.length} people (out of #{data.length} entries)")
|
34
|
+
people
|
35
|
+
end
|
36
|
+
|
18
37
|
def load_people(filename = enviro.config.people.cache, modifier: [:newest, :api])
|
19
38
|
modifier = [modifier].flatten
|
20
39
|
people = []
|
@@ -7,15 +7,15 @@ module Eco
|
|
7
7
|
def process
|
8
8
|
@cases.define("delete", type: :transform) do |people, session, options, usecase|
|
9
9
|
delete = session.job_group("main").new("delete", usecase: usecase, type: :delete, sets: [:core, :details, :account])
|
10
|
-
people.each_with_index do |person|
|
10
|
+
people.each_with_index do |person, i|
|
11
11
|
delete.add(person)
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
15
|
-
@cases.define("delete", type: :sync) do |entries, people, session|
|
15
|
+
@cases.define("delete", type: :sync) do |entries, people, session, options, usecase|
|
16
16
|
delete = session.job_group("main").new("delete", usecase: usecase, type: :delete, sets: [:core, :details, :account])
|
17
17
|
strict_search = session.config.people.strict_search? && (!options[:search]&.key?(:strict) || options.dig(:search, :strict))
|
18
|
-
entries.each_with_index do |entry|
|
18
|
+
entries.each_with_index do |entry, i|
|
19
19
|
if person = people.find(entry, strict: strict_search)
|
20
20
|
delete.add(person)
|
21
21
|
else
|
@@ -41,7 +41,9 @@ module Eco
|
|
41
41
|
person.account&.send_invites = options[:send_invites] if options.key?(:send_invites)
|
42
42
|
end
|
43
43
|
|
44
|
-
|
44
|
+
unless options.dig(:exclude, :details)
|
45
|
+
person.details = entry.details
|
46
|
+
end
|
45
47
|
|
46
48
|
creation.add(person) if create
|
47
49
|
update.add(person) unless create
|
@@ -11,7 +11,6 @@ module Eco
|
|
11
11
|
users = people.users
|
12
12
|
session.logger.warn("There are no people with account amoung your #{people.length} people") unless users.length > 0
|
13
13
|
users.each do |person|
|
14
|
-
print "."
|
15
14
|
person.account.permissions_custom = session.new_preset(person)
|
16
15
|
job.add(person)
|
17
16
|
end
|
@@ -10,7 +10,7 @@ module Eco
|
|
10
10
|
transform: [:people, :session],
|
11
11
|
export: [:people, :session, :options]
|
12
12
|
}
|
13
|
-
|
13
|
+
|
14
14
|
class << self
|
15
15
|
def valid_type?(type)
|
16
16
|
TYPES.include?(type)
|
@@ -29,12 +29,18 @@ module Eco
|
|
29
29
|
raise "Undefined usecase type #{type}, when creating '#{name}'. Please, use any of #{TYPES}" unless self.class.valid_type?(type)
|
30
30
|
|
31
31
|
self.root = root
|
32
|
-
@
|
32
|
+
@callback = block
|
33
33
|
@name = name
|
34
34
|
@type = type
|
35
35
|
@times_launched = 0
|
36
36
|
end
|
37
37
|
|
38
|
+
def chainer
|
39
|
+
# TODO: root is a UseGroup that will not point to this new case.
|
40
|
+
# => Moreover, the name and type will be the same as self
|
41
|
+
Eco::API::UseCases::UseCaseChain.new(usecase: self, root: @root)
|
42
|
+
end
|
43
|
+
|
38
44
|
def root=(value)
|
39
45
|
raise "Root should be a UseGroup. Given: #{value}" if !value.is_a?(UseGroup)
|
40
46
|
@root = value
|
@@ -44,7 +50,7 @@ module Eco
|
|
44
50
|
@options = options
|
45
51
|
data = UseCaseIO.new(usecase: self, input: input, people: people, session: session, options: options)
|
46
52
|
|
47
|
-
data.output = @
|
53
|
+
data.output = @callback.call(data.params)
|
48
54
|
@times_launched += 1
|
49
55
|
|
50
56
|
data_model = {
|
@@ -54,6 +60,12 @@ module Eco
|
|
54
60
|
}
|
55
61
|
end
|
56
62
|
|
63
|
+
protected
|
64
|
+
|
65
|
+
def callback
|
66
|
+
@callback
|
67
|
+
end
|
68
|
+
|
57
69
|
end
|
58
70
|
|
59
71
|
end
|
@@ -5,7 +5,14 @@ module Eco
|
|
5
5
|
MAX_CHAINS = 70
|
6
6
|
@@num_chains = 0
|
7
7
|
|
8
|
-
def initialize(name, type
|
8
|
+
def initialize(name = nil, type: nil, root:, usecase: nil, &block)
|
9
|
+
if usecase
|
10
|
+
raise "Expected Eco::API::UseCases::UseCase. Given #{usecase.class}" if !usecase.is_a?(Eco::API::UseCases::UseCase)
|
11
|
+
type = usecase.type
|
12
|
+
name = usecase.name
|
13
|
+
block = usecase.callback unless block
|
14
|
+
end
|
15
|
+
|
9
16
|
super(name, type: type, root: root, &block)
|
10
17
|
@chains = []
|
11
18
|
@resolved_chains = nil
|
@@ -64,9 +71,9 @@ module Eco
|
|
64
71
|
|
65
72
|
use_group = use_group || @root
|
66
73
|
@resolved_chains = @chains.map do |usecase|
|
67
|
-
usecase = usecase.call(use_group)
|
74
|
+
usecase = usecase.call(use_group) if usecase.respond_to?(:call)
|
68
75
|
raise "A UseCase can only be chained with another UseCase" if usecase && !usecase.is_a?(UseCase)
|
69
|
-
usecase.resolved_chains(use_group)
|
76
|
+
usecase.resolved_chains(use_group) if usecase.respond_to?(:resolved_chains)
|
70
77
|
usecase
|
71
78
|
end
|
72
79
|
end
|
@@ -83,6 +90,7 @@ module Eco
|
|
83
90
|
# chained cases use same params as parent case (out of simplicity)
|
84
91
|
data_chain = dm[self][:io].chain(usecase: usecase)
|
85
92
|
keyed_data = data_chain.params(keyed: true)
|
93
|
+
keyed_data.delete(:usecase)
|
86
94
|
dm[self][:chains].merge(usecase.launch(keyed_data))
|
87
95
|
end
|
88
96
|
end
|
@@ -63,10 +63,10 @@ module Eco
|
|
63
63
|
def chain(usecase:)
|
64
64
|
raise "It should be a UseCase. Given: #{usecase}" if !usecase.is_a?(UseCase)
|
65
65
|
|
66
|
-
|
66
|
+
aux_io = self.class.new(input: input, people: people, session: session, options: options, usecase: usecase)
|
67
|
+
kargs = aux_io.params(keyed: true)
|
67
68
|
|
68
|
-
|
69
|
-
case usecase.type
|
69
|
+
case self.type
|
70
70
|
when :import
|
71
71
|
kargs[:input] = output
|
72
72
|
when :filter
|
@@ -74,7 +74,6 @@ module Eco
|
|
74
74
|
when :transform, :sync, :export
|
75
75
|
# no redirections => should it redirect the input?
|
76
76
|
end
|
77
|
-
|
78
77
|
self.class.new(kargs)
|
79
78
|
end
|
80
79
|
|
data/lib/eco/assets.rb
CHANGED
@@ -9,25 +9,29 @@ module Eco
|
|
9
9
|
@active_config = :default
|
10
10
|
end
|
11
11
|
|
12
|
-
def session(key: active_config)
|
13
|
-
|
14
|
-
sessions[key].tap do |session|
|
12
|
+
def session(key: active_config, update_active: true)
|
13
|
+
config(key: key, update_active: update_active).session.tap do |session|
|
15
14
|
yield(session) if block_given?
|
16
15
|
end
|
16
|
+
#sessions[key] ||= Eco::API::Session.new(config(key: key, update_active: update_active))
|
17
|
+
#sessions[key].tap do |session|
|
18
|
+
# yield(session) if block_given?
|
19
|
+
#end
|
17
20
|
end
|
18
21
|
|
19
|
-
def sessions
|
20
|
-
|
21
|
-
end
|
22
|
+
#def sessions
|
23
|
+
# @sessions ||= {}
|
24
|
+
#end
|
22
25
|
|
23
26
|
|
24
|
-
def config(key: active_config)
|
27
|
+
def config(key: active_config, update_active: true)
|
25
28
|
configs[:default] ||= Eco::API::Session::Config.new(key)
|
26
29
|
unless configs.key?(key)
|
27
|
-
@active_config = key
|
30
|
+
@active_config = key unless !update_active
|
28
31
|
configs[key] = configs[:default].clone(key)
|
29
32
|
end
|
30
33
|
configs[key].tap do |config|
|
34
|
+
config.active_api(key) if config.apis.defined?(key)
|
31
35
|
yield(config) if block_given?
|
32
36
|
end
|
33
37
|
end
|
data/lib/eco/version.rb
CHANGED