aws-sdk-s3 1.74.0 → 1.75.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/lib/aws-sdk-s3.rb +1 -1
- data/lib/aws-sdk-s3/client.rb +4 -2
- data/lib/aws-sdk-s3/customizations/object.rb +12 -1
- data/lib/aws-sdk-s3/file_uploader.rb +11 -0
- data/lib/aws-sdk-s3/multipart_file_uploader.rb +37 -2
- data/lib/aws-sdk-s3/plugins/accelerate.rb +3 -1
- data/lib/aws-sdk-s3/plugins/dualstack.rb +3 -1
- data/lib/aws-sdk-s3/plugins/sse_cpk.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 75f8d275e892e31dfb80d004f49fb465fc4388e92f20e2827089d5dc76e0d821
|
4
|
+
data.tar.gz: 1f84cba631bb2e6a81d07ea671fec120d6bf33dcbfe6e427de26444c36627cf8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f034970098a597fd9d6eeb87a8a82c1ed30ff918ca292b1a0a3f380f08e5b8f504ec619b1763312720f1b28e1df6ba7b56c0bac19dc09c9923bc21aa8be189d1
|
7
|
+
data.tar.gz: 0bb581e24c1e3d0fa6306c574146f7ef1e85ff949911d7917c0f4cf8cf85b364cf8b0210ed2ba54a85ec5838a463368ede8f978846e123f79f78e92e3fffd4c9
|
data/lib/aws-sdk-s3.rb
CHANGED
data/lib/aws-sdk-s3/client.rb
CHANGED
@@ -4589,8 +4589,10 @@ module Aws::S3
|
|
4589
4589
|
#
|
4590
4590
|
# @example Streaming data to a block
|
4591
4591
|
# # WARNING: yielding data to a block disables retries of networking errors
|
4592
|
+
# # However truncation of the body will be retried automatically using a range request
|
4592
4593
|
# File.open('/path/to/file', 'wb') do |file|
|
4593
|
-
# s3.get_object(bucket: 'bucket-name', key: 'object-key') do |chunk|
|
4594
|
+
# s3.get_object(bucket: 'bucket-name', key: 'object-key') do |chunk, headers|
|
4595
|
+
# # headers['content-length']
|
4594
4596
|
# file.write(chunk)
|
4595
4597
|
# end
|
4596
4598
|
# end
|
@@ -11672,7 +11674,7 @@ module Aws::S3
|
|
11672
11674
|
params: params,
|
11673
11675
|
config: config)
|
11674
11676
|
context[:gem_name] = 'aws-sdk-s3'
|
11675
|
-
context[:gem_version] = '1.
|
11677
|
+
context[:gem_version] = '1.75.0'
|
11676
11678
|
Seahorse::Client::Request.new(handlers, context)
|
11677
11679
|
end
|
11678
11680
|
|
@@ -296,6 +296,14 @@ module Aws
|
|
296
296
|
# etag = response.etag
|
297
297
|
# end
|
298
298
|
#
|
299
|
+
# You can provide a callback to monitor progress of the upload:
|
300
|
+
#
|
301
|
+
# # bytes and totals are each an array with 1 entry per part
|
302
|
+
# progress = Proc.new do |bytes, totals|
|
303
|
+
# puts bytes.map.with_index { |b, i| "Part #{i+1}: #{b} / #{totals[i]}"}.join(' ') + "Total: #{100.0 * bytes.sum / totals.sum }%" }
|
304
|
+
# end
|
305
|
+
# obj.upload_file('/path/to/file')
|
306
|
+
#
|
299
307
|
# @param [String, Pathname, File, Tempfile] source A file on the local
|
300
308
|
# file system that will be uploaded as this object. This can either be
|
301
309
|
# a String or Pathname to the file, an open File object, or an open
|
@@ -312,6 +320,10 @@ module Aws
|
|
312
320
|
# multipart uploads. This option is not used if the file is smaller than
|
313
321
|
# `:multipart_threshold`.
|
314
322
|
#
|
323
|
+
# @option options [Proc] :progress_callback
|
324
|
+
# A Proc that will be called when each chunk of the upload is sent.
|
325
|
+
# It will be invoked with [bytes_read], [total_sizes]
|
326
|
+
#
|
315
327
|
# @raise [MultipartUploadError] If an object is being uploaded in
|
316
328
|
# parts, and the upload can not be completed, then the upload is
|
317
329
|
# aborted and this error is raised. The raised error has a `#errors`
|
@@ -320,7 +332,6 @@ module Aws
|
|
320
332
|
#
|
321
333
|
# @return [Boolean] Returns `true` when the object is uploaded
|
322
334
|
# without any errors.
|
323
|
-
#
|
324
335
|
def upload_file(source, options = {})
|
325
336
|
uploading_options = options.dup
|
326
337
|
uploader = FileUploader.new(
|
@@ -29,6 +29,9 @@ module Aws
|
|
29
29
|
# @param [String, Pathname, File, Tempfile] source The file to upload.
|
30
30
|
# @option options [required, String] :bucket The bucket to upload to.
|
31
31
|
# @option options [required, String] :key The key for the object.
|
32
|
+
# @option options [Proc] :progress_callback
|
33
|
+
# A Proc that will be called when each chunk of the upload is sent.
|
34
|
+
# It will be invoked with [bytes_read], [total_sizes]
|
32
35
|
# @return [void]
|
33
36
|
def upload(source, options = {})
|
34
37
|
if File.size(source) >= multipart_threshold
|
@@ -49,11 +52,19 @@ module Aws
|
|
49
52
|
end
|
50
53
|
|
51
54
|
def put_object(source, options)
|
55
|
+
if (callback = options.delete(:progress_callback))
|
56
|
+
options[:on_chunk_sent] = single_part_progress(callback)
|
57
|
+
end
|
52
58
|
open_file(source) do |file|
|
53
59
|
@client.put_object(options.merge(body: file))
|
54
60
|
end
|
55
61
|
end
|
56
62
|
|
63
|
+
def single_part_progress(progress_callback)
|
64
|
+
proc do |_chunk, bytes_read, total_size|
|
65
|
+
progress_callback.call([bytes_read], [total_size])
|
66
|
+
end
|
67
|
+
end
|
57
68
|
end
|
58
69
|
end
|
59
70
|
end
|
@@ -39,6 +39,9 @@ module Aws
|
|
39
39
|
# @param [String, Pathname, File, Tempfile] source The file to upload.
|
40
40
|
# @option options [required, String] :bucket The bucket to upload to.
|
41
41
|
# @option options [required, String] :key The key for the object.
|
42
|
+
# @option options [Proc] :progress_callback
|
43
|
+
# A Proc that will be called when each chunk of the upload is sent.
|
44
|
+
# It will be invoked with [bytes_read], [total_sizes]
|
42
45
|
# @return [void]
|
43
46
|
def upload(source, options = {})
|
44
47
|
if File.size(source) < MIN_PART_SIZE
|
@@ -68,7 +71,7 @@ module Aws
|
|
68
71
|
def upload_parts(upload_id, source, options)
|
69
72
|
pending = PartList.new(compute_parts(upload_id, source, options))
|
70
73
|
completed = PartList.new
|
71
|
-
errors = upload_in_threads(pending, completed)
|
74
|
+
errors = upload_in_threads(pending, completed, options)
|
72
75
|
if errors.empty?
|
73
76
|
completed.to_a.sort_by { |part| part[:part_number] }
|
74
77
|
else
|
@@ -127,12 +130,21 @@ module Aws
|
|
127
130
|
end
|
128
131
|
end
|
129
132
|
|
130
|
-
def upload_in_threads(pending, completed)
|
133
|
+
def upload_in_threads(pending, completed, options)
|
131
134
|
threads = []
|
135
|
+
if (callback = options[:progress_callback])
|
136
|
+
progress = MultipartProgress.new(pending, callback)
|
137
|
+
end
|
132
138
|
@thread_count.times do
|
133
139
|
thread = Thread.new do
|
134
140
|
begin
|
135
141
|
while part = pending.shift
|
142
|
+
if progress
|
143
|
+
part[:on_chunk_sent] =
|
144
|
+
proc do |_chunk, bytes, _total|
|
145
|
+
progress.call(part[:part_number], bytes)
|
146
|
+
end
|
147
|
+
end
|
136
148
|
resp = @client.upload_part(part)
|
137
149
|
part[:body].close
|
138
150
|
completed.push(etag: resp.etag, part_number: part[:part_number])
|
@@ -182,11 +194,34 @@ module Aws
|
|
182
194
|
@mutex.synchronize { @parts.clear }
|
183
195
|
end
|
184
196
|
|
197
|
+
def size
|
198
|
+
@mutex.synchronize { @parts.size }
|
199
|
+
end
|
200
|
+
|
201
|
+
def part_sizes
|
202
|
+
@mutex.synchronize { @parts.map { |p| p[:body].size } }
|
203
|
+
end
|
204
|
+
|
185
205
|
def to_a
|
186
206
|
@mutex.synchronize { @parts.dup }
|
187
207
|
end
|
188
208
|
|
189
209
|
end
|
210
|
+
|
211
|
+
# @api private
|
212
|
+
class MultipartProgress
|
213
|
+
def initialize(parts, progress_callback)
|
214
|
+
@bytes_sent = Array.new(parts.size, 0)
|
215
|
+
@total_sizes = parts.part_sizes
|
216
|
+
@progress_callback = progress_callback
|
217
|
+
end
|
218
|
+
|
219
|
+
def call(part_number, bytes_read)
|
220
|
+
# part numbers start at 1
|
221
|
+
@bytes_sent[part_number - 1] = bytes_read
|
222
|
+
@progress_callback.call(@bytes_sent, @total_sizes)
|
223
|
+
end
|
224
|
+
end
|
190
225
|
end
|
191
226
|
end
|
192
227
|
end
|
@@ -37,7 +37,9 @@ each bucket. [Go here for more information](http://docs.aws.amazon.com/AmazonS3/
|
|
37
37
|
class OptionHandler < Seahorse::Client::Handler
|
38
38
|
def call(context)
|
39
39
|
# Support client configuration and per-operation configuration
|
40
|
-
|
40
|
+
if context.params.is_a?(Hash)
|
41
|
+
accelerate = context.params.delete(:use_accelerate_endpoint)
|
42
|
+
end
|
41
43
|
if accelerate.nil?
|
42
44
|
accelerate = context.config.use_accelerate_endpoint
|
43
45
|
end
|
@@ -22,7 +22,9 @@ for all operations.
|
|
22
22
|
# @api private
|
23
23
|
class OptionHandler < Seahorse::Client::Handler
|
24
24
|
def call(context)
|
25
|
-
|
25
|
+
if context.params.is_a?(Hash)
|
26
|
+
dualstack = context.params.delete(:use_dualstack_endpoint)
|
27
|
+
end
|
26
28
|
dualstack = context.config.use_dualstack_endpoint if dualstack.nil?
|
27
29
|
context[:use_dualstack_endpoint] = dualstack
|
28
30
|
@handler.call(context)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: aws-sdk-s3
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.75.0
|
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: 2020-07-
|
11
|
+
date: 2020-07-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk-kms
|
@@ -47,7 +47,7 @@ dependencies:
|
|
47
47
|
version: '3'
|
48
48
|
- - ">="
|
49
49
|
- !ruby/object:Gem::Version
|
50
|
-
version: 3.
|
50
|
+
version: 3.104.1
|
51
51
|
type: :runtime
|
52
52
|
prerelease: false
|
53
53
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -57,7 +57,7 @@ dependencies:
|
|
57
57
|
version: '3'
|
58
58
|
- - ">="
|
59
59
|
- !ruby/object:Gem::Version
|
60
|
-
version: 3.
|
60
|
+
version: 3.104.1
|
61
61
|
description: Official AWS Ruby gem for Amazon Simple Storage Service (Amazon S3).
|
62
62
|
This gem is part of the AWS SDK for Ruby.
|
63
63
|
email:
|