uc3-dmp-id 0.0.89 → 0.0.90

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
  SHA256:
3
- metadata.gz: 060e5579b7df045a30beb6431b0954b19e8542b42e1dacc933c9f0f025d521a8
4
- data.tar.gz: b784e85e55401583d782363b0b9d99f23839db175aac2e4ccfa498b5c98481c7
3
+ metadata.gz: 13c2a01e8e979f1cc3a4e9fe003cb8429d742c0e5b9d217d78e2d93bd36c276c
4
+ data.tar.gz: 5541be19755ac0850166d14fd4e02408d02db1e35caf83cddab527729c061a54
5
5
  SHA512:
6
- metadata.gz: 3bc49726eb20d814984f6bd3585510f7d45b5dd00479cc95933f6ade4e5ca2b77a191d18377b05af0d3303b3ba19f7cedb54a85abb11d77ea45a712305c0816b
7
- data.tar.gz: 1c6048b78d7b9c38b16433e93b3bc64df70ccfcecda64e6cc4f223ce7253bde6868b9d53834c0d3e7e17fc46cac1569acaf76a1588bf3c5a38fb2e76154f6d72
6
+ metadata.gz: 0d9e65edacb5d45bef33510718f50023fb14abf271859ca07910bd2b60941ebb7219e662efcead0a818141e7e2349f5e57c81e705162685dbe7cd6d736c60238
7
+ data.tar.gz: f5e2103aa8360d25a73ec5af6415a3087c73afdfc63c03983cbdf798e107e1bb086f0effc7c00ca3ddd71e4859e48832e03d441a2d092ff11ab4c0f0db053fcc
@@ -11,7 +11,7 @@ module Uc3DmpId
11
11
  MSG_UNABLE_TO_MINT = 'Unable to mint a unique DMP ID.'
12
12
 
13
13
  class << self
14
- def create(provenance:, json:, debug: false)
14
+ def create(provenance:, json:, logger: nil)
15
15
  raise CreatorError, MSG_NO_SHOULDER if ENV['DMP_ID_SHOULDER'].nil?
16
16
  raise CreatorError, MSG_NO_BASE_URL if ENV['DMP_ID_BASE_URL'].nil?
17
17
 
@@ -28,30 +28,29 @@ module Uc3DmpId
28
28
 
29
29
  # TODO: Swap this out with the Finder search once the Dynamo indexes are working
30
30
  # Try to find it first and Fail if found
31
- result = Finder.by_json(json: json, debug: debug)
31
+ result = Finder.by_json(json: json, logger: logger)
32
32
  raise CreatorError, Uc3DmpId::MSG_DMP_EXISTS if result.is_a?(Hash)
33
33
  # raise CreatorError, Uc3DmpId::MSG_DMP_EXISTS unless json['PK'].nil?
34
34
 
35
- client = Uc3DmpDynamo::Client.new(debug: debug)
36
- p_key = _preregister_dmp_id(client: client, provenance: provenance, json: json, debug: debug)
35
+ client = Uc3DmpDynamo::Client.new
36
+ p_key = _preregister_dmp_id(client: client, provenance: provenance, json: json, logger: logger)
37
37
  raise CreatorError, MSG_UNABLE_TO_MINT if p_key.nil?
38
38
 
39
39
  # Add the DMPHub specific attributes and then save
40
40
  annotated = Helper.annotate_dmp_json(provenance: provenance, p_key: p_key, json: json['dmp'])
41
- puts "CREATING DMP ID:" if debug
42
- puts annotated if debug
41
+ logger.info(message: "Creating DMP ID: #{p_key}") if logger.respond_to?(:debug)
43
42
 
44
43
  # Create the item
45
- resp = client.put_item(json: annotated, debug: debug)
44
+ resp = client.put_item(json: annotated, logger: logger)
46
45
  raise CreatorError, Uc3DmpId::MSG_DMP_NO_DMP_ID if resp.nil?
47
46
 
48
- _post_process(json: annotated, debug: debug)
47
+ _post_process(json: annotated, logger: logger)
49
48
  Helper.cleanse_dmp_json(json: JSON.parse({ dmp: annotated }.to_json))
50
49
  end
51
50
 
52
51
  private
53
52
 
54
- def _preregister_dmp_id(client:, provenance:, json:, debug: false)
53
+ def _preregister_dmp_id(client:, provenance:, json:, logger: nil)
55
54
  # Use the specified DMP ID if the provenance has permission
