dmao-generic-ingesters 0.5.0 → 0.6.0
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/dmao/ingesters/errors/ingest_project_error.rb +17 -0
- data/lib/dmao/ingesters/generic/ingester.rb +33 -13
- data/lib/dmao/ingesters/generic/organisation_ingester.rb +5 -38
- data/lib/dmao/ingesters/generic/projects_ingester.rb +23 -0
- data/lib/dmao/ingesters/generic/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9638acab4b7d6a95530831b63d34343c12c4be18
|
4
|
+
data.tar.gz: cc6cdc638125bb133ea3f0df7f8576acdf6f6b87
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5d94d17e706c4e19f20247b0d89c4a7406ae08fb31cdc45af2eb692db922e0bff151155449199be49620a1d371ae02b312c9cdf56817adf9eba3c1a6841a4ef5
|
7
|
+
data.tar.gz: 96941dcc369fa5830d532ddb3f4881e4e8fbc476734bc6e97e32fcbba474ceacd99d03a13fa72df82600ec734145b5fd5ecd435a869231872d21625ccb390e5f
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'dmao/ingesters/errors/ingest_entity_error'
|
2
|
+
|
3
|
+
module DMAO
|
4
|
+
module Ingesters
|
5
|
+
module Errors
|
6
|
+
|
7
|
+
class IngestProjectError < IngestEntityError
|
8
|
+
|
9
|
+
def initialize(msg="Error ingesting project.")
|
10
|
+
super(msg)
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -14,6 +14,7 @@ module DMAO
|
|
14
14
|
ENTITY_ERROR = nil
|
15
15
|
INVALID_ENTITY_ERROR = nil
|
16
16
|
ENTITY_ERROR_MESSAGE = nil
|
17
|
+
ERROR_HANDLING = nil
|
17
18
|
|
18
19
|
def initialize(api_url=nil, api_token=nil, institution_id=nil)
|
19
20
|
|
@@ -34,13 +35,19 @@ module DMAO
|
|
34
35
|
self.class.send(:define_method, add_method_name, Proc.new {|attributes| add_entity(attributes)}) unless self.respond_to?(add_method_name, include_all: true)
|
35
36
|
self.class.send(:define_method, update_method_name, Proc.new {|id, attributes| update_entity(id, attributes)}) unless self.respond_to?(update_method_name, include_all: true)
|
36
37
|
self.class.send(:define_method, ingest_method_name, Proc.new {|attributes={}| ingest_entity(attributes)}) unless self.respond_to?(ingest_method_name, include_all: true)
|
37
|
-
|
38
38
|
end
|
39
39
|
|
40
40
|
def self.entity_name
|
41
41
|
self::ENTITY.to_s.split('::')[-1].gsub(/[A-Z]/, " \\0").downcase.strip
|
42
42
|
end
|
43
43
|
|
44
|
+
def generic_errors
|
45
|
+
{
|
46
|
+
"DMAO::API::Errors::InstitutionNotFound" => "Institution not found, cannot ingest #{self.class.entity_name} to non-existent institution",
|
47
|
+
"DMAO::API::Errors::EntityNotFound" => "#{self.class.entity_name.capitalize} not found, cannot update #{self.class.entity_name} that does not exist"
|
48
|
+
}
|
49
|
+
end
|
50
|
+
|
44
51
|
def ingest
|
45
52
|
raise DMAO::Ingesters::Errors::GenericIngester.new("Calling ingest on generic ingester is not allowed.")
|
46
53
|
end
|
@@ -86,27 +93,40 @@ module DMAO
|
|
86
93
|
|
87
94
|
private
|
88
95
|
|
89
|
-
def
|
96
|
+
def perform_entity_action action, arguments
|
97
|
+
|
98
|
+
errors_to_handle = self.class::ERROR_HANDLING.nil? ? generic_errors : self.class::ERROR_HANDLING
|
90
99
|
|
91
100
|
begin
|
92
|
-
self.class::ENTITY.
|
93
|
-
rescue
|
94
|
-
|
95
|
-
|
101
|
+
self.class::ENTITY.send(action, *arguments)
|
102
|
+
rescue ingest_errors(errors_to_handle) => e
|
103
|
+
error_message = errors_to_handle[e.class.to_s].nil? ? errors_to_handle[(e.class.ancestors.map {|a| a.to_s} & errors_to_handle.keys).first] : errors_to_handle[e.class.to_s]
|
104
|
+
raise self.class::ENTITY_ERROR.new(error_message)
|
105
|
+
rescue self.class::ENTITY::INVALID_ENTITY_CLASS => e
|
96
106
|
parse_unprocessable_errors(e.errors)
|
97
107
|
end
|
98
108
|
|
99
109
|
end
|
100
110
|
|
111
|
+
def ingest_errors(errors={})
|
112
|
+
Class.new do
|
113
|
+
def self.===(other)
|
114
|
+
!(other.class.ancestors.map {|a| a.to_s} & @errors.keys).empty?
|
115
|
+
end
|
116
|
+
end.tap do |c|
|
117
|
+
c.instance_variable_set(:@errors, errors)
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
def add_entity attributes={}
|
122
|
+
|
123
|
+
perform_entity_action "create", [attributes]
|
124
|
+
|
125
|
+
end
|
126
|
+
|
101
127
|
def update_entity entity_id, attributes={}
|
102
128
|
|
103
|
-
|
104
|
-
self.class::ENTITY.update entity_id, attributes
|
105
|
-
rescue DMAO::API::Errors::EntityNotFound
|
106
|
-
raise self.class::ENTITY_ERROR.new("#{self.class.entity_name.capitalize} not found, cannot update #{self.class.entity_name} that does not exist")
|
107
|
-
rescue self.class::INVALID_ENTITY_ERROR => e
|
108
|
-
parse_unprocessable_errors(e.errors)
|
109
|
-
end
|
129
|
+
perform_entity_action "update", [entity_id, attributes]
|
110
130
|
|
111
131
|
end
|
112
132
|
|
@@ -15,6 +15,11 @@ module DMAO
|
|
15
15
|
ENTITY = DMAO::API::OrganisationUnit
|
16
16
|
ENTITY_ERROR = DMAO::Ingesters::Errors::IngestOrganisationUnitError
|
17
17
|
ENTITY_ERROR_MESSAGE = "Invalid organisation unit details"
|
18
|
+
ERROR_HANDLING = {
|
19
|
+
"DMAO::API::Errors::OrganisationUnitNotFound" => "Organisation unit not found, cannot update organisation unit that does not exist",
|
20
|
+
"DMAO::API::Errors::InstitutionNotFound" => "Institution not found, cannot ingest organisation unit to non-existent institution",
|
21
|
+
"DMAO::API::Errors::InvalidParentId" => "Parent ID not found in DMA Online, cannot link organisation unit to non-existent parent"
|
22
|
+
}
|
18
23
|
|
19
24
|
def link_child_to_parent child_system_uuid, parent_system_uuid
|
20
25
|
|
@@ -29,46 +34,8 @@ module DMAO
|
|
29
34
|
|
30
35
|
end
|
31
36
|
|
32
|
-
def add_organisation_unit attributes
|
33
|
-
|
34
|
-
begin
|
35
|
-
DMAO::API::OrganisationUnit.create attributes
|
36
|
-
rescue DMAO::API::Errors::InstitutionNotFound
|
37
|
-
raise DMAO::Ingesters::Errors::IngestOrganisationUnitError.new("Institution not found, cannot ingest organisation unit to non-existent institution")
|
38
|
-
rescue DMAO::API::Errors::InvalidParentId
|
39
|
-
raise DMAO::Ingesters::Errors::IngestOrganisationUnitError.new("Parent ID not found in DMA Online, cannot link organisation unit to non-existent parent")
|
40
|
-
rescue DMAO::API::Errors::InvalidOrganisationUnit => e
|
41
|
-
parse_unprocessable_errors(e.errors)
|
42
|
-
end
|
43
|
-
|
44
|
-
end
|
45
|
-
|
46
|
-
def update_organisation_unit id, attributes
|
47
|
-
|
48
|
-
begin
|
49
|
-
|
50
|
-
DMAO::API::OrganisationUnit.update id, attributes
|
51
|
-
|
52
|
-
rescue DMAO::API::Errors::OrganisationUnitNotFound
|
53
|
-
raise DMAO::Ingesters::Errors::IngestOrganisationUnitError.new("Organisation unit not found, cannot update organisation unit that does not exist")
|
54
|
-
rescue DMAO::API::Errors::InvalidParentId
|
55
|
-
raise DMAO::Ingesters::Errors::IngestOrganisationUnitError.new("Parent ID not found in DMA Online, cannot link organisation unit to non-existent parent")
|
56
|
-
rescue DMAO::API::Errors::InvalidOrganisationUnit => e
|
57
|
-
parse_unprocessable_errors(e.errors)
|
58
|
-
end
|
59
|
-
|
60
|
-
end
|
61
|
-
|
62
37
|
protected
|
63
38
|
|
64
|
-
def add_entity attributes
|
65
|
-
add_organisation_unit attributes
|
66
|
-
end
|
67
|
-
|
68
|
-
def update_entity id, attributes
|
69
|
-
update_organisation_unit id, attributes
|
70
|
-
end
|
71
|
-
|
72
39
|
def find_unit_or_raise_link_error unit_system_uuid, error_message
|
73
40
|
|
74
41
|
begin
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'dmao/ingesters/generic/ingester'
|
2
|
+
require 'dmao/ingesters/errors/ingest_project_error'
|
3
|
+
|
4
|
+
module DMAO
|
5
|
+
module Ingesters
|
6
|
+
module Generic
|
7
|
+
|
8
|
+
class ProjectsIngester < Ingester
|
9
|
+
|
10
|
+
ENTITY = DMAO::API::Project
|
11
|
+
ENTITY_ERROR = DMAO::Ingesters::Errors::IngestProjectError
|
12
|
+
ENTITY_ERROR_MESSAGE = "Invalid project details"
|
13
|
+
ERROR_HANDLING = {
|
14
|
+
"DMAO::API::Errors::ProjectNotFound" => "Project not found, cannot update project that does not exist",
|
15
|
+
"DMAO::API::Errors::InstitutionNotFound" => "Institution not found, cannot ingest project to non-existent institution",
|
16
|
+
"DMAO::API::Errors::InvalidOrganisationUnitID" => "Organisation unit not found, cannot ingest project linked to non-existent organisation unit"
|
17
|
+
}
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dmao-generic-ingesters
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stephen Robinson
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-04-
|
11
|
+
date: 2017-04-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dmao_api
|
@@ -129,12 +129,14 @@ files:
|
|
129
129
|
- lib/dmao/ingesters/errors/ingest_funder_error.rb
|
130
130
|
- lib/dmao/ingesters/errors/ingest_organisation_unit_error.rb
|
131
131
|
- lib/dmao/ingesters/errors/ingest_person_error.rb
|
132
|
+
- lib/dmao/ingesters/errors/ingest_project_error.rb
|
132
133
|
- lib/dmao/ingesters/errors/link_organisation_unit_error.rb
|
133
134
|
- lib/dmao/ingesters/generic.rb
|
134
135
|
- lib/dmao/ingesters/generic/funders_ingester.rb
|
135
136
|
- lib/dmao/ingesters/generic/ingester.rb
|
136
137
|
- lib/dmao/ingesters/generic/organisation_ingester.rb
|
137
138
|
- lib/dmao/ingesters/generic/people_ingester.rb
|
139
|
+
- lib/dmao/ingesters/generic/projects_ingester.rb
|
138
140
|
- lib/dmao/ingesters/generic/version.rb
|
139
141
|
homepage: https://github.com/lulibrary/DMAO-Generic-Ingesters
|
140
142
|
licenses:
|