aws-sdk-core 3.171.1 → 3.199.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/CHANGELOG.md +363 -0
- data/VERSION +1 -1
- data/lib/aws-defaults/default_configuration.rb +4 -4
- data/lib/aws-sdk-core/binary/decode_handler.rb +3 -9
- data/lib/aws-sdk-core/binary/encode_handler.rb +1 -1
- data/lib/aws-sdk-core/binary/event_builder.rb +34 -37
- data/lib/aws-sdk-core/binary/event_stream_decoder.rb +1 -0
- data/lib/aws-sdk-core/binary/event_stream_encoder.rb +4 -3
- data/lib/aws-sdk-core/cbor/cbor_engine.rb +19 -0
- data/lib/aws-sdk-core/cbor/decoder.rb +310 -0
- data/lib/aws-sdk-core/cbor/encoder.rb +243 -0
- data/lib/aws-sdk-core/cbor.rb +106 -0
- data/lib/aws-sdk-core/client_stubs.rb +18 -14
- data/lib/aws-sdk-core/credential_provider.rb +4 -1
- data/lib/aws-sdk-core/ec2_metadata.rb +1 -1
- data/lib/aws-sdk-core/ecs_credentials.rb +78 -11
- data/lib/aws-sdk-core/endpoints/matchers.rb +18 -10
- data/lib/aws-sdk-core/endpoints.rb +6 -2
- data/lib/aws-sdk-core/error_handler.rb +41 -0
- data/lib/aws-sdk-core/errors.rb +3 -3
- data/lib/aws-sdk-core/event_emitter.rb +0 -16
- data/lib/aws-sdk-core/ini_parser.rb +7 -0
- data/lib/aws-sdk-core/instance_profile_credentials.rb +55 -32
- data/lib/aws-sdk-core/json/builder.rb +8 -1
- data/lib/aws-sdk-core/json/error_handler.rb +15 -10
- data/lib/aws-sdk-core/json/handler.rb +12 -6
- data/lib/aws-sdk-core/json/json_engine.rb +3 -1
- data/lib/aws-sdk-core/json/oj_engine.rb +7 -1
- data/lib/aws-sdk-core/json/parser.rb +33 -3
- data/lib/aws-sdk-core/json.rb +43 -14
- data/lib/aws-sdk-core/log/formatter.rb +6 -0
- data/lib/aws-sdk-core/lru_cache.rb +75 -0
- data/lib/aws-sdk-core/pageable_response.rb +3 -1
- data/lib/aws-sdk-core/param_validator.rb +9 -4
- data/lib/aws-sdk-core/plugins/checksum_algorithm.rb +5 -3
- data/lib/aws-sdk-core/plugins/client_metrics_plugin.rb +1 -0
- data/lib/aws-sdk-core/plugins/client_metrics_send_plugin.rb +14 -2
- data/lib/aws-sdk-core/plugins/credentials_configuration.rb +2 -0
- data/lib/aws-sdk-core/plugins/global_configuration.rb +8 -9
- data/lib/aws-sdk-core/plugins/http_checksum.rb +2 -1
- data/lib/aws-sdk-core/plugins/invocation_id.rb +1 -11
- data/lib/aws-sdk-core/plugins/logging.rb +2 -0
- data/lib/aws-sdk-core/plugins/protocols/api_gateway.rb +3 -1
- data/lib/aws-sdk-core/plugins/protocols/ec2.rb +2 -24
- data/lib/aws-sdk-core/plugins/protocols/json_rpc.rb +6 -8
- data/lib/aws-sdk-core/plugins/protocols/query.rb +4 -2
- data/lib/aws-sdk-core/plugins/protocols/rest_json.rb +3 -15
- data/lib/aws-sdk-core/plugins/protocols/rest_xml.rb +3 -0
- data/lib/aws-sdk-core/plugins/protocols/rpc_v2.rb +17 -0
- data/lib/aws-sdk-core/plugins/regional_endpoint.rb +109 -33
- data/lib/aws-sdk-core/plugins/request_compression.rb +226 -0
- data/lib/aws-sdk-core/plugins/retry_errors.rb +12 -3
- data/lib/aws-sdk-core/plugins/sign.rb +24 -13
- data/lib/aws-sdk-core/plugins/stub_responses.rb +1 -0
- data/lib/aws-sdk-core/plugins/user_agent.rb +152 -14
- data/lib/aws-sdk-core/process_credentials.rb +45 -27
- data/lib/aws-sdk-core/query/ec2_handler.rb +27 -0
- data/lib/aws-sdk-core/query/ec2_param_builder.rb +5 -7
- data/lib/aws-sdk-core/query/handler.rb +4 -4
- data/lib/aws-sdk-core/query/param_builder.rb +2 -2
- data/lib/aws-sdk-core/query.rb +2 -1
- data/lib/aws-sdk-core/refreshing_credentials.rb +12 -12
- data/lib/aws-sdk-core/rest/content_type_handler.rb +60 -0
- data/lib/aws-sdk-core/rest/handler.rb +3 -4
- data/lib/aws-sdk-core/rest/request/body.rb +32 -5
- data/lib/aws-sdk-core/rest/request/endpoint.rb +24 -4
- data/lib/aws-sdk-core/rest/request/headers.rb +15 -7
- data/lib/aws-sdk-core/rest/request/querystring_builder.rb +62 -36
- data/lib/aws-sdk-core/rest/response/body.rb +15 -1
- data/lib/aws-sdk-core/rest/response/header_list_parser.rb +79 -0
- data/lib/aws-sdk-core/rest/response/headers.rb +8 -3
- data/lib/aws-sdk-core/rest.rb +1 -0
- data/lib/aws-sdk-core/rpc_v2/builder.rb +62 -0
- data/lib/aws-sdk-core/rpc_v2/content_type_handler.rb +45 -0
- data/lib/aws-sdk-core/rpc_v2/error_handler.rb +84 -0
- data/lib/aws-sdk-core/rpc_v2/handler.rb +74 -0
- data/lib/aws-sdk-core/rpc_v2/parser.rb +90 -0
- data/lib/aws-sdk-core/rpc_v2.rb +6 -0
- data/lib/aws-sdk-core/shared_config.rb +48 -18
- data/lib/aws-sdk-core/sso_credentials.rb +1 -1
- data/lib/aws-sdk-core/stubbing/protocols/rpc_v2.rb +41 -0
- data/lib/aws-sdk-core/stubbing/stub_data.rb +11 -0
- data/lib/aws-sdk-core/util.rb +39 -0
- data/lib/aws-sdk-core/waiters/poller.rb +4 -2
- data/lib/aws-sdk-core/xml/builder.rb +17 -9
- data/lib/aws-sdk-core/xml/error_handler.rb +32 -42
- data/lib/aws-sdk-core/xml/parser/frame.rb +4 -20
- data/lib/aws-sdk-core/xml/parser/stack.rb +2 -0
- data/lib/aws-sdk-core/xml/parser.rb +2 -6
- data/lib/aws-sdk-core.rb +7 -2
- data/lib/aws-sdk-sso/client.rb +94 -46
- data/lib/aws-sdk-sso/endpoint_provider.rb +30 -24
- data/lib/aws-sdk-sso/endpoints.rb +1 -0
- data/lib/aws-sdk-sso/plugins/endpoints.rb +4 -2
- data/lib/aws-sdk-sso.rb +1 -1
- data/lib/aws-sdk-ssooidc/client.rb +479 -74
- data/lib/aws-sdk-ssooidc/client_api.rb +78 -1
- data/lib/aws-sdk-ssooidc/endpoint_provider.rb +30 -24
- data/lib/aws-sdk-ssooidc/endpoints.rb +15 -0
- data/lib/aws-sdk-ssooidc/errors.rb +52 -0
- data/lib/aws-sdk-ssooidc/plugins/endpoints.rb +6 -2
- data/lib/aws-sdk-ssooidc/types.rb +372 -51
- data/lib/aws-sdk-ssooidc.rb +1 -1
- data/lib/aws-sdk-sts/client.rb +219 -157
- data/lib/aws-sdk-sts/client_api.rb +20 -9
- data/lib/aws-sdk-sts/endpoint_provider.rb +81 -78
- data/lib/aws-sdk-sts/endpoints.rb +1 -0
- data/lib/aws-sdk-sts/plugins/endpoints.rb +4 -2
- data/lib/aws-sdk-sts/presigner.rb +1 -1
- data/lib/aws-sdk-sts/types.rb +49 -11
- data/lib/aws-sdk-sts.rb +1 -1
- data/lib/seahorse/client/async_base.rb +1 -1
- data/lib/seahorse/client/async_response.rb +19 -0
- data/lib/seahorse/client/base.rb +18 -7
- data/lib/seahorse/client/configuration.rb +0 -4
- data/lib/seahorse/client/h2/handler.rb +1 -0
- data/lib/seahorse/client/handler.rb +1 -1
- data/lib/seahorse/client/net_http/connection_pool.rb +3 -9
- data/lib/seahorse/client/net_http/patches.rb +1 -4
- data/lib/seahorse/client/plugin.rb +9 -0
- data/lib/seahorse/client/plugins/endpoint.rb +0 -1
- data/lib/seahorse/client/plugins/h2.rb +3 -3
- data/lib/seahorse/client/plugins/net_http.rb +48 -16
- data/lib/seahorse/client/plugins/request_callback.rb +31 -0
- data/lib/seahorse/client/response.rb +6 -0
- data/lib/seahorse/model/operation.rb +3 -0
- data/lib/seahorse/model/shapes.rb +2 -2
- data/sig/aws-sdk-core/client_stubs.rbs +10 -0
- data/sig/aws-sdk-core/errors.rbs +22 -0
- data/sig/aws-sdk-core/resources/collection.rbs +21 -0
- data/sig/aws-sdk-core/structure.rbs +4 -0
- data/sig/aws-sdk-core/waiters/errors.rbs +20 -0
- data/sig/aws-sdk-core.rbs +7 -0
- data/sig/seahorse/client/base.rbs +25 -0
- data/sig/seahorse/client/handler_builder.rbs +16 -0
- data/sig/seahorse/client/response.rbs +61 -0
- metadata +44 -17
- /data/lib/aws-sdk-core/xml/parser/{engines/libxml.rb → libxml_engine.rb} +0 -0
- /data/lib/aws-sdk-core/xml/parser/{engines/nokogiri.rb → nokogiri_engine.rb} +0 -0
- /data/lib/aws-sdk-core/xml/parser/{engines/oga.rb → oga_engine.rb} +0 -0
- /data/lib/aws-sdk-core/xml/parser/{engines/ox.rb → ox_engine.rb} +0 -0
- /data/lib/aws-sdk-core/xml/parser/{engines/rexml.rb → rexml_engine.rb} +0 -0
|
@@ -12,8 +12,7 @@ module Aws
|
|
|
12
12
|
build_request(context)
|
|
13
13
|
response = @handler.call(context)
|
|
14
14
|
response.on(200..299) { |resp| parse_response(resp) }
|
|
15
|
-
response.on(200..599) { |
|
|
16
|
-
response
|
|
15
|
+
response.on(200..599) { |_resp| apply_request_id(context) }
|
|
17
16
|
end
|
|
18
17
|
|
|
19
18
|
private
|
|
@@ -38,10 +37,10 @@ module Aws
|
|
|
38
37
|
end
|
|
39
38
|
|
|
40
39
|
def parse_body(context)
|
|
40
|
+
json = context.http_response.body_contents
|
|
41
41
|
if simple_json?(context)
|
|
42
|
-
Json.load(
|
|
43
|
-
elsif rules = context.operation.output
|
|
44
|
-
json = context.http_response.body_contents
|
|
42
|
+
Json.load(json)
|
|
43
|
+
elsif (rules = context.operation.output)
|
|
45
44
|
if json.is_a?(Array)
|
|
46
45
|
# an array of emitted events
|
|
47
46
|
if json[0].respond_to?(:response)
|
|
@@ -59,7 +58,10 @@ module Aws
|
|
|
59
58
|
end
|
|
60
59
|
resp_struct
|
|
61
60
|
else
|
|
62
|
-
Parser.new(
|
|
61
|
+
Parser.new(
|
|
62
|
+
rules,
|
|
63
|
+
query_compatible: query_compatible?(context)
|
|
64
|
+
).parse(json)
|
|
63
65
|
end
|
|
64
66
|
else
|
|
65
67
|
EmptyStructure.new
|
|
@@ -83,6 +85,10 @@ module Aws
|
|
|
83
85
|
context.config.simple_json
|
|
84
86
|
end
|
|
85
87
|
|
|
88
|
+
def query_compatible?(context)
|
|
89
|
+
context.config.api.metadata.key?('awsQueryCompatible')
|
|
90
|
+
end
|
|
91
|
+
|
|
86
92
|
end
|
|
87
93
|
end
|
|
88
94
|
end
|
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require 'oj'
|
|
4
|
+
|
|
3
5
|
module Aws
|
|
4
6
|
module Json
|
|
5
7
|
module OjEngine
|
|
6
8
|
# @api private
|
|
7
|
-
LOAD_OPTIONS = {
|
|
9
|
+
LOAD_OPTIONS = {
|
|
10
|
+
mode: :compat,
|
|
11
|
+
symbol_keys: false,
|
|
12
|
+
empty_string: false
|
|
13
|
+
}.freeze
|
|
8
14
|
|
|
9
15
|
# @api private
|
|
10
16
|
DUMP_OPTIONS = { mode: :compat }.freeze
|
|
@@ -10,12 +10,15 @@ module Aws
|
|
|
10
10
|
include Seahorse::Model::Shapes
|
|
11
11
|
|
|
12
12
|
# @param [Seahorse::Model::ShapeRef] rules
|
|
13
|
-
def initialize(rules)
|
|
13
|
+
def initialize(rules, query_compatible: false)
|
|
14
14
|
@rules = rules
|
|
15
|
+
@query_compatible = query_compatible
|
|
15
16
|
end
|
|
16
17
|
|
|
17
18
|
# @param [String<JSON>] json
|
|
18
19
|
def parse(json, target = nil)
|
|
20
|
+
json = '{}' if json.empty?
|
|
21
|
+
|
|
19
22
|
parse_ref(@rules, Json.load(json), target)
|
|
20
23
|
end
|
|
21
24
|
|
|
@@ -28,10 +31,26 @@ module Aws
|
|
|
28
31
|
member_name, member_ref = shape.member_by_location_name(key)
|
|
29
32
|
if member_ref
|
|
30
33
|
target[member_name] = parse_ref(member_ref, value)
|
|
31
|
-
elsif shape.union
|
|
34
|
+
elsif shape.union && key != '__type'
|
|
32
35
|
target[:unknown] = { 'name' => key, 'value' => value }
|
|
33
36
|
end
|
|
34
37
|
end
|
|
38
|
+
# In services that were previously Query/XML, members that were
|
|
39
|
+
# "flattened" defaulted to empty lists. In JSON, these values are nil,
|
|
40
|
+
# which is backwards incompatible. To preserve backwards compatibility,
|
|
41
|
+
# we set a default value of [] for these members.
|
|
42
|
+
if @query_compatible
|
|
43
|
+
ref.shape.members.each do |member_name, member_target|
|
|
44
|
+
next unless target[member_name].nil?
|
|
45
|
+
|
|
46
|
+
if flattened_list?(member_target.shape)
|
|
47
|
+
target[member_name] = []
|
|
48
|
+
elsif flattened_map?(member_target.shape)
|
|
49
|
+
target[member_name] = {}
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
35
54
|
if shape.union
|
|
36
55
|
# convert to subclass
|
|
37
56
|
member_subclass = shape.member_subclass(target.member).new
|
|
@@ -52,6 +71,8 @@ module Aws
|
|
|
52
71
|
def map(ref, values, target = nil)
|
|
53
72
|
target = {} if target.nil?
|
|
54
73
|
values.each do |key, value|
|
|
74
|
+
next if value.nil?
|
|
75
|
+
|
|
55
76
|
target[key] = parse_ref(ref.shape.value, value)
|
|
56
77
|
end
|
|
57
78
|
target
|
|
@@ -68,6 +89,7 @@ module Aws
|
|
|
68
89
|
when TimestampShape then time(value)
|
|
69
90
|
when BlobShape then Base64.decode64(value)
|
|
70
91
|
when BooleanShape then value.to_s == 'true'
|
|
92
|
+
when FloatShape then Util.deserialize_number(value)
|
|
71
93
|
else value
|
|
72
94
|
end
|
|
73
95
|
end
|
|
@@ -76,7 +98,15 @@ module Aws
|
|
|
76
98
|
# @param [String, Integer] value
|
|
77
99
|
# @return [Time]
|
|
78
100
|
def time(value)
|
|
79
|
-
value.is_a?(Numeric) ? Time.at(value) :
|
|
101
|
+
value.is_a?(Numeric) ? Time.at(value) : Aws::Util.deserialize_time(value)
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def flattened_list?(shape)
|
|
105
|
+
shape.is_a?(ListShape) && shape.flattened
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def flattened_map?(shape)
|
|
109
|
+
shape.is_a?(MapShape) && shape.flattened
|
|
80
110
|
end
|
|
81
111
|
|
|
82
112
|
end
|
data/lib/aws-sdk-core/json.rb
CHANGED
|
@@ -1,12 +1,9 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require 'json'
|
|
4
3
|
require_relative 'json/builder'
|
|
5
4
|
require_relative 'json/error_handler'
|
|
6
5
|
require_relative 'json/handler'
|
|
7
6
|
require_relative 'json/parser'
|
|
8
|
-
require_relative 'json/json_engine'
|
|
9
|
-
require_relative 'json/oj_engine'
|
|
10
7
|
|
|
11
8
|
module Aws
|
|
12
9
|
# @api private
|
|
@@ -21,29 +18,61 @@ module Aws
|
|
|
21
18
|
end
|
|
22
19
|
|
|
23
20
|
class << self
|
|
24
|
-
|
|
25
|
-
|
|
21
|
+
# @param [Symbol,Class] engine
|
|
22
|
+
# Must be one of the following values:
|
|
23
|
+
#
|
|
24
|
+
# * :oj
|
|
25
|
+
# * :json
|
|
26
|
+
#
|
|
27
|
+
def engine=(engine)
|
|
28
|
+
@engine = Class === engine ? engine : load_engine(engine)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# @return [Class] Returns the default engine.
|
|
32
|
+
# One of:
|
|
33
|
+
#
|
|
34
|
+
# * {OjEngine}
|
|
35
|
+
# * {JsonEngine}
|
|
36
|
+
#
|
|
37
|
+
def engine
|
|
38
|
+
set_default_engine unless @engine
|
|
39
|
+
@engine
|
|
26
40
|
end
|
|
27
41
|
|
|
28
|
-
def
|
|
29
|
-
load(
|
|
42
|
+
def load(json)
|
|
43
|
+
@engine.load(json)
|
|
30
44
|
end
|
|
31
45
|
|
|
32
46
|
def dump(value)
|
|
33
|
-
|
|
47
|
+
@engine.dump(value)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def set_default_engine
|
|
51
|
+
[:oj, :json].each do |name|
|
|
52
|
+
@engine ||= try_load_engine(name)
|
|
53
|
+
end
|
|
54
|
+
unless @engine
|
|
55
|
+
raise 'Unable to find a compatible json library. ' \
|
|
56
|
+
'Ensure that you have installed or added to your Gemfile one of ' \
|
|
57
|
+
'oj or json'
|
|
58
|
+
end
|
|
34
59
|
end
|
|
35
60
|
|
|
36
61
|
private
|
|
37
62
|
|
|
38
|
-
def
|
|
39
|
-
require
|
|
40
|
-
|
|
63
|
+
def load_engine(name)
|
|
64
|
+
require "aws-sdk-core/json/#{name}_engine"
|
|
65
|
+
const_name = name[0].upcase + name[1..-1] + 'Engine'
|
|
66
|
+
const_get(const_name)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def try_load_engine(name)
|
|
70
|
+
load_engine(name)
|
|
41
71
|
rescue LoadError
|
|
42
|
-
|
|
72
|
+
false
|
|
43
73
|
end
|
|
44
74
|
end
|
|
45
75
|
|
|
46
|
-
|
|
47
|
-
ENGINE = select_engine
|
|
76
|
+
set_default_engine
|
|
48
77
|
end
|
|
49
78
|
end
|
|
@@ -26,6 +26,8 @@ module Aws
|
|
|
26
26
|
#
|
|
27
27
|
# You can put any of these placeholders into you pattern.
|
|
28
28
|
#
|
|
29
|
+
# * `:region` - The region configured for the client.
|
|
30
|
+
#
|
|
29
31
|
# * `:client_class` - The name of the client class.
|
|
30
32
|
#
|
|
31
33
|
# * `:operation` - The name of the client request method.
|
|
@@ -116,6 +118,10 @@ module Aws
|
|
|
116
118
|
|
|
117
119
|
private
|
|
118
120
|
|
|
121
|
+
def _region(response)
|
|
122
|
+
response.context.config.region
|
|
123
|
+
end
|
|
124
|
+
|
|
119
125
|
def _client_class(response)
|
|
120
126
|
response.context.client.class.name
|
|
121
127
|
end
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Aws
|
|
4
|
+
# @api private
|
|
5
|
+
# A simple thread safe LRU cache
|
|
6
|
+
class LRUCache
|
|
7
|
+
# @param [Hash] options
|
|
8
|
+
# @option options [Integer] :max_entries (100) Maximum number of entries
|
|
9
|
+
# @option options [Integer] :expiration (nil) Expiration time in seconds
|
|
10
|
+
def initialize(options = {})
|
|
11
|
+
@max_entries = options[:max_entries] || 100
|
|
12
|
+
@expiration = options[:expiration]
|
|
13
|
+
@entries = {}
|
|
14
|
+
@mutex = Mutex.new
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# @param [String] key
|
|
18
|
+
# @return [Object]
|
|
19
|
+
def [](key)
|
|
20
|
+
@mutex.synchronize do
|
|
21
|
+
value = @entries[key]
|
|
22
|
+
if value
|
|
23
|
+
@entries.delete(key)
|
|
24
|
+
@entries[key] = value unless value.expired?
|
|
25
|
+
end
|
|
26
|
+
@entries[key]&.value
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# @param [String] key
|
|
31
|
+
# @param [Object] value
|
|
32
|
+
def []=(key, value)
|
|
33
|
+
@mutex.synchronize do
|
|
34
|
+
@entries.shift unless @entries.size < @max_entries
|
|
35
|
+
# delete old value if exists
|
|
36
|
+
@entries.delete(key)
|
|
37
|
+
@entries[key] = Entry.new(value: value, expiration: @expiration)
|
|
38
|
+
@entries[key].value
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# @param [String] key
|
|
43
|
+
# @return [Boolean]
|
|
44
|
+
def key?(key)
|
|
45
|
+
@mutex.synchronize do
|
|
46
|
+
@entries.delete(key) if @entries.key?(key) && @entries[key].expired?
|
|
47
|
+
@entries.key?(key)
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def clear
|
|
52
|
+
@mutex.synchronize do
|
|
53
|
+
@entries.clear
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# @api private
|
|
58
|
+
class Entry
|
|
59
|
+
def initialize(options = {})
|
|
60
|
+
@value = options[:value]
|
|
61
|
+
@expiration = options[:expiration]
|
|
62
|
+
@created_time = Time.now
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# @return [Object]
|
|
66
|
+
attr_reader :value
|
|
67
|
+
|
|
68
|
+
def expired?
|
|
69
|
+
return false unless @expiration
|
|
70
|
+
|
|
71
|
+
Time.now - @created_time > @expiration
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
@@ -201,7 +201,9 @@ module Aws
|
|
|
201
201
|
def next_response(params)
|
|
202
202
|
params = next_page_params(params)
|
|
203
203
|
request = context.client.build_request(context.operation_name, params)
|
|
204
|
-
|
|
204
|
+
Aws::Plugins::UserAgent.metric('PAGINATOR') do
|
|
205
|
+
request.send_request
|
|
206
|
+
end
|
|
205
207
|
end
|
|
206
208
|
|
|
207
209
|
def next_page_params(params)
|
|
@@ -6,7 +6,7 @@ module Aws
|
|
|
6
6
|
|
|
7
7
|
include Seahorse::Model::Shapes
|
|
8
8
|
|
|
9
|
-
EXPECTED_GOT =
|
|
9
|
+
EXPECTED_GOT = 'expected %s to be %s, got class %s instead.'
|
|
10
10
|
|
|
11
11
|
# @param [Seahorse::Model::Shapes::ShapeRef] rules
|
|
12
12
|
# @param [Hash] params
|
|
@@ -71,9 +71,10 @@ module Aws
|
|
|
71
71
|
end
|
|
72
72
|
|
|
73
73
|
if @validate_required && shape.union
|
|
74
|
-
|
|
74
|
+
set_values = @input ? values.length : values.to_h.length
|
|
75
|
+
if set_values > 1
|
|
75
76
|
errors << "multiple values provided to union at #{context} - must contain exactly one of the supported types: #{shape.member_names.join(', ')}"
|
|
76
|
-
elsif
|
|
77
|
+
elsif set_values == 0
|
|
77
78
|
errors << "No values provided to union at #{context} - must contain exactly one of the supported types: #{shape.member_names.join(', ')}"
|
|
78
79
|
end
|
|
79
80
|
end
|
|
@@ -106,6 +107,8 @@ module Aws
|
|
|
106
107
|
# validate members
|
|
107
108
|
member_ref = ref.shape.member
|
|
108
109
|
values.each.with_index do |value, index|
|
|
110
|
+
next unless value
|
|
111
|
+
|
|
109
112
|
shape(member_ref, value, errors, context + "[#{index}]")
|
|
110
113
|
end
|
|
111
114
|
end
|
|
@@ -121,6 +124,8 @@ module Aws
|
|
|
121
124
|
|
|
122
125
|
values.each do |key, value|
|
|
123
126
|
shape(key_ref, key, errors, "#{context} #{key.inspect} key")
|
|
127
|
+
next unless value
|
|
128
|
+
|
|
124
129
|
shape(value_ref, value, errors, context + "[#{key.inspect}]")
|
|
125
130
|
end
|
|
126
131
|
end
|
|
@@ -230,7 +235,7 @@ module Aws
|
|
|
230
235
|
end
|
|
231
236
|
|
|
232
237
|
def expected_got(context, expected, got)
|
|
233
|
-
EXPECTED_GOT % [context, expected, got.
|
|
238
|
+
EXPECTED_GOT % [context, expected, got.class.name]
|
|
234
239
|
end
|
|
235
240
|
|
|
236
241
|
end
|
|
@@ -117,7 +117,8 @@ module Aws
|
|
|
117
117
|
|
|
118
118
|
def call(context)
|
|
119
119
|
if should_calculate_request_checksum?(context)
|
|
120
|
-
request_algorithm_input = ChecksumAlgorithm.request_algorithm_selection(context)
|
|
120
|
+
request_algorithm_input = ChecksumAlgorithm.request_algorithm_selection(context) ||
|
|
121
|
+
context[:default_request_checksum_algorithm]
|
|
121
122
|
context[:checksum_algorithms] = request_algorithm_input
|
|
122
123
|
|
|
123
124
|
request_checksum_property = {
|
|
@@ -140,7 +141,8 @@ module Aws
|
|
|
140
141
|
|
|
141
142
|
def should_calculate_request_checksum?(context)
|
|
142
143
|
context.operation.http_checksum &&
|
|
143
|
-
ChecksumAlgorithm.request_algorithm_selection(context)
|
|
144
|
+
(ChecksumAlgorithm.request_algorithm_selection(context) ||
|
|
145
|
+
context[:default_request_checksum_algorithm])
|
|
144
146
|
end
|
|
145
147
|
|
|
146
148
|
def should_verify_response_checksum?(context)
|
|
@@ -314,7 +316,7 @@ module Aws
|
|
|
314
316
|
@io.rewind
|
|
315
317
|
end
|
|
316
318
|
|
|
317
|
-
def read(length, buf)
|
|
319
|
+
def read(length, buf = nil)
|
|
318
320
|
# account for possible leftover bytes at the end, if we have trailer bytes, send them
|
|
319
321
|
if @trailer_io
|
|
320
322
|
return @trailer_io.read(length, buf)
|
|
@@ -40,6 +40,7 @@ side monitoring agent is running on, where client metrics will be published via
|
|
|
40
40
|
option(:client_side_monitoring_publisher,
|
|
41
41
|
default: ClientSideMonitoring::Publisher,
|
|
42
42
|
doc_type: Aws::ClientSideMonitoring::Publisher,
|
|
43
|
+
rbs_type: 'untyped',
|
|
43
44
|
docstring: <<-DOCS) do |cfg|
|
|
44
45
|
Allows you to provide a custom client-side monitoring publisher class. By default,
|
|
45
46
|
will use the Client Side Monitoring Agent Publisher.
|
|
@@ -11,6 +11,8 @@ module Aws
|
|
|
11
11
|
# AttemptHandler comes just before we would retry an error.
|
|
12
12
|
# Or before we would follow redirects.
|
|
13
13
|
handlers.add(AttemptHandler, step: :sign, priority: 39)
|
|
14
|
+
# ErrorHandler comes after we have parsed an error.
|
|
15
|
+
handlers.add(ErrorHandler, step: :sign, priority: 95)
|
|
14
16
|
# LatencyHandler is as close to sending as possible.
|
|
15
17
|
handlers.add(LatencyHandler, step: :sign, priority: 0)
|
|
16
18
|
end
|
|
@@ -62,17 +64,27 @@ module Aws
|
|
|
62
64
|
call_attempt.x_amzn_request_id = headers["x-amzn-request-id"]
|
|
63
65
|
end
|
|
64
66
|
call_attempt.http_status_code = context.http_response.status_code
|
|
65
|
-
|
|
67
|
+
context.metadata[:current_call_attempt] = call_attempt
|
|
68
|
+
request_metrics.add_call_attempt(call_attempt)
|
|
69
|
+
resp
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
class ErrorHandler < Seahorse::Client::Handler
|
|
74
|
+
def call(context)
|
|
75
|
+
resp = @handler.call(context)
|
|
76
|
+
call_attempt = context.metadata[:current_call_attempt]
|
|
77
|
+
if (e = resp.error)
|
|
66
78
|
e_name = _extract_error_name(e)
|
|
67
79
|
e_msg = e.message
|
|
68
80
|
call_attempt.aws_exception = "#{e_name}"
|
|
69
81
|
call_attempt.aws_exception_msg = "#{e_msg}"
|
|
70
82
|
end
|
|
71
|
-
request_metrics.add_call_attempt(call_attempt)
|
|
72
83
|
resp
|
|
73
84
|
end
|
|
74
85
|
|
|
75
86
|
private
|
|
87
|
+
|
|
76
88
|
def _extract_error_name(error)
|
|
77
89
|
if error.is_a?(Aws::Errors::ServiceError)
|
|
78
90
|
error.class.code
|
|
@@ -23,6 +23,7 @@ at HOME/.aws/credentials. When not specified, 'default' is used.
|
|
|
23
23
|
option(:credentials,
|
|
24
24
|
required: true,
|
|
25
25
|
doc_type: 'Aws::CredentialProvider',
|
|
26
|
+
rbs_type: 'untyped',
|
|
26
27
|
docstring: <<-DOCS
|
|
27
28
|
Your AWS credentials. This can be an instance of any one of the
|
|
28
29
|
following classes:
|
|
@@ -79,6 +80,7 @@ locations will be searched for credentials:
|
|
|
79
80
|
option(:token_provider,
|
|
80
81
|
required: false,
|
|
81
82
|
doc_type: 'Aws::TokenProvider',
|
|
83
|
+
rbs_type: 'untyped',
|
|
82
84
|
docstring: <<-DOCS
|
|
83
85
|
A Bearer Token Provider. This can be an instance of any one of the
|
|
84
86
|
following classes:
|
|
@@ -43,7 +43,7 @@ module Aws
|
|
|
43
43
|
# @api private
|
|
44
44
|
class GlobalConfiguration < Seahorse::Client::Plugin
|
|
45
45
|
|
|
46
|
-
@identifiers = Set.new
|
|
46
|
+
@identifiers = Set.new
|
|
47
47
|
|
|
48
48
|
# @api private
|
|
49
49
|
def before_initialize(client_class, options)
|
|
@@ -55,17 +55,18 @@ module Aws
|
|
|
55
55
|
private
|
|
56
56
|
|
|
57
57
|
def apply_service_defaults(client_class, options)
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
58
|
+
return unless (defaults = Aws.config[client_class.identifier])
|
|
59
|
+
|
|
60
|
+
defaults.each do |option_name, default|
|
|
61
|
+
options[option_name] = default unless options.key?(option_name)
|
|
62
62
|
end
|
|
63
63
|
end
|
|
64
64
|
|
|
65
|
-
def apply_aws_defaults(
|
|
65
|
+
def apply_aws_defaults(_client_class, options)
|
|
66
66
|
Aws.config.each do |option_name, default|
|
|
67
67
|
next if self.class.identifiers.include?(option_name)
|
|
68
68
|
next if options.key?(option_name)
|
|
69
|
+
|
|
69
70
|
options[option_name] = default
|
|
70
71
|
end
|
|
71
72
|
end
|
|
@@ -80,9 +81,7 @@ module Aws
|
|
|
80
81
|
|
|
81
82
|
# @return [Set<String>]
|
|
82
83
|
# @api private
|
|
83
|
-
|
|
84
|
-
@identifiers
|
|
85
|
-
end
|
|
84
|
+
attr_reader :identifiers
|
|
86
85
|
|
|
87
86
|
end
|
|
88
87
|
end
|
|
@@ -12,7 +12,8 @@ module Aws
|
|
|
12
12
|
|
|
13
13
|
def call(context)
|
|
14
14
|
if checksum_required?(context) &&
|
|
15
|
-
!context[:checksum_algorithms] # skip in favor of flexible checksum
|
|
15
|
+
!context[:checksum_algorithms] && # skip in favor of flexible checksum
|
|
16
|
+
!context[:s3_express_endpoint] # s3 express endpoints do not support md5
|
|
16
17
|
body = context.http_request.body
|
|
17
18
|
context.http_request.headers['Content-Md5'] ||= md5(body)
|
|
18
19
|
end
|
|
@@ -12,18 +12,8 @@ module Aws
|
|
|
12
12
|
class Handler < Seahorse::Client::Handler
|
|
13
13
|
|
|
14
14
|
def call(context)
|
|
15
|
-
apply_invocation_id(context)
|
|
16
|
-
@handler.call(context)
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
private
|
|
20
|
-
|
|
21
|
-
def apply_invocation_id(context)
|
|
22
15
|
context.http_request.headers['amz-sdk-invocation-id'] = SecureRandom.uuid
|
|
23
|
-
|
|
24
|
-
# only used for eventstreaming at input
|
|
25
|
-
context.http_request.headers['x-amz-content-sha256'] = 'STREAMING-AWS4-HMAC-SHA256-EVENTS'
|
|
26
|
-
end
|
|
16
|
+
@handler.call(context)
|
|
27
17
|
end
|
|
28
18
|
|
|
29
19
|
end
|
|
@@ -8,6 +8,7 @@ module Aws
|
|
|
8
8
|
|
|
9
9
|
option(:logger,
|
|
10
10
|
doc_type: 'Logger',
|
|
11
|
+
rbs_type: 'untyped',
|
|
11
12
|
docstring: <<-DOCS
|
|
12
13
|
The Logger instance to send log messages to. If this option
|
|
13
14
|
is not set, logging will be disabled.
|
|
@@ -22,6 +23,7 @@ is not set, logging will be disabled.
|
|
|
22
23
|
|
|
23
24
|
option(:log_formatter,
|
|
24
25
|
doc_type: 'Aws::Log::Formatter',
|
|
26
|
+
rbs_type: 'untyped',
|
|
25
27
|
doc_default: literal('Aws::Log::Formatter.default'),
|
|
26
28
|
docstring: 'The log formatter.'
|
|
27
29
|
) do |config|
|
|
@@ -5,6 +5,8 @@ module Aws
|
|
|
5
5
|
module Protocols
|
|
6
6
|
class ApiGateway < Seahorse::Client::Plugin
|
|
7
7
|
|
|
8
|
+
option(:protocol, 'api-gateway')
|
|
9
|
+
|
|
8
10
|
class ContentTypeHandler < Seahorse::Client::Handler
|
|
9
11
|
def call(context)
|
|
10
12
|
body = context.http_request.body
|
|
@@ -22,8 +24,8 @@ module Aws
|
|
|
22
24
|
handler(Rest::Handler)
|
|
23
25
|
handler(ContentTypeHandler, priority: 30)
|
|
24
26
|
handler(Json::ErrorHandler, step: :sign)
|
|
25
|
-
end
|
|
26
27
|
|
|
28
|
+
end
|
|
27
29
|
end
|
|
28
30
|
end
|
|
29
31
|
end
|
|
@@ -1,35 +1,13 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative '../../query'
|
|
4
|
-
|
|
5
3
|
module Aws
|
|
6
4
|
module Plugins
|
|
7
5
|
module Protocols
|
|
8
6
|
class EC2 < Seahorse::Client::Plugin
|
|
9
7
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
def apply_params(param_list, params, rules)
|
|
13
|
-
Aws::Query::EC2ParamBuilder.new(param_list).apply(rules, params)
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def parse_xml(context)
|
|
17
|
-
if rules = context.operation.output
|
|
18
|
-
parser = Xml::Parser.new(rules)
|
|
19
|
-
data = parser.parse(xml(context)) do |path, value|
|
|
20
|
-
if path.size == 2 && path.last == 'requestId'
|
|
21
|
-
context.metadata[:request_id] = value
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
data
|
|
25
|
-
else
|
|
26
|
-
EmptyStructure.new
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
end
|
|
8
|
+
option(:protocol, 'ec2')
|
|
31
9
|
|
|
32
|
-
handler(
|
|
10
|
+
handler(Aws::Query::EC2Handler)
|
|
33
11
|
handler(Xml::ErrorHandler, step: :sign)
|
|
34
12
|
|
|
35
13
|
end
|
|
@@ -5,18 +5,17 @@ module Aws
|
|
|
5
5
|
module Protocols
|
|
6
6
|
class JsonRpc < Seahorse::Client::Plugin
|
|
7
7
|
|
|
8
|
+
option(:protocol, 'json')
|
|
9
|
+
|
|
8
10
|
option(:simple_json,
|
|
9
11
|
default: false,
|
|
10
12
|
doc_type: 'Boolean',
|
|
11
13
|
docstring: <<-DOCS)
|
|
12
14
|
Disables request parameter conversion, validation, and formatting.
|
|
13
|
-
Also
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
structures.
|
|
17
|
-
|
|
18
|
-
When `:simple_json` is enabled, the request parameters hash must
|
|
19
|
-
be formatted exactly as the DynamoDB API expects.
|
|
15
|
+
Also disables response data type conversions. The request parameters
|
|
16
|
+
hash must be formatted exactly as the API expects.This option is useful
|
|
17
|
+
when you want to ensure the highest level of performance by avoiding
|
|
18
|
+
overhead of walking request parameters and response data structures.
|
|
20
19
|
DOCS
|
|
21
20
|
|
|
22
21
|
option(:validate_params) { |config| !config.simple_json }
|
|
@@ -24,7 +23,6 @@ be formatted exactly as the DynamoDB API expects.
|
|
|
24
23
|
option(:convert_params) { |config| !config.simple_json }
|
|
25
24
|
|
|
26
25
|
handler(Json::Handler)
|
|
27
|
-
|
|
28
26
|
handler(Json::ErrorHandler, step: :sign)
|
|
29
27
|
|
|
30
28
|
end
|