56
55
  existing = json.fetch('dmp', {}).fetch('dmp_id', {})
57
56
  seed_id = json.fetch('dmp', {})['dmproadmap_external_system_identifier']
@@ -72,7 +71,7 @@ module Uc3DmpId
72
71
  # Something went wrong and it was unable to identify a unique id
73
72
  raise CreatorError, MSG_UNABLE_TO_MINT if counter >= 10
74
73
 
75
- puts "Uc3DmpId::Creator._pregister_dmp_id - registering DMP ID: #{dmp_id}" if debug
74
+ logger.debug(message: "Preregistration DMP ID: #{dmp_id}") if logger.respond_to?(:debug)
76
75
  url = ENV['DMP_ID_BASE_URL'].gsub(%r{https?://}, '')
77
76
  "#{Helper::PK_DMP_PREFIX}#{url.end_with?('/') ? url : "#{url}/"}#{dmp_id}"
78
77
  end
@@ -81,14 +80,14 @@ module Uc3DmpId
81
80
  # Once the DMP has been created, we need to register it's DMP ID and download any
82
81
  # PDF if applicable
83
82
  # -------------------------------------------------------------------------
84
- def _post_process(json:, debug: false)
83
+ def _post_process(json:, logger: nil)
85
84
  return false unless json.is_a?(Hash)
86
85
 
87
86
  # We are creating, so this is always true
88
87
  json['dmphub_updater_is_provenance'] = true
89
88
  # Publish the change to the EventBridge
90
89
  publisher = Uc3DmpEventBridge::Publisher.new
91
- publisher.publish(source: 'DmpCreator', dmp: json, debug: debug)
90
+ publisher.publish(source: 'DmpCreator', dmp: json, logger: logger)
92
91
  true
93
92
  end
94
93
  end
@@ -9,15 +9,15 @@ module Uc3DmpId
9
9
  # Delete/Tombstone a record in the table
10
10
  # rubocop:disable Metrics/MethodLength, Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
11
11
  # -------------------------------------------------------------------------
12
- def tombstone(provenance:, p_key:, debug: false)
12
+ def tombstone(provenance:, p_key:, logger: nil)
13
13
  raise DeleterError, MSG_DMP_INVALID_DMP_ID unless p_key.is_a?(String) && !p_key.strip.empty?
14
14
 
15
15
  # Fail if the provenance is not defined
16
16
  raise DeleterError, MSG_DMP_FORBIDDEN unless provenance.is_a?(Hash) && !provenance['PK'].nil?
17
17
 
18
18
  # Fetch the latest version of the DMP ID by it's PK
19
- client = Uc3DmpDynamo::Client.new(debug: debug)
20
- dmp = Finder.by_pk(p_key: p_key, client: client, debug: debug)
19
+ client = Uc3DmpDynamo::Client.new
20
+ dmp = Finder.by_pk(p_key: p_key, client: client, logger: logger)
21
21
  raise DeleterError, MSG_DMP_NOT_FOUND unless dmp.is_a?(Hash) && !dmp['dmp'].nil?
22
22
 
23
23
  # Only allow this if the provenance is the owner of the DMP!
@@ -29,25 +29,25 @@ module Uc3DmpId
29
29
  dmp['dmp']['SK'] = Helper::DMP_TOMBSTONE_VERSION
30
30
  dmp['dmp']['dmphub_tombstoned_at'] = Time.now.iso8601
31
31
  dmp['dmp']['title'] = "OBSOLETE: #{dmp['title']}"
32
- puts "Tombstoning DMP #{p_key}" if debug
32
+ logger.info(message: "Tomstoning DMP ID: #{p_key}") if logger.respond_to?(:debug)
33
33
 
34
34
  # Create the Tombstone version
35
- resp = client.put_item(json: dmp, debug: debug)
35
+ resp = client.put_item(json: dmp, logger: logger)
36
36
  raise DeleterError, MSG_DMP_NO_TOMBSTONE if resp.nil?
37
37
 
38
38
  # Delete the Latest version
39
- resp = client.delete_item(p_key: p_key, s_key: Helper::SK_DMP_PREFIX, debug: debug)
39
+ resp = client.delete_item(p_key: p_key, s_key: Helper::SK_DMP_PREFIX, logger: logger)
40
40
 
41
41
  # TODO: We should do a check here to see if it was successful!
42
42
  puts resp.inspect
43
43
 
44
44
  # Notify EZID about the removal
45
- _post_process(json: dmp, debug: debug)
45
+ _post_process(json: dmp, logger: logger)
46
46
  # Return the tombstoned record
47
47
  Helper.cleanse_dmp_json(json: JSON.parse({ dmp: dmp }.to_json))
48
48
  rescue Aws::Errors::ServiceError => e
49
- Responder.log_error(source: source, message: e.message,
50
- details: ([@provenance] << e.backtrace).flatten)
49
+ puts "ERROR in Uc3DmpId::Deleter - #{e.message}"
50
+ puts e.backtrace
51
51
  { status: 500, error: Messages::MSG_SERVER_ERROR }
52
52
  end
53
53
  # rubocop:enable Metrics/MethodLength, Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
@@ -56,14 +56,14 @@ puts resp.inspect
56
56
 
57
57
  # Once the DMP has been tombstoned, we need to notify EZID
58
58
  # -------------------------------------------------------------------------
59
- def _post_process(json:, debug: false)
59
+ def _post_process(json:, logger: nil)
60
60
  return false unless json.is_a?(Hash)
61
61
 
62
62
  # Indicate whether or not the updater is the provenance system
63
63
  json['dmphub_updater_is_provenance'] = true
64
64
  # Publish the change to the EventBridge
65
65
  publisher = Uc3DmpEventBridge::Publisher.new
66
- publisher.publish(source: 'DmpDeleter', dmp: json, debug: debug)
66
+ publisher.publish(source: 'DmpDeleter', dmp: json, logger: logger)
67
67
  true
68
68
  end
69
69
  end
@@ -19,10 +19,10 @@ module Uc3DmpId
19
19
 
20
20
  class << self
21
21
  # TODO: Replace this with ElasticSearch
22
- def search_dmps(args:, debug: false)
23
- return _by_owner(owner_org: args['owner_orcid'], debug: debug) unless args['owner_orcid'].nil?
24
- return _by_owner_org(owner_org: args['owner_org_ror'], debug: debug) unless args['owner_org_ror'].nil?
25
- return _by_mod_day(day: args['modification_day'], debug: debug) unless args['modification_day'].nil?
22
+ def search_dmps(args:, logger: nil)
23
+ return _by_owner(owner_org: args['owner_orcid'], logger: logger) unless args['owner_orcid'].nil?
24
+ return _by_owner_org(owner_org: args['owner_org_ror'], logger: logger) unless args['owner_org_ror'].nil?
25
+ return _by_mod_day(day: args['modification_day'], logger: logger) unless args['modification_day'].nil?
26
26
 
27
27
  []
28
28
  end
@@ -30,63 +30,65 @@ module Uc3DmpId
30
30
 
31
31
  # Find a DMP based on the contents of the incoming JSON
32
32
  # -------------------------------------------------------------------------
33
- def by_json(json:, debug: false)
33
+ def by_json(json:, logger: nil)
34
34
  json = Helper.parse_json(json: json)&.fetch('dmp', {})
35
35
  raise FinderError, MSG_INVALID_ARGS if json.nil? || (json['PK'].nil? && json['dmp_id'].nil?)
36
36
 
37
37
  p_key = json['PK']
38
38
  # Translate the incoming :dmp_id into a PK
39
39
  p_key = Helper.dmp_id_to_pk(json: json.fetch('dmp_id', {})) if p_key.nil?
40
- client = client.nil? ? Uc3DmpDynamo::Client.new(debug: debug) : client
40
+ client = client.nil? ? Uc3DmpDynamo::Client.new : client
41
41
 
42
42
  # TODO: Re-enable this once we figure out Dynamo indexes
43
43
  # find_by_dmphub_provenance_id -> if no PK and no dmp_id result
44
- # return by_provenance_identifier(json: json, client: client, debug: debug) if p_key.nil?
44
+ # return by_provenance_identifier(json: json, client: client, logger: logger) if p_key.nil?
45
45
 
46
46
  # find_by_PK
47
- p_key.nil? ? nil : by_pk(p_key: p_key, s_key: json['SK'], client: client, debug: debug)
47
+ p_key.nil? ? nil : by_pk(p_key: p_key, s_key: json['SK'], client: client, logger: logger)
48
48
  end
49
49
 
50
50
  # Find the DMP by its PK and SK
51
51
  # -------------------------------------------------------------------------
52
- def by_pk(p_key:, s_key: Helper::DMP_LATEST_VERSION, client: nil, debug: false)
52
+ def by_pk(p_key:, s_key: Helper::DMP_LATEST_VERSION, client: nil, logger: nil)
53
53
  raise FinderError, MSG_MISSING_PK if p_key.nil?
54
54
 
55
55
  s_key = Helper::DMP_LATEST_VERSION if s_key.nil? || s_key.to_s.strip.empty?
56
- client = client.nil? ? Uc3DmpDynamo::Client.new(debug: debug) : client
56
+ client = client.nil? ? Uc3DmpDynamo::Client.new : client
57
57
  resp = client.get_item(
58
58
  key: {
59
59
  PK: Helper.append_pk_prefix(p_key: p_key),
60
60
  SK: s_key
61
- }
61
+ },
62
+ logger: logger
62
63
  )
63
64
  return resp unless resp.is_a?(Hash)
64
65
 
65
66
  dmp = resp['dmp'].nil? ? JSON.parse({ dmp: resp }.to_json) : resp
66
67
  return nil if dmp['dmp']['PK'].nil?
67
68
 
68
- dmp = Versioner.append_versions(p_key: dmp['dmp']['PK'], dmp: dmp, client: client, debug: debug)
69
+ dmp = Versioner.append_versions(p_key: dmp['dmp']['PK'], dmp: dmp, client: client, logger: logger)
69
70
  Helper.cleanse_dmp_json(json: dmp)
70
71
  end
71
72
 
72
73
  # Fetch just the PK to see if a record exists
73
74
  # -------------------------------------------------------------------------
74
- def exists?(p_key:, s_key: Helper::DMP_LATEST_VERSION, client: nil)
75
+ def exists?(p_key:, s_key: Helper::DMP_LATEST_VERSION, client: nil, logger: nil)
75
76
  raise FinderError, MSG_MISSING_PK if p_key.nil?
76
77
 
77
- client = client.nil? ? Uc3DmpDynamo::Client.new(debug: debug) : client
78
+ client = client.nil? ? Uc3DmpDynamo::Client.new : client
78
79
  client.pk_exists?(
79
80
  key: {
80
81
  PK: Helper.append_pk_prefix(p_key: p_key),
81
82
  SK: s_key
82
- }
83
+ },
84
+ logger: logger
83
85
  )
