uc3-dmp-api-core 0.0.21 → 0.0.23
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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bc4c08b495c72961cf18ad8ecec8502b20a0154bde884fca9f55ec16fb944ea1
|
4
|
+
data.tar.gz: 5a5d3d363cb375c11f7548d1339d6b44bdc26fd92099b0a2c5021b3fa0bab5ee
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6a3cba6f5e355f84d03a230201f19cd2e29a3d905da40ae99fe6b57d2329bdbc9581a220b47a0c7de669ae379c57bc82a2098ff30de7006515fe492f671be0c8
|
7
|
+
data.tar.gz: 719f0f56edff2b151a09570db7e50e390622802d9c2e309f70aa7f6f320700b6516f6b6934e31c87af6300cf2a58d0cebb7764713be5c89f182b19f2cbc31003
|
@@ -12,7 +12,7 @@ module Uc3DmpApiCore
|
|
12
12
|
Aws::SNS::Client.new.publish(
|
13
13
|
topic_arn: ENV.fetch('SNS_FATAL_ERROR_TOPIC', nil),
|
14
14
|
subject: "DMPTool - fatal error in - #{source}",
|
15
|
-
message: _build_admin_message(source
|
15
|
+
message: _build_admin_message(source:, details:, event:)
|
16
16
|
)
|
17
17
|
true
|
18
18
|
rescue Aws::Errors::ServiceError => e
|
@@ -12,7 +12,7 @@ module Uc3DmpApiCore
|
|
12
12
|
def paginate(results:, params: {})
|
13
13
|
return results unless results.is_a?(Array) && results.any? && params.is_a?(Hash)
|
14
14
|
|
15
|
-
current = _current_page(item_count: results.length, params:
|
15
|
+
current = _current_page(item_count: results.length, params:)
|
16
16
|
# Just return as is if there is only one page
|
17
17
|
return results if current[:total_pages] == 1 || current[:per_page] >= results.length
|
18
18
|
|
@@ -25,7 +25,7 @@ module Uc3DmpApiCore
|
|
25
25
|
# Construct the pagination meta information that will be included in the response
|
26
26
|
# rubocop:disable Metrics/AbcSize
|
27
27
|
def pagination_meta(url:, item_count: 0, params: {})
|
28
|
-
prms = _current_page(item_count
|
28
|
+
prms = _current_page(item_count:, params:)
|
29
29
|
|
30
30
|
hash = { page: prms[:page], per_page: prms[:per_page], total_items: item_count }
|
31
31
|
return hash if prms[:total_pages] == 1 || item_count <= prms[:per_page]
|
@@ -34,10 +34,10 @@ module Uc3DmpApiCore
|
|
34
34
|
nxt = prms[:page] + 1
|
35
35
|
last = prms[:total_pages]
|
36
36
|
|
37
|
-
hash[:first] = _build_link(url
|
38
|
-
hash[:prev] = _build_link(url
|
39
|
-
hash[:next] = _build_link(url
|
40
|
-
hash[:last] = _build_link(url
|
37
|
+
hash[:first] = _build_link(url:, target_page: 1, per_page: prms[:per_page]) if prms[:page] > 1
|
38
|
+
hash[:prev] = _build_link(url:, target_page: prv, per_page: prms[:per_page]) if prms[:page] > 1
|
39
|
+
hash[:next] = _build_link(url:, target_page: nxt, per_page: prms[:per_page]) if prms[:page] < last
|
40
|
+
hash[:last] = _build_link(url:, target_page: last, per_page: prms[:per_page]) if prms[:page] < last
|
41
41
|
hash.compact
|
42
42
|
end
|
43
43
|
# rubocop:enable Metrics/AbcSize
|
@@ -45,24 +45,26 @@ module Uc3DmpApiCore
|
|
45
45
|
private
|
46
46
|
|
47
47
|
# Fetch the current :page and :per_page from the params or use the defaults
|
48
|
+
# rubocop:disable Metrics/AbcSize
|
48
49
|
def _current_page(item_count: 0, params: {})
|
49
50
|
page = params.fetch('page', DEFAULT_PAGE).to_i
|
50
51
|
page = DEFAULT_PAGE if page.nil? || page.to_i <= 1
|
51
52
|
per_page = params.fetch('per_page', DEFAULT_PER_PAGE).to_i
|
52
53
|
per_page = DEFAULT_PER_PAGE if per_page.nil? || per_page.to_i >= MAXIMUM_PER_PAGE || per_page.to_i < 1
|
53
54
|
|
54
|
-
total_pages = _page_count(total: item_count, per_page:
|
55
|
+
total_pages = _page_count(total: item_count, per_page:)
|
55
56
|
page = total_pages if page > total_pages
|
56
57
|
|
57
58
|
{ page: page.to_i, per_page: per_page.to_i, total_pages: total_pages.to_i }
|
58
59
|
end
|
60
|
+
# rubocop:enable Metrics/AbcSize
|
59
61
|
|
60
62
|
# Generate a pagination link
|
61
63
|
# --------------------------------------------------------------------------------
|
62
64
|
def _build_link(url:, target_page:, per_page: DEFAULT_PER_PAGE)
|
63
65
|
return nil if url.nil? || target_page.nil?
|
64
66
|
|
65
|
-
link = _url_without_pagination(url:
|
67
|
+
link = _url_without_pagination(url:)
|
66
68
|
return nil if link.nil?
|
67
69
|
|
68
70
|
link += '?' unless link.include?('?')
|
@@ -24,10 +24,11 @@ module Uc3DmpApiCore
|
|
24
24
|
#
|
25
25
|
# Returns a hash that is a valid Lambda API response
|
26
26
|
# --------------------------------------------------------------------------------
|
27
|
-
# rubocop:disable Metrics/AbcSize
|
27
|
+
# rubocop:disable Metrics/AbcSize, Metrics/MethodLength
|
28
|
+
# rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
28
29
|
def respond(status: DEFAULT_STATUS_CODE, logger: nil, items: [], errors: [], **args)
|
29
30
|
url = _url_from_event(event: args[:event]) || SsmReader.get_ssm_value(key: 'api_base_url')
|
30
|
-
return _standard_error(url:
|
31
|
+
return _standard_error(url:) if url.nil?
|
31
32
|
|
32
33
|
args = JSON.parse(args.to_json)
|
33
34
|
errors = [errors] unless errors.nil? || errors.is_a?(Array)
|
@@ -39,9 +40,9 @@ module Uc3DmpApiCore
|
|
39
40
|
requested_at: Time.now.strftime(TIMESTAMP_FORMAT),
|
40
41
|
total_items: item_count,
|
41
42
|
items: items.is_a?(Array) ? Paginator.paginate(params: args, results: items) : [],
|
42
|
-
errors:
|
43
|
+
errors:
|
43
44
|
}
|
44
|
-
body = body.merge(Paginator.pagination_meta(url
|
45
|
+
body = body.merge(Paginator.pagination_meta(url:, item_count:, params: args))
|
45
46
|
|
46
47
|
# If this is a server error, then notify the administrator!
|
47
48
|
if status.to_s[0] == '5' && !logger.nil?
|
@@ -49,12 +50,13 @@ module Uc3DmpApiCore
|
|
49
50
|
Notifier.notify_administrator(source: logger.source, details: body, event: logger.event)
|
50
51
|
end
|
51
52
|
|
52
|
-
{ statusCode: status.to_i, body: body.compact.to_json, headers:
|
53
|
+
{ statusCode: status.to_i, body: body.compact.to_json, headers: }
|
53
54
|
rescue StandardError => e
|
54
|
-
logger
|
55
|
-
_standard_error(url:
|
55
|
+
logger&.error(message: e.message, details: e.backtrace)
|
56
|
+
_standard_error(url:)
|
56
57
|
end
|
57
|
-
# rubocop:enable Metrics/AbcSize
|
58
|
+
# rubocop:enable Metrics/AbcSize, Metrics/MethodLength
|
59
|
+
# rubocop:enable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
58
60
|
|
59
61
|
private
|
60
62
|
|
@@ -67,7 +69,7 @@ module Uc3DmpApiCore
|
|
67
69
|
total_items: 0,
|
68
70
|
errors: [message]
|
69
71
|
}
|
70
|
-
{ statusCode: DEFAULT_STATUS_CODE, body: body.compact.to_json, headers:
|
72
|
+
{ statusCode: DEFAULT_STATUS_CODE, body: body.compact.to_json, headers: }
|
71
73
|
end
|
72
74
|
|
73
75
|
# Figure out the requested URL from the Lambda event hash
|
@@ -84,7 +86,7 @@ module Uc3DmpApiCore
|
|
84
86
|
def headers
|
85
87
|
return {} if ENV['CORS_ORIGIN'].nil?
|
86
88
|
|
87
|
-
{ 'access-control-allow-origin': ENV
|
89
|
+
{ 'access-control-allow-origin': ENV.fetch('CORS_ORIGIN', nil) }
|
88
90
|
end
|
89
91
|
end
|
90
92
|
end
|
@@ -22,16 +22,16 @@ module Uc3DmpApiCore
|
|
22
22
|
# rubocop:disable Metrics/AbcSize
|
23
23
|
def get_ssm_value(key:, provenance_name: nil, logger: nil)
|
24
24
|
full_key = _ssm_keys[:"#{key.downcase}"] unless key.nil?
|
25
|
-
logger
|
25
|
+
logger&.debug(message: "Looking for SSM Key: #{full_key}")
|
26
26
|
return nil if full_key.nil?
|
27
27
|
|
28
28
|
key_vals = { env: ENV.fetch('LAMBDA_ENV', 'dev').to_s.downcase }
|
29
29
|
# Swap in the provenance name if applicable
|
30
30
|
key_vals[:provenance] = provenance_name unless provenance_name.nil? ||
|
31
31
|
!full_key.include?('%{provenance}')
|
32
|
-
fetch_value(key: format(full_key, key_vals), logger:
|
32
|
+
fetch_value(key: format(full_key, key_vals), logger:)
|
33
33
|
rescue Aws::Errors::ServiceError => e
|
34
|
-
logger
|
34
|
+
logger&.error(message: "Looking for SSM Key: #{key} - #{e.message}", details: e.backtrace)
|
35
35
|
nil
|
36
36
|
end
|
37
37
|
# rubocop:enable Metrics/AbcSize
|
@@ -39,7 +39,7 @@ module Uc3DmpApiCore
|
|
39
39
|
# Call SSM to get the value for the specified key
|
40
40
|
def fetch_value(key:, logger: nil)
|
41
41
|
resp = Aws::SSM::Client.new.get_parameter(name: key, with_decryption: true)
|
42
|
-
logger
|
42
|
+
logger&.debug(message: "Searching for SSM Key: #{key}, Found: '#{resp&.parameter&.value}'")
|
43
43
|
resp.nil? || resp.parameter.nil? ? nil : resp.parameter.value
|
44
44
|
end
|
45
45
|
|
@@ -47,7 +47,6 @@ module Uc3DmpApiCore
|
|
47
47
|
|
48
48
|
# DMPTool/DMPHub SSM keys. See the installation guide for information about how these values are used
|
49
49
|
# https://github.com/CDLUC3/dmp-hub-cfn/wiki/installation-and-setup#required-ssm-parameters
|
50
|
-
# rubocop:disable Metrics/MethodLength
|
51
50
|
def _ssm_keys
|
52
51
|
{
|
53
52
|
administrator_email: '/uc3/dmp/hub/%{env}/AdminEmail',
|
@@ -75,7 +74,6 @@ module Uc3DmpApiCore
|
|
75
74
|
dynamo_table_name: '/uc3/dmp/hub/%{env}/DynamoTableName'
|
76
75
|
}
|
77
76
|
end
|
78
|
-
# rubocop:enable Metrics/MethodLength
|
79
77
|
end
|
80
78
|
end
|
81
79
|
end
|
data/lib/uc3-dmp-api-core.rb
CHANGED
@@ -9,6 +9,7 @@ require 'uc3-dmp-api-core/paginator'
|
|
9
9
|
require 'uc3-dmp-api-core/responder'
|
10
10
|
require 'uc3-dmp-api-core/ssm_reader'
|
11
11
|
|
12
|
+
# Entrypoitn for the uc3-dmp-api-core gem
|
12
13
|
module Uc3DmpApiCore
|
13
14
|
# General HTTP Response Messages
|
14
15
|
# ----------------------------------------
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: uc3-dmp-api-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.23
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brian Riley
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-05-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|
@@ -141,7 +141,7 @@ licenses:
|
|
141
141
|
- MIT
|
142
142
|
metadata:
|
143
143
|
rubygems_mfa_required: 'false'
|
144
|
-
post_install_message:
|
144
|
+
post_install_message:
|
145
145
|
rdoc_options: []
|
146
146
|
require_paths:
|
147
147
|
- lib
|
@@ -149,15 +149,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
149
149
|
requirements:
|
150
150
|
- - ">="
|
151
151
|
- !ruby/object:Gem::Version
|
152
|
-
version: '2
|
152
|
+
version: '3.2'
|
153
153
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
154
154
|
requirements:
|
155
155
|
- - ">="
|
156
156
|
- !ruby/object:Gem::Version
|
157
157
|
version: '0'
|
158
158
|
requirements: []
|
159
|
-
rubygems_version: 3.
|
160
|
-
signing_key:
|
159
|
+
rubygems_version: 3.4.22
|
160
|
+
signing_key:
|
161
161
|
specification_version: 4
|
162
162
|
summary: DMPTool gem that provides general support for Lambda functions
|
163
163
|
test_files: []
|