aws-sdk-code-generator 0.5.0.pre → 0.6.0.pre
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/aws-sdk-code-generator/api.rb +2 -1
- data/lib/aws-sdk-code-generator/client_operation_documentation.rb +2 -1
- data/lib/aws-sdk-code-generator/client_operation_list.rb +4 -0
- data/lib/aws-sdk-code-generator/code_builder.rb +2 -2
- data/lib/aws-sdk-code-generator/endpoint_parameter.rb +190 -0
- data/lib/aws-sdk-code-generator/helper.rb +11 -1
- data/lib/aws-sdk-code-generator/plugin_list.rb +3 -1
- data/lib/aws-sdk-code-generator/resource_batch_action_code.rb +1 -1
- data/lib/aws-sdk-code-generator/resource_client_request.rb +1 -1
- data/lib/aws-sdk-code-generator/resource_waiter.rb +1 -1
- data/lib/aws-sdk-code-generator/service.rb +65 -17
- data/lib/aws-sdk-code-generator/views/client_api_module.rb +32 -15
- data/lib/aws-sdk-code-generator/views/endpoint_parameters_class.rb +6 -50
- data/lib/aws-sdk-code-generator/views/endpoint_provider_class.rb +9 -0
- data/lib/aws-sdk-code-generator/views/endpoints_module.rb +18 -124
- data/lib/aws-sdk-code-generator/views/endpoints_plugin.rb +46 -4
- data/lib/aws-sdk-code-generator/views/errors_module.rb +21 -0
- data/lib/aws-sdk-code-generator/views/features/smoke.rb +5 -4
- data/lib/aws-sdk-code-generator/views/rbs/client_class.rb +1 -1
- data/lib/aws-sdk-code-generator/views/rbs/types_module.rb +2 -2
- data/lib/aws-sdk-code-generator/views/resource_class.rb +22 -0
- data/lib/aws-sdk-code-generator/views/root_resource_class.rb +19 -0
- data/lib/aws-sdk-code-generator/views/service_module.rb +41 -27
- data/lib/aws-sdk-code-generator/views/spec/endpoint_provider_spec_class.rb +20 -11
- data/lib/aws-sdk-code-generator/views/types_module.rb +28 -4
- data/lib/aws-sdk-code-generator.rb +12 -0
- data/templates/async_client_class.mustache +6 -1
- data/templates/client_api_module.mustache +7 -0
- data/templates/client_class.mustache +11 -3
- data/templates/endpoint_parameters_class.mustache +16 -13
- data/templates/endpoints_module.mustache +18 -11
- data/templates/endpoints_plugin.mustache +34 -18
- data/templates/errors_module.mustache +5 -0
- data/templates/resource_class.mustache +6 -1
- data/templates/root_resource_class.mustache +5 -0
- data/templates/service_module.mustache +13 -3
- data/templates/spec/endpoint_provider_spec_class.mustache +1 -1
- data/templates/types_module.mustache +4 -0
- metadata +6 -5
@@ -34,7 +34,7 @@ module AwsSdkCodeGenerator
|
|
34
34
|
# exceptions will not have the event trait.
|
35
35
|
shape['members'].each do |name, ref|
|
36
36
|
if !!@service.api['shapes'][ref['shape']]['exception']
|
37
|
-
@service.api['shapes'][ref['shape']]['
|
37
|
+
@service.api['shapes'][ref['shape']]['exceptionEvent'] = true
|
38
38
|
end
|
39
39
|
end
|
40
40
|
end
|
@@ -80,19 +80,43 @@ module AwsSdkCodeGenerator
|
|
80
80
|
end
|
81
81
|
end
|
82
82
|
|
83
|
+
# @return [Array<String>]
|
84
|
+
def types_customizations
|
85
|
+
Dir.glob(File.join(Helper.gem_lib_path(gem_name), "#{gem_name}/customizations/types", '*.rb')).map do |file|
|
86
|
+
filename = File.basename(file, '.rb')
|
87
|
+
"#{gem_name}/customizations/types/#{filename}"
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
83
91
|
private
|
84
92
|
|
93
|
+
def gem_name
|
94
|
+
"aws-sdk-#{module_name.split('::').last.downcase}"
|
95
|
+
end
|
96
|
+
|
85
97
|
def struct_members(shape)
|
86
98
|
return if shape['members'].nil?
|
87
99
|
members = shape['members'].map do |member_name, member_ref|
|
100
|
+
member_target = @api['shapes'][member_ref['shape']]
|
88
101
|
sensitive = !!(member_ref['sensitive'] ||
|
89
|
-
|
102
|
+
member_target['sensitive'])
|
103
|
+
|
104
|
+
case member_target["type"]
|
105
|
+
when 'map'
|
106
|
+
key_shape = @api['shapes'][member_target['key']['shape']]
|
107
|
+
value_shape = @api['shapes'][member_target['value']['shape']]
|
108
|
+
sensitive ||= !!(key_shape['sensitive'] || value_shape['sensitive'])
|
109
|
+
when 'list'
|
110
|
+
list_member = @api['shapes'][member_target['member']['shape']]
|
111
|
+
sensitive ||= !!(list_member['sensitive'])
|
112
|
+
end
|
113
|
+
|
90
114
|
StructMember.new(
|
91
115
|
member_name: underscore(member_name),
|
92
116
|
sensitive: sensitive
|
93
117
|
)
|
94
118
|
end
|
95
|
-
if shape['event'] || shape['
|
119
|
+
if shape['event'] || shape['exceptionEvent']
|
96
120
|
members << StructMember.new(member_name: 'event_type')
|
97
121
|
end
|
98
122
|
members
|
@@ -180,7 +204,7 @@ module AwsSdkCodeGenerator
|
|
180
204
|
|
181
205
|
def see_also_tag(shape_name)
|
182
206
|
uid = @api['metadata']['uid']
|
183
|
-
if @
|
207
|
+
if @service.protocol != 'api-gateway' && Crosslink.taggable?(uid)
|
184
208
|
Crosslink.tag_string(uid, shape_name)
|
185
209
|
end
|
186
210
|
end
|
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'aws-sdk-core'
|
4
|
+
|
3
5
|
require_relative 'aws-sdk-code-generator/api'
|
4
6
|
require_relative 'aws-sdk-code-generator/apply_docs'
|
5
7
|
require_relative 'aws-sdk-code-generator/codegenerated_plugin'
|
@@ -10,6 +12,7 @@ require_relative 'aws-sdk-code-generator/error_list'
|
|
10
12
|
require_relative 'aws-sdk-code-generator/client_response_structure_example'
|
11
13
|
require_relative 'aws-sdk-code-generator/crosslink'
|
12
14
|
require_relative 'aws-sdk-code-generator/docstring'
|
15
|
+
require_relative 'aws-sdk-code-generator/endpoint_parameter'
|
13
16
|
require_relative 'aws-sdk-code-generator/hash_formatter'
|
14
17
|
require_relative 'aws-sdk-code-generator/helper'
|
15
18
|
require_relative 'aws-sdk-code-generator/plugin_list'
|
@@ -103,4 +106,13 @@ module AwsSdkCodeGenerator
|
|
103
106
|
# WARNING ABOUT GENERATED CODE
|
104
107
|
WARNING_TXT
|
105
108
|
|
109
|
+
@warnings = []
|
110
|
+
|
111
|
+
class << self
|
112
|
+
attr_reader :warnings
|
113
|
+
def warn(service, type, message)
|
114
|
+
Kernel.warn(message)
|
115
|
+
@warnings << { service: service, type: type, message: message }
|
116
|
+
end
|
117
|
+
end
|
106
118
|
end
|
@@ -83,13 +83,18 @@ module {{module_name}}
|
|
83
83
|
# @api private
|
84
84
|
def build_request(operation_name, params = {})
|
85
85
|
handlers = @handlers.for(operation_name)
|
86
|
+
tracer = config.telemetry_provider.tracer_provider.tracer(
|
87
|
+
Aws::Telemetry.module_to_tracer_name('{{module_name}}')
|
88
|
+
)
|
86
89
|
context = Seahorse::Client::RequestContext.new(
|
87
90
|
operation_name: operation_name,
|
88
91
|
operation: config.api.operation(operation_name),
|
89
92
|
client: self,
|
90
93
|
params: params,
|
91
94
|
http_response: Seahorse::Client::Http::AsyncResponse.new,
|
92
|
-
config: config
|
95
|
+
config: config,
|
96
|
+
tracer: tracer
|
97
|
+
)
|
93
98
|
context[:gem_name] = '{{gem_name}}'
|
94
99
|
context[:gem_version] = '{{gem_version}}'
|
95
100
|
Seahorse::Client::Request.new(handlers, context)
|
@@ -3,6 +3,7 @@
|
|
3
3
|
{{#generated_src_warning}}
|
4
4
|
{{generated_src_warning}}
|
5
5
|
{{/generated_src_warning}}
|
6
|
+
|
6
7
|
module {{module_name}}
|
7
8
|
# @api private
|
8
9
|
module ClientApi
|
@@ -77,6 +78,12 @@ module {{module_name}}
|
|
77
78
|
{{#authtype}}
|
78
79
|
o['authtype'] = "{{.}}"
|
79
80
|
{{/authtype}}
|
81
|
+
{{#unsigned_payload}}
|
82
|
+
o['unsignedPayload'] = true
|
83
|
+
{{/unsigned_payload}}
|
84
|
+
{{#auth}}
|
85
|
+
o['auth'] = {{&auth}}
|
86
|
+
{{/auth}}
|
80
87
|
{{#endpoint_trait}}
|
81
88
|
o.endpoint_pattern = {
|
82
89
|
{{#endpoint_pattern}}
|
@@ -7,8 +7,6 @@
|
|
7
7
|
require '{{.}}'
|
8
8
|
{{/plugin_requires}}
|
9
9
|
|
10
|
-
Aws::Plugins::GlobalConfiguration.add_identifier(:{{service_identifier}})
|
11
|
-
|
12
10
|
module {{module_name}}
|
13
11
|
# An API client for {{service_name}}. To construct a client, you need to configure a `:region` and `:credentials`.
|
14
12
|
#
|
@@ -37,6 +35,11 @@ module {{module_name}}
|
|
37
35
|
{{#client_constructor}}
|
38
36
|
# @overload initialize(options)
|
39
37
|
# @param [Hash] options
|
38
|
+
#
|
39
|
+
# @option options [Array<Seahorse::Client::Plugin>] :plugins ([]])
|
40
|
+
# A list of plugins to apply to the client. Each plugin is either a
|
41
|
+
# class name or an instance of a plugin class.
|
42
|
+
#
|
40
43
|
{{>documentation}}
|
41
44
|
{{/client_constructor}}
|
42
45
|
def initialize(*args)
|
@@ -94,13 +97,18 @@ module {{module_name}}
|
|
94
97
|
end
|
95
98
|
end
|
96
99
|
{{/authorizer?}}
|
100
|
+
tracer = config.telemetry_provider.tracer_provider.tracer(
|
101
|
+
Aws::Telemetry.module_to_tracer_name('{{module_name}}')
|
102
|
+
)
|
97
103
|
context = Seahorse::Client::RequestContext.new(
|
98
104
|
operation_name: operation_name,
|
99
105
|
operation: config.api.operation(operation_name),{{#authorizer?}}
|
100
106
|
authorizer: authorizer,{{/authorizer?}}
|
101
107
|
client: self,
|
102
108
|
params: params,
|
103
|
-
config: config
|
109
|
+
config: config,
|
110
|
+
tracer: tracer
|
111
|
+
)
|
104
112
|
context[:gem_name] = '{{gem_name}}'
|
105
113
|
context[:gem_version] = '{{gem_version}}'
|
106
114
|
Seahorse::Client::Request.new(handlers, context)
|
@@ -11,7 +11,7 @@ module {{module_name}}
|
|
11
11
|
{{/parameters}}
|
12
12
|
EndpointParameters = Struct.new(
|
13
13
|
{{#parameters}}
|
14
|
-
:{{
|
14
|
+
:{{key}},
|
15
15
|
{{/parameters}}
|
16
16
|
{{^parameters}}
|
17
17
|
nil
|
@@ -23,28 +23,31 @@ module {{module_name}}
|
|
23
23
|
class << self
|
24
24
|
PARAM_MAP = {
|
25
25
|
{{#parameters}}
|
26
|
-
'{{name}}' => :{{
|
26
|
+
'{{name}}' => :{{key}},
|
27
27
|
{{/parameters}}
|
28
28
|
}.freeze
|
29
29
|
end
|
30
30
|
|
31
31
|
def initialize(options = {})
|
32
32
|
{{#parameters}}
|
33
|
-
self[:{{
|
33
|
+
self[:{{key}}] = options[:{{key}}]
|
34
34
|
{{#default?}}
|
35
|
-
{{
|
36
|
-
self[:{{underscore_name}}] = {{default}} if self[:{{underscore_name}}].nil?
|
37
|
-
{{/boolean_default?}}
|
38
|
-
{{^boolean_default?}}
|
39
|
-
self[:{{underscore_name}}] ||= '{{default}}' if self[:{{underscore_name}}].nil?
|
40
|
-
{{/boolean_default?}}
|
35
|
+
self[:{{key}}] = {{{default}}} if self[:{{key}}].nil?
|
41
36
|
{{/default?}}
|
42
|
-
{{#
|
43
|
-
if self[:{{
|
44
|
-
raise ArgumentError, "Missing required EndpointParameter: :{{
|
37
|
+
{{#validate_required?}}
|
38
|
+
if self[:{{key}}].nil?
|
39
|
+
raise ArgumentError, "Missing required EndpointParameter: :{{key}}"
|
45
40
|
end
|
46
|
-
{{/
|
41
|
+
{{/validate_required?}}
|
47
42
|
{{/parameters}}
|
48
43
|
end
|
44
|
+
|
45
|
+
def self.create(config, options={})
|
46
|
+
new({
|
47
|
+
{{#config_parameters}}
|
48
|
+
{{key}}: {{{value}}},
|
49
|
+
{{/config_parameters}}
|
50
|
+
}.merge(options))
|
51
|
+
end
|
49
52
|
end
|
50
53
|
end
|
@@ -11,24 +11,31 @@ module {{module_name}}
|
|
11
11
|
{{#endpoint_classes}}
|
12
12
|
class {{name}}
|
13
13
|
def self.build(context)
|
14
|
-
{{
|
15
|
-
|
16
|
-
endpoint = context.config.endpoint.to_s
|
17
|
-
end
|
18
|
-
{{/has_endpoint_built_in?}}
|
19
|
-
{{module_name}}::EndpointParameters.new(
|
14
|
+
{{module_name}}::EndpointParameters.create(
|
15
|
+
context.config,
|
20
16
|
{{#parameters}}
|
21
|
-
{{#static_string?}}
|
22
|
-
{{key}}: "{{{value}}}",
|
23
|
-
{{/static_string?}}
|
24
|
-
{{^static_string?}}
|
25
17
|
{{key}}: {{{value}}},
|
26
|
-
{{/static_string?}}
|
27
18
|
{{/parameters}}
|
28
19
|
)
|
29
20
|
end
|
30
21
|
end
|
31
22
|
|
32
23
|
{{/endpoint_classes}}
|
24
|
+
|
25
|
+
def self.parameters_for_operation(context)
|
26
|
+
{{#operation_specific_parameters?}}
|
27
|
+
{{module_name}}::EndpointParameters.create(context.config)
|
28
|
+
{{/operation_specific_parameters?}}
|
29
|
+
{{^operation_specific_parameters?}}
|
30
|
+
case context.operation_name
|
31
|
+
{{#endpoint_classes}}
|
32
|
+
when :{{operation}}
|
33
|
+
{{name}}.build(context)
|
34
|
+
{{/endpoint_classes}}
|
35
|
+
else
|
36
|
+
{{module_name}}::EndpointParameters.create(context.config)
|
37
|
+
end
|
38
|
+
{{/operation_specific_parameters?}}
|
39
|
+
end
|
33
40
|
end
|
34
41
|
end
|
@@ -11,11 +11,11 @@ module {{module_name}}
|
|
11
11
|
:endpoint_provider,
|
12
12
|
doc_type: '{{module_name}}::EndpointProvider',
|
13
13
|
rbs_type: 'untyped',
|
14
|
-
docstring:
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
14
|
+
docstring: <<~DOCS) do |_cfg|
|
15
|
+
The endpoint provider used to resolve endpoints. Any object that responds to
|
16
|
+
`#resolve_endpoint(parameters)` where `parameters` is a Struct similar to
|
17
|
+
`{{module_name}}::EndpointParameters`.
|
18
|
+
DOCS
|
19
19
|
{{module_name}}::EndpointProvider.new
|
20
20
|
end
|
21
21
|
|
@@ -23,15 +23,18 @@ module {{module_name}}
|
|
23
23
|
option(
|
24
24
|
:{{name}},
|
25
25
|
doc_type: '{{doc_type}}',
|
26
|
-
|
27
|
-
|
26
|
+
docstring: <<~DOCS) do |cfg|
|
27
|
+
{{{docstring}}}
|
28
|
+
DOCS
|
29
|
+
{{{default}}}
|
30
|
+
end
|
28
31
|
|
29
32
|
{{/endpoint_options}}
|
30
33
|
# @api private
|
31
34
|
class Handler < Seahorse::Client::Handler
|
32
35
|
def call(context)
|
33
36
|
unless context[:discovered_endpoint]
|
34
|
-
params = parameters_for_operation(context)
|
37
|
+
params = {{module_name}}::Endpoints.parameters_for_operation(context)
|
35
38
|
endpoint = context.config.endpoint_provider.resolve_endpoint(params)
|
36
39
|
|
37
40
|
context.http_request.endpoint = endpoint.url
|
@@ -44,11 +47,33 @@ module {{module_name}}
|
|
44
47
|
context[:auth_scheme] =
|
45
48
|
Aws::Endpoints.resolve_auth_scheme(context, endpoint)
|
46
49
|
|
47
|
-
@handler.call(context)
|
50
|
+
with_metrics(context) { @handler.call(context) }
|
48
51
|
end
|
49
52
|
|
50
53
|
private
|
51
54
|
|
55
|
+
def with_metrics(context, &block)
|
56
|
+
metrics = []
|
57
|
+
metrics << 'ENDPOINT_OVERRIDE' unless context.config.regional_endpoint
|
58
|
+
if context[:auth_scheme] && context[:auth_scheme]['name'] == 'sigv4a'
|
59
|
+
metrics << 'SIGV4A_SIGNING'
|
60
|
+
end
|
61
|
+
{{#has_account_id_endpoint_mode?}}
|
62
|
+
case context.config.account_id_endpoint_mode
|
63
|
+
when 'preferred'
|
64
|
+
metrics << 'ACCOUNT_ID_MODE_PREFERRED'
|
65
|
+
when 'disabled'
|
66
|
+
metrics << 'ACCOUNT_ID_MODE_DISABLED'
|
67
|
+
when 'required'
|
68
|
+
metrics << 'ACCOUNT_ID_MODE_REQUIRED'
|
69
|
+
end
|
70
|
+
{{/has_account_id_endpoint_mode?}}
|
71
|
+
if context.config.credentials&.credentials&.account_id
|
72
|
+
metrics << 'RESOLVED_ACCOUNT_ID'
|
73
|
+
end
|
74
|
+
Aws::Plugins::UserAgent.metric(*metrics, &block)
|
75
|
+
end
|
76
|
+
|
52
77
|
def apply_endpoint_headers(context, headers)
|
53
78
|
headers.each do |key, values|
|
54
79
|
value = values
|
@@ -59,15 +84,6 @@ module {{module_name}}
|
|
59
84
|
context.http_request.headers[key] = value
|
60
85
|
end
|
61
86
|
end
|
62
|
-
|
63
|
-
def parameters_for_operation(context)
|
64
|
-
case context.operation_name
|
65
|
-
{{#endpoint_classes}}
|
66
|
-
when :{{operation_name}}
|
67
|
-
{{module_name}}::Endpoints::{{class_name}}.build(context)
|
68
|
-
{{/endpoint_classes}}
|
69
|
-
end
|
70
|
-
end
|
71
87
|
end
|
72
88
|
|
73
89
|
def add_handlers(handlers, _config)
|
@@ -213,7 +213,7 @@ module {{module_name}}
|
|
213
213
|
:retry
|
214
214
|
end
|
215
215
|
end
|
216
|
-
Aws::Plugins::UserAgent.
|
216
|
+
Aws::Plugins::UserAgent.metric('RESOURCE_MODEL') do
|
217
217
|
Aws::Waiters::Waiter.new(options).wait({})
|
218
218
|
end
|
219
219
|
end
|
@@ -304,3 +304,8 @@ module {{module_name}}
|
|
304
304
|
{{/batch_actions?}}
|
305
305
|
end
|
306
306
|
end
|
307
|
+
{{#customization_file_exists?}}
|
308
|
+
|
309
|
+
# Load customizations if they exist
|
310
|
+
require '{{resource_customization}}'
|
311
|
+
{{/customization_file_exists?}}
|
@@ -17,9 +17,7 @@ require '{{.}}'
|
|
17
17
|
{{/requires}}
|
18
18
|
{{/require_core_guard?}}
|
19
19
|
|
20
|
-
{{
|
21
|
-
require_relative '{{.}}'
|
22
|
-
{{/relative_requires}}
|
20
|
+
Aws::Plugins::GlobalConfiguration.add_identifier(:{{service_identifier}})
|
23
21
|
|
24
22
|
# This module provides support for {{full_name}}. This module is available in the
|
25
23
|
# `{{gem_name}}` gem.
|
@@ -52,7 +50,19 @@ require_relative '{{.}}'
|
|
52
50
|
#
|
53
51
|
# @!group service
|
54
52
|
module {{module_name}}
|
53
|
+
{{#autoloads}}
|
54
|
+
{{#is_plugin}}
|
55
|
+
module Plugins
|
56
|
+
autoload :{{class_name}}, '{{file_path}}'
|
57
|
+
end
|
58
|
+
{{/is_plugin}}
|
59
|
+
{{^is_plugin}}
|
60
|
+
autoload :{{class_name}}, '{{file_path}}'
|
61
|
+
{{/is_plugin}}
|
62
|
+
{{/autoloads}}
|
55
63
|
|
56
64
|
GEM_VERSION = '{{gem_version}}'
|
57
65
|
|
58
66
|
end
|
67
|
+
|
68
|
+
require_relative '{{prefix}}/customizations'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: aws-sdk-code-generator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0.pre
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Amazon Web Services
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-10-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: kramdown
|
@@ -56,6 +56,7 @@ files:
|
|
56
56
|
- lib/aws-sdk-code-generator/codegenerated_plugin.rb
|
57
57
|
- lib/aws-sdk-code-generator/crosslink.rb
|
58
58
|
- lib/aws-sdk-code-generator/docstring.rb
|
59
|
+
- lib/aws-sdk-code-generator/endpoint_parameter.rb
|
59
60
|
- lib/aws-sdk-code-generator/error_list.rb
|
60
61
|
- lib/aws-sdk-code-generator/errors.rb
|
61
62
|
- lib/aws-sdk-code-generator/eventstream_example.rb
|
@@ -184,11 +185,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
184
185
|
version: '0'
|
185
186
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
186
187
|
requirements:
|
187
|
-
- - "
|
188
|
+
- - ">="
|
188
189
|
- !ruby/object:Gem::Version
|
189
|
-
version:
|
190
|
+
version: '0'
|
190
191
|
requirements: []
|
191
|
-
rubygems_version: 3.
|
192
|
+
rubygems_version: 3.5.9
|
192
193
|
signing_key:
|
193
194
|
specification_version: 4
|
194
195
|
summary: AWS SDK for Ruby - Code Generator
|