84
86
  end
85
87
 
86
88
  # Attempt to find the DMP item by the provenance system's identifier
87
89
  # -------------------------------------------------------------------------
88
90
  # rubocop:disable Metrics/AbcSize
89
- def by_provenance_identifier(json:, client: nil, debug: false)
91
+ def by_provenance_identifier(json:, client: nil, logger: nil)
90
92
  raise FinderError, MSG_MISSING_PROV_ID if json.nil? || json.fetch('dmp_id', {})['identifier'].nil?
91
93
 
92
94
  args = {
@@ -100,8 +102,8 @@ module Uc3DmpId
100
102
  filter_expression: 'SK = :version',
101
103
  expression_attribute_values: { ':version': Helper::DMP_LATEST_VERSION }
102
104
  }
103
- client = client.nil? ? Uc3DmpDynamo::Client.new(debug: debug) : client
104
- resp = client.query(args: args)
105
+ client = client.nil? ? Uc3DmpDynamo::Client.new : client
106
+ resp = client.query(args: args, logger: logger)
105
107
  return resp unless resp.is_a?(Hash)
106
108
 
107
109
  dmp = resp['dmp'].nil? ? JSON.parse({ dmp: resp }.to_json) : resp
@@ -115,7 +117,7 @@ module Uc3DmpId
115
117
  private
