aws-sdk-http-async 0.1.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.
@@ -0,0 +1,36 @@
1
+ require 'seahorse/client/plugins/net_http'
2
+
3
+ module Async
4
+ module Aws
5
+ class HttpPlugin < Seahorse::Client::Plugin
6
+ # @param config [Seahorse::Client::Configuration]
7
+ # @return [void]
8
+ def add_options(config)
9
+ Seahorse::Client::Plugins::NetHttp.new.add_options(config)
10
+
11
+ config.add_option(:async_http_connection_limit, 10)
12
+ config.add_option(:async_http_force_accept_encoding, true)
13
+ config.add_option(:async_http_body_warn_bytes, 5 * 1024 * 1024)
14
+ config.add_option(:async_http_max_buffer_bytes, 5 * 1024 * 1024)
15
+ config.add_option(:async_http_idle_timeout, 30)
16
+ config.add_option(:async_http_header_timeout, nil)
17
+ config.add_option(:async_http_total_timeout, nil)
18
+ config.add_option(:async_http_max_cached_clients, 100)
19
+ config.add_option(:async_http_streaming_uploads, :auto)
20
+ config.add_option(:async_http_fallback, :net_http)
21
+ config.add_option(:async_http_client_cache, nil)
22
+ end
23
+
24
+ # @param handlers [Seahorse::Client::HandlerList]
25
+ # @param _config [Seahorse::Client::Configuration]
26
+ # @return [void]
27
+ def add_handlers(handlers, config)
28
+ return if config.respond_to?(:stub_responses) && config.stub_responses
29
+
30
+ handlers.add(Async::Aws::Handler, step: :send)
31
+ end
32
+
33
+ private
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,167 @@
1
+ require 'seahorse/client/base'
2
+
3
+ module Async
4
+ module Aws
5
+ module Patcher
6
+ MUTEX = Mutex.new
7
+ @patched_base = false
8
+ @patched_clients = {}
9
+ @inherited_tracker_installed = false
10
+
11
+ module InheritedTracker
12
+ def inherited(subclass)
13
+ super
14
+ return unless Async::Aws::Patcher.send(:patched_base?)
15
+
16
+ Async::Aws::Patcher.send(:__track_client, subclass)
17
+ end
18
+ end
19
+
20
+ # @param services [Array<Symbol>, Symbol] :all or list of service identifiers
21
+ # @return [void]
22
+ def self.patch(services = :all)
23
+ MUTEX.synchronize do
24
+ if services == :all
25
+ patch_base!
26
+ patch_existing_clients!
27
+ return
28
+ end
29
+
30
+ Array(services).each do |service|
31
+ client_class = resolve_client_class(service)
32
+ next unless client_class
33
+
34
+ patch_client!(client_class)
35
+ end
36
+ end
37
+ end
38
+
39
+ # @param services [Array<Symbol>, Symbol] :all or list of service identifiers
40
+ # @return [void]
41
+ def self.unpatch(services = :all)
42
+ MUTEX.synchronize do
43
+ if services == :all
44
+ unpatch_base!
45
+ unpatch_existing_clients!
46
+ return
47
+ end
48
+
49
+ Array(services).each do |service|
50
+ client_class = resolve_client_class(service)
51
+ next unless client_class
52
+
53
+ unpatch_client!(client_class)
54
+ end
55
+ end
56
+ end
57
+
58
+ def self.patch_base!
59
+ return if @patched_base
60
+ return if plugin_registered?(::Seahorse::Client::Base)
61
+
62
+ ::Seahorse::Client::Base.add_plugin(HttpPlugin)
63
+ @patched_base = true
64
+ install_inherited_tracker!
65
+ end
66
+ private_class_method :patch_base!
67
+
68
+ def self.unpatch_base!
69
+ return unless @patched_base
70
+
71
+ ::Seahorse::Client::Base.remove_plugin(HttpPlugin)
72
+ @patched_base = false
73
+ end
74
+ private_class_method :unpatch_base!
75
+
76
+ def self.unpatch_existing_clients!
77
+ @patched_clients.keys.each do |klass|
78
+ next unless plugin_registered?(klass)
79
+
80
+ klass.remove_plugin(HttpPlugin)
81
+ end
82
+ @patched_clients.clear
83
+ end
84
+ private_class_method :unpatch_existing_clients!
85
+
86
+ def self.patch_existing_clients!
87
+ ObjectSpace.each_object(Class) do |klass|
88
+ next unless klass < ::Seahorse::Client::Base
89
+
90
+ patch_client!(klass)
91
+ end
92
+ end
93
+ private_class_method :patch_existing_clients!
94
+
95
+ def self.patch_client!(client_class)
96
+ return if plugin_registered?(client_class)
97
+
98
+ client_class.add_plugin(HttpPlugin)
99
+ @patched_clients[client_class] = true
100
+ end
101
+ private_class_method :patch_client!
102
+
103
+ def self.unpatch_client!(client_class)
104
+ return unless @patched_clients.delete(client_class)
105
+
106
+ client_class.remove_plugin(HttpPlugin)
107
+ end
108
+ private_class_method :unpatch_client!
109
+
110
+ def self.install_inherited_tracker!
111
+ return if @inherited_tracker_installed
112
+
113
+ ::Seahorse::Client::Base.singleton_class.prepend(InheritedTracker)
114
+ @inherited_tracker_installed = true
115
+ end
116
+ private_class_method :install_inherited_tracker!
117
+
118
+ def self.__track_client(klass)
119
+ return unless @patched_base
120
+ return unless klass.is_a?(Class)
121
+ return unless klass < ::Seahorse::Client::Base
122
+
123
+ MUTEX.synchronize do
124
+ @patched_clients[klass] = true
125
+ end
126
+ end
127
+ private_class_method :__track_client
128
+
129
+ def self.plugin_registered?(client_class)
130
+ client_class.plugins.any? do |plugin|
131
+ plugin == HttpPlugin || (plugin.is_a?(Class) && plugin <= HttpPlugin)
132
+ end
133
+ end
134
+ private_class_method :plugin_registered?
135
+
136
+ def self.patched_base?
137
+ @patched_base
138
+ end
139
+ private_class_method :patched_base?
140
+
141
+ def self.resolve_client_class(service)
142
+ if service.is_a?(Class) && service < ::Seahorse::Client::Base
143
+ return service
144
+ end
145
+
146
+ if service.is_a?(Module) && service.const_defined?(:Client)
147
+ client = service.const_get(:Client)
148
+ return client if client < ::Seahorse::Client::Base
149
+ end
150
+
151
+ target = service.to_s.downcase.delete('_')
152
+ ::Aws.constants.each do |const|
153
+ next unless const.to_s.downcase == target
154
+
155
+ mod = ::Aws.const_get(const)
156
+ next unless mod.is_a?(Module) && mod.const_defined?(:Client)
157
+
158
+ client = mod.const_get(:Client)
159
+ return client if client < ::Seahorse::Client::Base
160
+ end
161
+
162
+ nil
163
+ end
164
+ private_class_method :resolve_client_class
165
+ end
166
+ end
167
+ end
@@ -0,0 +1,13 @@
1
+ module Async
2
+ module Aws
3
+ module RakePatch
4
+ # @param args [Array]
5
+ # @return [Object]
6
+ def top_level(*)
7
+ return super if Async::Task.current?
8
+
9
+ Async { super(*) }.wait
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,11 @@
1
+ module Async
2
+ module Aws
3
+ VERSION = File.read(File.expand_path('../../../VERSION', __dir__)).strip
4
+
5
+ def self.const_missing(name)
6
+ return ::Aws.const_get(name) if ::Aws.const_defined?(name)
7
+
8
+ super
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,10 @@
1
+ require 'async'
2
+ require 'async/http'
3
+ require 'aws-sdk-core'
4
+
5
+ require 'async/aws/version'
6
+ require 'async/aws/errors'
7
+ require 'async/aws/client_cache'
8
+ require 'async/aws/handler'
9
+ require 'async/aws/http_plugin'
10
+ require 'async/aws/patcher'
@@ -0,0 +1,6 @@
1
+ require 'async'
2
+ require 'rake'
3
+ require 'aws-sdk-http-async'
4
+ require 'async/aws/rake_patch'
5
+
6
+ Rake::Application.prepend(Async::Aws::RakePatch) unless Rake::Application < Async::Aws::RakePatch
@@ -0,0 +1,3 @@
1
+ require 'aws-sdk-http-async/core'
2
+
3
+ Async::Aws::Patcher.patch(:all)
metadata ADDED
@@ -0,0 +1,254 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: aws-sdk-http-async
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Thomas Witt
8
+ bindir: exe
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: aws-sdk-core
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: 3.241.0
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: 3.241.0
26
+ - !ruby/object:Gem::Dependency
27
+ name: async-http
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 0.94.0
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: 0.94.0
40
+ - !ruby/object:Gem::Dependency
41
+ name: aws-sdk-dynamodb
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '1'
47
+ type: :development
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '1'
54
+ - !ruby/object:Gem::Dependency
55
+ name: aws-sdk-s3
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '1'
61
+ type: :development
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '1'
68
+ - !ruby/object:Gem::Dependency
69
+ name: brakeman
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '6.1'
75
+ type: :development
76
+ prerelease: false
77
+ version_requirements: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '6.1'
82
+ - !ruby/object:Gem::Dependency
83
+ name: bundler-audit
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: '0.9'
89
+ type: :development
90
+ prerelease: false
91
+ version_requirements: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: '0.9'
96
+ - !ruby/object:Gem::Dependency
97
+ name: rake
98
+ requirement: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: '13.0'
103
+ type: :development
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '13.0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: rspec
112
+ requirement: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - "~>"
115
+ - !ruby/object:Gem::Version
116
+ version: '3.13'
117
+ type: :development
118
+ prerelease: false
119
+ version_requirements: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: '3.13'
124
+ - !ruby/object:Gem::Dependency
125
+ name: rubocop-rails
126
+ requirement: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - "~>"
129
+ - !ruby/object:Gem::Version
130
+ version: '2.0'
131
+ type: :development
132
+ prerelease: false
133
+ version_requirements: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - "~>"
136
+ - !ruby/object:Gem::Version
137
+ version: '2.0'
138
+ - !ruby/object:Gem::Dependency
139
+ name: rubocop-rails-omakase
140
+ requirement: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - "~>"
143
+ - !ruby/object:Gem::Version
144
+ version: '1.0'
145
+ type: :development
146
+ prerelease: false
147
+ version_requirements: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - "~>"
150
+ - !ruby/object:Gem::Version
151
+ version: '1.0'
152
+ - !ruby/object:Gem::Dependency
153
+ name: rubocop-rake
154
+ requirement: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - "~>"
157
+ - !ruby/object:Gem::Version
158
+ version: '0.6'
159
+ type: :development
160
+ prerelease: false
161
+ version_requirements: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - "~>"
164
+ - !ruby/object:Gem::Version
165
+ version: '0.6'
166
+ - !ruby/object:Gem::Dependency
167
+ name: rubocop-rspec
168
+ requirement: !ruby/object:Gem::Requirement
169
+ requirements:
170
+ - - "~>"
171
+ - !ruby/object:Gem::Version
172
+ version: '3.0'
173
+ type: :development
174
+ prerelease: false
175
+ version_requirements: !ruby/object:Gem::Requirement
176
+ requirements:
177
+ - - "~>"
178
+ - !ruby/object:Gem::Version
179
+ version: '3.0'
180
+ - !ruby/object:Gem::Dependency
181
+ name: rufo
182
+ requirement: !ruby/object:Gem::Requirement
183
+ requirements:
184
+ - - "~>"
185
+ - !ruby/object:Gem::Version
186
+ version: '0.18'
187
+ type: :development
188
+ prerelease: false
189
+ version_requirements: !ruby/object:Gem::Requirement
190
+ requirements:
191
+ - - "~>"
192
+ - !ruby/object:Gem::Version
193
+ version: '0.18'
194
+ - !ruby/object:Gem::Dependency
195
+ name: webmock
196
+ requirement: !ruby/object:Gem::Requirement
197
+ requirements:
198
+ - - "~>"
199
+ - !ruby/object:Gem::Version
200
+ version: '3.0'
201
+ type: :development
202
+ prerelease: false
203
+ version_requirements: !ruby/object:Gem::Requirement
204
+ requirements:
205
+ - - "~>"
206
+ - !ruby/object:Gem::Version
207
+ version: '3.0'
208
+ description: Provides an async-http based send handler for aws-sdk-core.
209
+ executables:
210
+ - async-rake
211
+ extensions: []
212
+ extra_rdoc_files: []
213
+ files:
214
+ - CHANGELOG.md
215
+ - LICENSE.txt
216
+ - README.md
217
+ - VERSION
218
+ - exe/async-rake
219
+ - lib/async/aws/auto.rb
220
+ - lib/async/aws/client_cache.rb
221
+ - lib/async/aws/errors.rb
222
+ - lib/async/aws/handler.rb
223
+ - lib/async/aws/http_plugin.rb
224
+ - lib/async/aws/patcher.rb
225
+ - lib/async/aws/rake_patch.rb
226
+ - lib/async/aws/version.rb
227
+ - lib/aws-sdk-http-async.rb
228
+ - lib/aws-sdk-http-async/core.rb
229
+ - lib/aws-sdk-http-async/rake.rb
230
+ homepage: https://github.com/thomaswitt/aws-sdk-http-async
231
+ licenses:
232
+ - Apache-2.0
233
+ metadata:
234
+ source_code_uri: https://github.com/thomaswitt/aws-sdk-http-async
235
+ changelog_uri: https://github.com/thomaswitt/aws-sdk-http-async/blob/main/CHANGELOG.md
236
+ rubygems_mfa_required: 'true'
237
+ rdoc_options: []
238
+ require_paths:
239
+ - lib
240
+ required_ruby_version: !ruby/object:Gem::Requirement
241
+ requirements:
242
+ - - ">="
243
+ - !ruby/object:Gem::Version
244
+ version: 3.4.0
245
+ required_rubygems_version: !ruby/object:Gem::Requirement
246
+ requirements:
247
+ - - ">="
248
+ - !ruby/object:Gem::Version
249
+ version: '0'
250
+ requirements: []
251
+ rubygems_version: 4.0.4
252
+ specification_version: 4
253
+ summary: Async HTTP handler plugin for AWS SDK for Ruby
254
+ test_files: []