116
118
 
117
119
  # Fetch the DMP IDs for the specified owner's ORCID (the owner is the :dmphub_owner_id on the DMP ID record)
118
- def _by_owner(owner_id:, debug: false)
120
+ def _by_owner(owner_id:, logger: nil)
119
121
  regex = %r{^([0-9A-Z]{4}-){3}[0-9A-Z]{4}$}
120
122
  raise FinderError, MSG_INVALID_OWNER_ID if owner_id.nil? || (owner_id.to_s.downcase =~ regex).nil?
121
123
 
@@ -134,12 +136,12 @@ module Uc3DmpId
134
136
  expression_attribute_values: { ':version': Helper::DMP_LATEST_VERSION }
135
137
  }
136
138
  puts "Querying _by_owner with #{args}" if debug
137
- client = client.nil? ? Uc3DmpDynamo::Client.new(debug: debug) : client
138
- _process_search_response(response: client.query(args: args))
139
+ client = client.nil? ? Uc3DmpDynamo::Client.new : client
140
+ _process_search_response(response: client.query(args: args, logger: logger))
139
141
  end
140
142
 
141
143
  # Fetch the DMP IDs for the specified organization/institution (the org is the :dmphub_owner_org on the DMP ID record)
142
- def _by_owner_org(owner_org:, debug: false)
144
+ def _by_owner_org(owner_org:, logger: nil)
143
145
  regex = %r{^[a-zA-Z0-9]+$}
144
146
  raise FinderError, MSG_INVALID_OWNER_ID if owner_org.nil? ||(owner_org.to_s.downcase =~ regex).nil?
145
147
 
@@ -158,12 +160,12 @@ module Uc3DmpId
158
160
  expression_attribute_values: { ':version': Helper::DMP_LATEST_VERSION }
159
161
  }
160
162
  puts "Querying _by_owner_org with #{args}" if debug
161
- client = client.nil? ? Uc3DmpDynamo::Client.new(debug: debug) : client
162
- _process_search_response(response: client.query(args: args))
163
+ client = client.nil? ? Uc3DmpDynamo::Client.new : client
164
+ _process_search_response(response: client.query(args: args, logger: logger))
163
165
  end
164
166
 
165
167
  # Fetch the DMP IDs modified on the specified date (the date is the :dmphub_modification_day on the DMP ID record)
166
- def _by_mod_day(day:, debug: false)
168
+ def _by_mod_day(day:, logger: nil)
167
169
  regex = %r{^[0-9]{4}(-[0-9]{2}){2}}
168
170
  raise FinderError, MSG_INVALID_OWNER_ID if day.nil? || (day.to_s =~ regex).nil?
169
171
 
@@ -179,8 +181,8 @@ module Uc3DmpId
179
181
  expression_attribute_values: { ':version': Helper::DMP_LATEST_VERSION }
180
182
  }
181
183
  puts "Querying _by_mod_day with #{args}" if debug
182
- client = client.nil? ? Uc3DmpDynamo::Client.new(debug: debug) : client
183
- _process_search_response(response: client.query(args: args))
184
+ client = client.nil? ? Uc3DmpDynamo::Client.new : client
185
+ _process_search_response(response: client.query(args: args, logger: logger))
184
186
  end
185
187
 
186
188
 
@@ -9,7 +9,7 @@ module Uc3DmpId
9
9
  # --------------------------------------------------------------
10
10
  # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
11
11
  # rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
12
- def splice_for_owner(owner:, updater:, base:, mods:, debug: false)
12
+ def splice_for_owner(owner:, updater:, base:, mods:, logger: nil)
13
13
  return base if owner.nil? || updater.nil? || mods.nil?
14
14
  return mods if base.nil?
15
15
 
@@ -39,9 +39,7 @@ module Uc3DmpId
39
39
  spliced['dmproadmap_related_identifiers'] = mod_relateds
40
40
  spliced['dmproadmap_related_identifiers'] << other_relateds if other_relateds.any?
41
41
 
42
- puts 'JSON after splicing in changes from provenance' if debug
43
- puts spliced if debug
44
-
42
+ logger.debug(message: "JSON after splicing in changes from provenance", details: spliced) if logger.respond_to?(:debug)
45
43
  spliced
46
44
  end
47
45
  # rubocop:enable Metrics/AbcSize, Metrics/MethodLength
@@ -50,7 +48,7 @@ module Uc3DmpId
50
48
  # Splice changes from the other system onto the system of provenance and other system's changes
51
49
  # --------------------------------------------------------------
52
50
  # rubocop:disable Metrics/AbcSize
53
- def splice_for_others(owner:, updater:, base:, mods:, debug: false)
51
+ def splice_for_others(owner:, updater:, base:, mods:, logger: nil)
54
52
  return base if owner.nil? || updater.nil? || base.nil? || mods.nil?
55
53
 
56
54
  spliced = Helper.deep_copy_dmp(obj: base)
@@ -71,9 +69,7 @@ module Uc3DmpId
71
69
  updater: updater, base: base_relateds, mods: mod_relateds
72
70
  )
73
71
 
74
- puts 'JSON after splicing in changes from non-provenance' if debug
75
- puts spliced if debug
76
-
72
+ logger.debug(message: "JSON after splicing in changes from non-provenance", details: spliced) if logger.respond_to?(:debug)
77
73
  spliced
78
74
  end
79
75
  # rubocop:enable Metrics/AbcSize
@@ -9,7 +9,7 @@ module Uc3DmpId
9
9
  # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
10
10
  # rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
11
11
  # -------------------------------------------------------------------------
12
- def update(provenance:, p_key:, json: {}, debug: false)
12
+ def update(provenance:, p_key:, json: {}, logger: nil)
13
13
  raise UpdaterError, MSG_DMP_INVALID_DMP_ID unless p_key.is_a?(String) && !p_key.strip.empty?
14
14
 
15
15
  dmp = Helper.parse_json(json: json)
@@ -17,45 +17,44 @@ module Uc3DmpId
17
17
 
18
18
  # Add the DMPHub specific attributes
19
19
  annotated = Helper.annotate_dmp_json(provenance: provenance, p_key: p_key, json: dmp['dmp'])
20
-
21
- puts 'Annotated:'
22
- puts annotated
20
+ logger.debug(message: "Incoming JSON after annotation", details: annotated) if logger.respond_to?(:debug)
23
21
 
24
22
  # fetch the existing latest version of the DMP ID
25
- client = Uc3DmpDynamo::Client.new(debug: debug)
26
- existing = Finder.by_pk(p_key: p_key, client: client, debug: debug)
23
+ client = Uc3DmpDynamo::Client.new(logger: logger)
24
+ existing = Finder.by_pk(p_key: p_key, client: client, logger: logger)
25
+ logger.debug(message: "Existing latest record", details: existing) if logger.respond_to?(:debug)
26
+
27
27
  errs = _updateable?(provenance: provenance, p_key: p_key, json: annotated)
28
28
  raise UpdaterError, errs if errs.is_a?(Array) && errs.any?
29
29
  # Don't continue if nothing has changed!
30
30
  raise UpdaterError, MSG_NO_CHANGE if Helper.eql?(dmp_a: existing, dmp_b: dmp)
31
31
 
32
32
  # Generate a new version of the DMP. This involves versioning the current latest version
33
- new_version = Versioner.new_version(provenance: provenance, p_key: p_key, client: client, debug: debug,
33
+ new_version = Versioner.new_version(provenance: provenance, p_key: p_key, client: client, logger: logger,
34
34
  dmp: dmp, latest_version: existing)
35
-
36
- puts 'New version:'
37
- puts new_version
38
-
35
+ logger.debug(message: "New version", details: new_version) if logger.respond_to?(:debug)
39
36
  raise UpdaterError, MSG_DMP_UNABLE_TO_VERSION if new_version.nil?
40
37
 
41
38
  # Save the changes as the new latest version
42
- resp = client.put_item(json: new_version, debug: debug)
39
+ resp = client.put_item(json: new_version, logger: logger)
43
40
  raise UpdaterError, MSG_DMP_UNABLE_TO_VERSION if resp.nil?
44
41
 
45
42
  # Send the updates to EZID, notify the provenance and download the PDF if applicable
46
- _post_process(json: dmp, debug: debug)
43
+ _post_process(json: dmp, logger: logger)
47
44
  # Return the new version record
45
+ logger.info(message: "Updated DMP ID: #{p_key}") if logger.respond_to?(:debug)
48
46
  Helper.cleanse_dmp_json(json: JSON.parse({ dmp: new_version }.to_json))
49
47
  end
50
48
  # rubocop:enable Metrics/AbcSize, Metrics/MethodLength
51
49
  # rubocop:enable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
52
50
 
53
- def attach_narrative(provenance:, p_key:, url:, debug: false)
51
+ def attach_narrative(provenance:, p_key:, url:, logger: nil)
54
52
  raise UpdaterError, MSG_DMP_INVALID_DMP_ID unless p_key.is_a?(String) && !p_key.strip.empty?
55
53
 
56
54
  # fetch the existing latest version of the DMP ID
57
- client = Uc3DmpDynamo::Client.new(debug: debug)
58
- dmp = Finder.by_pk(p_key: p_key, client: client, debug: debug)
55
+ client = Uc3DmpDynamo::Client.new(logger: logger)
56
+ dmp = Finder.by_pk(p_key: p_key, client: client, logger: logger)
57
+ logger.info(message: "Existing latest record", details: dmp) if logger.respond_to?(:debug)
59
58
 
60
59
  errs = _updateable?(provenance: provenance, p_key: p_key, json: dmp['dmp'])
61
60
  raise UpdaterError, errs if errs.is_a?(Array) && errs.any?
@@ -68,9 +67,10 @@ puts new_version
68
67
  }
69
68
 
70
69
  # Save the changes without creating a new version!
71
- resp = client.put_item(json: annotated, debug: debug)
70
+ resp = client.put_item(json: annotated, logger: logger)
72
71
  raise UpdaterError, MSG_DMP_UNABLE_TO_VERSION if resp.nil?
73
72
 
73
+ logger.info(message: "Added DMP ID narrative for PK: #{p_key}, Narrative: #{url}") if logger.respond_to?(:debug)
74
74
  true
75
75
  end
76
76
 
@@ -90,14 +90,14 @@ puts new_version
90
90
 
91
91
  # Once the DMP has been updated, we need to register it's DMP ID and download any PDF if applicable
92
92
  # -------------------------------------------------------------------------
93
- def _post_process(json:, debug: false)
93
+ def _post_process(json:, logger: nil)
94
94
  return false unless json.is_a?(Hash)
95
95
 
96
96
  # Indicate whether or not the updater is the provenance system
97
97
  json['dmphub_updater_is_provenance'] = @provenance['PK'] == json['dmphub_provenance_id']
98
98
  # Publish the change to the EventBridge
99
99
  publisher = Uc3DmpEventBridge::Publisher.new
100
- publisher.publish(source: 'DmpUpdater', dmp: json, debug: debug)
100
+ publisher.publish(source: 'DmpUpdater', dmp: json, logger: logger)
101
101
  true
102
102
  end
103
103
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Uc3DmpId
4
- VERSION = '0.0.89'
4
+ VERSION = '0.0.90'
5
5
  end
@@ -6,11 +6,13 @@ module Uc3DmpId
6
6
  class VersionerError < StandardError; end
7
7
 
8
8
  class Versioner
9
+ SOURCE = 'Uc3DmpId::Versioner'
10
+
9
11
  class << self
10
12
 
11
13
  # Find the DMP ID's versions
12
14
  # -------------------------------------------------------------------------
13
- def get_versions(p_key:, client: nil, debug: false)
15
+ def get_versions(p_key:, client: nil, logger: nil)
14
16
  return [] unless p_key.is_a?(String) && !p_key.strip.empty?
15
17
 
16
18
  args = {
@@ -20,8 +22,8 @@ module Uc3DmpId
20
22
  projection_expression: 'modified',
21
23
  scan_index_forward: false
22
24
  }
23
- client = client.nil? ? Uc3DmpDynamo::Client.new(debug: debug) : client
24
- client.query(args: args, debug: debug)
25
+ client = client.nil? ? Uc3DmpDynamo::Client.new : client
26
+ client.query(args: args, logger: logger)
25
27
  end
26
28
 
27
29
  # Create a new version of the DMP. This involves:
@@ -29,10 +31,10 @@ module Uc3DmpId
29
31
  # - Saving the new `VERSION=yyyy-mm-ddThh:mm:ss+zz:zz` item
30
32
  # - Splicing in the current changes onto the existing `VERSION#latest` item
31
33
  # - Returning the spliced `VERSION#latest` back to this method
32
- def new_version(provenance:, p_key:, client: nil, dmp:, latest_version: {}, debug: false)
34
+ def new_version(provenance:, p_key:, client: nil, dmp:, latest_version: {}, logger: nil)
33
35
  return nil unless p_key.is_a?(String) && !p_key.strip.empty? && _versionable?(dmp: dmp)
34
36
 
35
- client = Uc3DmpDynamo::Client.new(debug: debug) if client.nil?
37
+ client = Uc3DmpDynamo::Client.new(logger: logger) if client.nil?
36
38
  latest_version = Finder.by_p_key(client: client, p_key: p_key) unless latest_version.is_a?(Hash) &&
37
39
  !latest_version['PK'].nil?
38
40
 
@@ -44,11 +46,9 @@ module Uc3DmpId
44
46
  prior = _generate_version(client: client, latest_version: latest, owner: owner, updater: updater)
45
47
  return nil if prior.nil?
46
48
 
47
- args = { owner: owner, updater: updater, base: prior, mods: dmp, debug: debug }
48
- puts 'DMP ID update prior to splicing changes' if debug
49
- puts dmp if debug
49
+ args = { owner: owner, updater: updater, base: prior, mods: dmp, logger: logger }
50
+ logger.debug(message: "#{SOURCE} record prior to splicing", details: dmp) if logger.respond_to?(:debug)
50
51
 
51
- args = { owner: owner, updater: updater, base: prior, mods: dmp, debug: debug }
52
52
  # If the system of provenance is making the change then just use the
53
53
  # new version as the base and then splice in any mods made by others
54
54
  # args = args.merge({ base: new_version, mods: original_version })
@@ -56,16 +56,18 @@ module Uc3DmpId
56
56
  # Otherwise use the original version as the base and then update the
57
57
  # metadata owned by the updater system
58
58
  new_version = Splicer.splice_for_others(args) if new_version.nil?
59
+
60
+ logger.debug(message: "#{SOURCE} record after splicing", details: new_version) if logger.respond_to?(:debug)
59
61
  new_version
60
62
  end
61
63
 
62
64
  # Build the :dmphub_versions array and attach it to the DMP JSON
63
65
  # rubocop:disable Metrics/AbcSize
64
- def append_versions(p_key:, dmp:, client: nil, debug: false)
66
+ def append_versions(p_key:, dmp:, client: nil, logger: nil)
65
67
  json = Helper.parse_json(json: dmp)
66
68
  return json unless p_key.is_a?(String) && !p_key.strip.empty? && json.is_a?(Hash) && !json['dmp'].nil?
67
69
 
68
- results = get_versions(p_key: p_key, client: client, debug: debug)
70
+ results = get_versions(p_key: p_key, client: client, logger: logger)
69
71
  return json unless results.length > 1
70
72
 
71
73
  versions = results.map do |ver|
@@ -92,28 +94,26 @@ module Uc3DmpId
92
94
 
93
95
  # Generate a version
94
96
  # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
95
- def _generate_version(client:, latest_version:, owner:, updater:, debug: false)
97
+ def _generate_version(client:, latest_version:, owner:, updater:, logger: nil)
96
98
  # Only create a version if the Updater is not the Owner OR the changes have happened on a different day
97
99
  mod_time = Time.parse(latest_version.fetch('dmphub_updated_at', Time.now.iso8601))
98
100
  now = Time.now
99
-
100
- puts "_generate_version -- mod_time: #{mod_time} --> !(now - mod_time).is_a?(Float)"
101
-
101
+ logger.debug(message: "#{SOURCE} generating version - mod_time: #{mod_time}") if logger.respond_to?(:debug)
102
102
  return latest_version if mod_time.nil? || !(now - mod_time).is_a?(Float)
103
103
 
104
104
  same_hour = (now - mod_time).round <= 3600
105
-
106
- puts "_generate_version -- owner is updater? #{owner == updater}, same hour? #{same_hour}"
107
-
105
+ logger.debug(message: "#{SOURCE} same owner and updater? #{owner == updater}") if logger.respond_to?(:debug)
106
+ logger.debug(message: "#{SOURCE} already updated within the past hour? #{same_hour}") if logger.respond_to?(:debug)
108
107
  return latest_version if owner != updater || (owner == updater && same_hour)
109
108
 
110
109
  latest_version['SK'] = "#{Helper::SK_DMP_PREFIX}#{latest_version['dmphub_updated_at'] || Time.now.iso8601}"
111
-
112
110
  # Create the prior version record
113
- resp = client.put_item(json: latest_version, debug: debug)
111
+ resp = client.put_item(json: latest_version, logger: logger)
114
112
  return nil if resp.nil?
115
113
 
116
114
  puts "Created new version #{latest_version['PK']} - #{latest_version['SK']}" if debug
115
+ msg = "#{SOURCE} created version PK: #{latest_version['PK']} SK: #{latest_version['SK']}"
116
+ logger.info(message: msg, details: latest_version) if logger.respond_to?(:debug)
117
117
  latest_version
118
118
  end
119
119
  # rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: uc3-dmp-id
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.89
4
+ version: 0.0.90
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brian Riley
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-07-06 00:00:00.000000000 Z
11
+ date: 2023-07-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json