aliyun-sdk 0.5.0 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/README.md +174 -172
- data/lib/aliyun/oss/http.rb +20 -44
- data/lib/aliyun/oss/protocol.rb +10 -9
- data/lib/aliyun/sts/protocol.rb +2 -2
- data/lib/aliyun/version.rb +1 -1
- data/spec/aliyun/oss/bucket_spec.rb +17 -17
- data/spec/aliyun/oss/client/bucket_spec.rb +8 -8
- data/spec/aliyun/oss/client/client_spec.rb +1 -1
- data/spec/aliyun/oss/multipart_spec.rb +10 -10
- data/spec/aliyun/oss/object_spec.rb +15 -15
- metadata +13 -8
data/lib/aliyun/oss/http.rb
CHANGED
@@ -105,35 +105,11 @@ module Aliyun
|
|
105
105
|
false
|
106
106
|
end
|
107
107
|
|
108
|
-
def inspect
|
109
|
-
"@buffer: " + @buffer[0, 32].inspect + "...#{@buffer.size} bytes"
|
110
|
-
end
|
111
|
-
end
|
112
|
-
|
113
|
-
# RestClient requires the payload to respones to :read(bytes)
|
114
|
-
# and return a stream.
|
115
|
-
# We are not doing the real read here, just return a
|
116
|
-
# readable stream for RestClient playload.rb treats it as:
|
117
|
-
# def read(bytes=nil)
|
118
|
-
# @stream.read(bytes)
|
119
|
-
# end
|
120
|
-
# alias :to_s :read
|
121
|
-
# net_http_do_request(http, req, payload ? payload.to_s : nil,
|
122
|
-
# &@block_response)
|
123
|
-
class StreamPayload
|
124
|
-
def initialize(crc_enable = false, init_crc = 0, &block)
|
125
|
-
@stream = StreamWriter.new(crc_enable, init_crc, &block)
|
126
|
-
end
|
127
|
-
|
128
|
-
def read(bytes = nil)
|
129
|
-
@stream
|
130
|
-
end
|
131
|
-
|
132
108
|
def close
|
133
109
|
end
|
134
110
|
|
135
|
-
def
|
136
|
-
|
111
|
+
def inspect
|
112
|
+
"@buffer: " + @buffer[0, 32].inspect + "...#{@buffer.size} bytes"
|
137
113
|
end
|
138
114
|
end
|
139
115
|
|
@@ -281,44 +257,44 @@ module Aliyun
|
|
281
257
|
headers[:params] = (sub_res || {}).merge(http_options[:query] || {})
|
282
258
|
|
283
259
|
block_response = ->(r) { handle_response(r, &block) } if block
|
284
|
-
|
260
|
+
request = RestClient::Request.new(
|
285
261
|
:method => verb,
|
286
262
|
:url => get_request_url(bucket, object),
|
287
263
|
:headers => headers,
|
288
264
|
:payload => http_options[:body],
|
289
265
|
:block_response => block_response,
|
290
266
|
:open_timeout => @config.open_timeout || OPEN_TIMEOUT,
|
291
|
-
:
|
292
|
-
)
|
293
|
-
|
294
|
-
if
|
295
|
-
e = ServerError.new(
|
267
|
+
:read_timeout => @config.read_timeout || READ_TIMEOUT
|
268
|
+
)
|
269
|
+
response = request.execute do |resp, &blk|
|
270
|
+
if resp.code >= 300
|
271
|
+
e = ServerError.new(resp)
|
296
272
|
logger.error(e.to_s)
|
297
273
|
raise e
|
298
274
|
else
|
299
|
-
|
275
|
+
resp.return!(&blk)
|
300
276
|
end
|
301
277
|
end
|
302
278
|
|
303
279
|
# If streaming read_body is used, we need to create the
|
304
280
|
# RestClient::Response ourselves
|
305
|
-
unless
|
306
|
-
if
|
307
|
-
|
308
|
-
RestClient::Request.decode(
|
309
|
-
|
310
|
-
e = ServerError.new(
|
281
|
+
unless response.is_a?(RestClient::Response)
|
282
|
+
if response.code.to_i >= 300
|
283
|
+
response = RestClient::Response.create(
|
284
|
+
RestClient::Request.decode(response['content-encoding'], response.body),
|
285
|
+
response, request)
|
286
|
+
e = ServerError.new(response)
|
311
287
|
logger.error(e.to_s)
|
312
288
|
raise e
|
313
289
|
end
|
314
|
-
|
315
|
-
|
290
|
+
response = RestClient::Response.create(nil, response, request)
|
291
|
+
response.return!
|
316
292
|
end
|
317
293
|
|
318
|
-
logger.debug("Received HTTP response, code: #{
|
319
|
-
"#{
|
294
|
+
logger.debug("Received HTTP response, code: #{response.code}, headers: " \
|
295
|
+
"#{response.headers}, body: #{response.body}")
|
320
296
|
|
321
|
-
|
297
|
+
response
|
322
298
|
end
|
323
299
|
|
324
300
|
def get_user_agent
|
data/lib/aliyun/oss/protocol.rb
CHANGED
@@ -535,7 +535,7 @@ module Aliyun
|
|
535
535
|
headers[CALLBACK_HEADER] = opts[:callback].serialize
|
536
536
|
end
|
537
537
|
|
538
|
-
payload = HTTP::
|
538
|
+
payload = HTTP::StreamWriter.new(@config.upload_crc_enable, opts[:init_crc], &block)
|
539
539
|
r = @http.put(
|
540
540
|
{:bucket => bucket_name, :object => object_name},
|
541
541
|
{:headers => headers, :body => payload})
|
@@ -547,7 +547,7 @@ module Aliyun
|
|
547
547
|
end
|
548
548
|
|
549
549
|
if @config.upload_crc_enable && !r.headers[:x_oss_hash_crc64ecma].nil?
|
550
|
-
data_crc = payload.
|
550
|
+
data_crc = payload.data_crc
|
551
551
|
Aliyun::OSS::Util.crc_check(data_crc, r.headers[:x_oss_hash_crc64ecma], 'put')
|
552
552
|
end
|
553
553
|
|
@@ -593,16 +593,17 @@ module Aliyun
|
|
593
593
|
|
594
594
|
headers.merge!(to_lower_case(opts[:headers])) if opts.key?(:headers)
|
595
595
|
|
596
|
-
payload = HTTP::
|
596
|
+
payload = HTTP::StreamWriter.new(
|
597
|
+
@config.upload_crc_enable && !opts[:init_crc].nil?, opts[:init_crc], &block)
|
597
598
|
|
598
599
|
r = @http.post(
|
599
600
|
{:bucket => bucket_name, :object => object_name, :sub_res => sub_res},
|
600
601
|
{:headers => headers, :body => payload})
|
601
602
|
|
602
|
-
if @config.upload_crc_enable &&
|
603
|
-
!r.headers[:x_oss_hash_crc64ecma].nil? &&
|
603
|
+
if @config.upload_crc_enable &&
|
604
|
+
!r.headers[:x_oss_hash_crc64ecma].nil? &&
|
604
605
|
!opts[:init_crc].nil?
|
605
|
-
data_crc = payload.
|
606
|
+
data_crc = payload.data_crc
|
606
607
|
Aliyun::OSS::Util.crc_check(data_crc, r.headers[:x_oss_hash_crc64ecma], 'append')
|
607
608
|
end
|
608
609
|
|
@@ -780,7 +781,7 @@ module Aliyun
|
|
780
781
|
{:bucket => bucket_name, :object => object_name,
|
781
782
|
:sub_res => sub_res},
|
782
783
|
{:headers => headers}
|
783
|
-
) do |chunk|
|
784
|
+
) do |chunk|
|
784
785
|
if block_given?
|
785
786
|
# crc enable and no range and oss server support crc
|
786
787
|
data_crc = Aliyun::OSS::Util.crc(chunk, data_crc) if @config.download_crc_enable && range.nil?
|
@@ -1110,13 +1111,13 @@ module Aliyun
|
|
1110
1111
|
|
1111
1112
|
sub_res = {'partNumber' => part_no, 'uploadId' => txn_id}
|
1112
1113
|
|
1113
|
-
payload = HTTP::
|
1114
|
+
payload = HTTP::StreamWriter.new(@config.upload_crc_enable, &block)
|
1114
1115
|
r = @http.put(
|
1115
1116
|
{:bucket => bucket_name, :object => object_name, :sub_res => sub_res},
|
1116
1117
|
{:body => payload})
|
1117
1118
|
|
1118
1119
|
if @config.upload_crc_enable && !r.headers[:x_oss_hash_crc64ecma].nil?
|
1119
|
-
data_crc = payload.
|
1120
|
+
data_crc = payload.data_crc
|
1120
1121
|
Aliyun::OSS::Util.crc_check(data_crc, r.headers[:x_oss_hash_crc64ecma], 'put')
|
1121
1122
|
end
|
1122
1123
|
|
data/lib/aliyun/sts/protocol.rb
CHANGED
@@ -88,14 +88,14 @@ module Aliyun
|
|
88
88
|
:method => 'POST',
|
89
89
|
:url => @config.endpoint || ENDPOINT,
|
90
90
|
:payload => query
|
91
|
-
) do |response,
|
91
|
+
) do |response, &blk|
|
92
92
|
|
93
93
|
if response.code >= 300
|
94
94
|
e = ServerError.new(response)
|
95
95
|
logger.error(e.to_s)
|
96
96
|
raise e
|
97
97
|
else
|
98
|
-
response.return!(
|
98
|
+
response.return!(&blk)
|
99
99
|
end
|
100
100
|
end
|
101
101
|
|
data/lib/aliyun/version.rb
CHANGED
@@ -356,7 +356,7 @@ module Aliyun
|
|
356
356
|
|
357
357
|
context "acl, logging, website, referer, lifecycle" do
|
358
358
|
it "should update acl" do
|
359
|
-
query = {'acl' =>
|
359
|
+
query = {'acl' => nil}
|
360
360
|
stub_request(:put, request_path).with(:query => query)
|
361
361
|
|
362
362
|
@protocol.put_bucket_acl(@bucket, ACL::PUBLIC_READ)
|
@@ -366,7 +366,7 @@ module Aliyun
|
|
366
366
|
end
|
367
367
|
|
368
368
|
it "should get acl" do
|
369
|
-
query = {'acl' =>
|
369
|
+
query = {'acl' => nil}
|
370
370
|
return_acl = ACL::PUBLIC_READ
|
371
371
|
stub_request(:get, request_path)
|
372
372
|
.with(:query => query)
|
@@ -380,7 +380,7 @@ module Aliyun
|
|
380
380
|
end
|
381
381
|
|
382
382
|
it "should enable logging" do
|
383
|
-
query = {'logging' =>
|
383
|
+
query = {'logging' => nil}
|
384
384
|
stub_request(:put, request_path).with(:query => query)
|
385
385
|
|
386
386
|
logging_opts = BucketLogging.new(
|
@@ -393,7 +393,7 @@ module Aliyun
|
|
393
393
|
end
|
394
394
|
|
395
395
|
it "should disable logging" do
|
396
|
-
query = {'logging' =>
|
396
|
+
query = {'logging' => nil}
|
397
397
|
stub_request(:put, request_path).with(:query => query)
|
398
398
|
|
399
399
|
logging_opts = BucketLogging.new(:enable => false)
|
@@ -404,7 +404,7 @@ module Aliyun
|
|
404
404
|
end
|
405
405
|
|
406
406
|
it "should get logging" do
|
407
|
-
query = {'logging' =>
|
407
|
+
query = {'logging' => nil}
|
408
408
|
logging_opts = BucketLogging.new(
|
409
409
|
:enable => true,
|
410
410
|
:target_bucket => 'target-bucket', :target_prefix => 'foo')
|
@@ -421,7 +421,7 @@ module Aliyun
|
|
421
421
|
end
|
422
422
|
|
423
423
|
it "should delete logging" do
|
424
|
-
query = {'logging' =>
|
424
|
+
query = {'logging' => nil}
|
425
425
|
stub_request(:delete, request_path).with(:query => query)
|
426
426
|
|
427
427
|
@protocol.delete_bucket_logging(@bucket)
|
@@ -431,7 +431,7 @@ module Aliyun
|
|
431
431
|
end
|
432
432
|
|
433
433
|
it "should update website" do
|
434
|
-
query = {'website' =>
|
434
|
+
query = {'website' => nil}
|
435
435
|
stub_request(:put, request_path).with(:query => query)
|
436
436
|
|
437
437
|
website_opts = BucketWebsite.new(
|
@@ -443,7 +443,7 @@ module Aliyun
|
|
443
443
|
end
|
444
444
|
|
445
445
|
it "should get website" do
|
446
|
-
query = {'website' =>
|
446
|
+
query = {'website' => nil}
|
447
447
|
website_opts = BucketWebsite.new(
|
448
448
|
:enable => true, :index => 'index.html', :error => 'error.html')
|
449
449
|
|
@@ -459,7 +459,7 @@ module Aliyun
|
|
459
459
|
end
|
460
460
|
|
461
461
|
it "should delete website" do
|
462
|
-
query = {'website' =>
|
462
|
+
query = {'website' => nil}
|
463
463
|
stub_request(:delete, request_path).with(:query => query)
|
464
464
|
|
465
465
|
@protocol.delete_bucket_website(@bucket)
|
@@ -469,7 +469,7 @@ module Aliyun
|
|
469
469
|
end
|
470
470
|
|
471
471
|
it "should update referer" do
|
472
|
-
query = {'referer' =>
|
472
|
+
query = {'referer' => nil}
|
473
473
|
stub_request(:put, request_path).with(:query => query)
|
474
474
|
|
475
475
|
referer_opts = BucketReferer.new(
|
@@ -481,7 +481,7 @@ module Aliyun
|
|
481
481
|
end
|
482
482
|
|
483
483
|
it "should get referer" do
|
484
|
-
query = {'referer' =>
|
484
|
+
query = {'referer' => nil}
|
485
485
|
referer_opts = BucketReferer.new(
|
486
486
|
:allow_empty => true, :whitelist => ['xxx', 'yyy'])
|
487
487
|
|
@@ -497,7 +497,7 @@ module Aliyun
|
|
497
497
|
end
|
498
498
|
|
499
499
|
it "should update lifecycle" do
|
500
|
-
query = {'lifecycle' =>
|
500
|
+
query = {'lifecycle' => nil}
|
501
501
|
stub_request(:put, request_path).with(:query => query)
|
502
502
|
|
503
503
|
rules = (1..5).map do |i|
|
@@ -513,7 +513,7 @@ module Aliyun
|
|
513
513
|
end
|
514
514
|
|
515
515
|
it "should get lifecycle" do
|
516
|
-
query = {'lifecycle' =>
|
516
|
+
query = {'lifecycle' => nil}
|
517
517
|
return_rules = (1..5).map do |i|
|
518
518
|
LifeCycleRule.new(
|
519
519
|
:id => i, :enable => i % 2 == 0, :prefix => "foo#{i}",
|
@@ -532,7 +532,7 @@ module Aliyun
|
|
532
532
|
end
|
533
533
|
|
534
534
|
it "should delete lifecycle" do
|
535
|
-
query = {'lifecycle' =>
|
535
|
+
query = {'lifecycle' => nil}
|
536
536
|
stub_request(:delete, request_path).with(:query => query)
|
537
537
|
|
538
538
|
@protocol.delete_bucket_lifecycle(@bucket)
|
@@ -542,7 +542,7 @@ module Aliyun
|
|
542
542
|
end
|
543
543
|
|
544
544
|
it "should set cors" do
|
545
|
-
query = {'cors' =>
|
545
|
+
query = {'cors' => nil}
|
546
546
|
stub_request(:put, request_path).with(:query => query)
|
547
547
|
|
548
548
|
rules = (1..5).map do |i|
|
@@ -559,7 +559,7 @@ module Aliyun
|
|
559
559
|
end
|
560
560
|
|
561
561
|
it "should get cors" do
|
562
|
-
query = {'cors' =>
|
562
|
+
query = {'cors' => nil}
|
563
563
|
return_rules = (1..5).map do |i|
|
564
564
|
CORSRule.new(
|
565
565
|
:allowed_origins => (1..3).map {|x| "origin-#{x}"},
|
@@ -580,7 +580,7 @@ module Aliyun
|
|
580
580
|
end
|
581
581
|
|
582
582
|
it "should delete cors" do
|
583
|
-
query = {'cors' =>
|
583
|
+
query = {'cors' => nil}
|
584
584
|
|
585
585
|
stub_request(:delete, request_path).with(:query => query)
|
586
586
|
|
@@ -120,7 +120,7 @@ module Aliyun
|
|
120
120
|
|
121
121
|
context "bucket operations" do
|
122
122
|
it "should get acl" do
|
123
|
-
query = {'acl' =>
|
123
|
+
query = {'acl' => nil}
|
124
124
|
return_acl = ACL::PUBLIC_READ
|
125
125
|
|
126
126
|
stub_request(:get, bucket_url)
|
@@ -135,7 +135,7 @@ module Aliyun
|
|
135
135
|
end
|
136
136
|
|
137
137
|
it "should set acl" do
|
138
|
-
query = {'acl' =>
|
138
|
+
query = {'acl' => nil}
|
139
139
|
|
140
140
|
stub_request(:put, bucket_url).with(:query => query)
|
141
141
|
|
@@ -146,7 +146,7 @@ module Aliyun
|
|
146
146
|
end
|
147
147
|
|
148
148
|
it "should delete logging setting" do
|
149
|
-
query = {'logging' =>
|
149
|
+
query = {'logging' => nil}
|
150
150
|
|
151
151
|
stub_request(:delete, bucket_url).with(:query => query)
|
152
152
|
|
@@ -303,7 +303,7 @@ module Aliyun
|
|
303
303
|
|
304
304
|
it "should set custom headers when append object" do
|
305
305
|
key = 'ruby'
|
306
|
-
query = {'append' =>
|
306
|
+
query = {'append' => nil, 'position' => 11}
|
307
307
|
stub_request(:post, object_url(key)).with(:query => query)
|
308
308
|
|
309
309
|
@bucket.append_object(
|
@@ -362,7 +362,7 @@ module Aliyun
|
|
362
362
|
|
363
363
|
it "should append object from file" do
|
364
364
|
key = 'ruby'
|
365
|
-
query = {'append' =>
|
365
|
+
query = {'append' => nil, 'position' => 11}
|
366
366
|
stub_request(:post, object_url(key)).with(:query => query)
|
367
367
|
|
368
368
|
content = (1..10).map{ |i| i.to_s.rjust(9, '0') }.join("\n")
|
@@ -378,7 +378,7 @@ module Aliyun
|
|
378
378
|
|
379
379
|
it "should append object with acl" do
|
380
380
|
key = 'ruby'
|
381
|
-
query = {'append' =>
|
381
|
+
query = {'append' => nil, 'position' => 11}
|
382
382
|
stub_request(:post, object_url(key)).with(:query => query)
|
383
383
|
|
384
384
|
@bucket.append_object(key, 11, :acl => ACL::PUBLIC_READ_WRITE)
|
@@ -497,7 +497,7 @@ module Aliyun
|
|
497
497
|
query_1 = {
|
498
498
|
:prefix => 'list-',
|
499
499
|
'encoding-type' => 'url',
|
500
|
-
'uploads' =>
|
500
|
+
'uploads' => nil
|
501
501
|
}
|
502
502
|
return_up_1 = (1..5).map{ |i| Multipart::Transaction.new(
|
503
503
|
:id => "txn-#{i}",
|
@@ -513,7 +513,7 @@ module Aliyun
|
|
513
513
|
:prefix => 'list-',
|
514
514
|
'upload-id-marker' => 'txn-5',
|
515
515
|
'encoding-type' => 'url',
|
516
|
-
'uploads' =>
|
516
|
+
'uploads' => nil
|
517
517
|
}
|
518
518
|
return_up_2 = (6..8).map{ |i| Multipart::Transaction.new(
|
519
519
|
:id => "txn-#{i}",
|
@@ -26,8 +26,8 @@ module Aliyun
|
|
26
26
|
def crc_protocol
|
27
27
|
Protocol.new(
|
28
28
|
Config.new(:endpoint => @endpoint,
|
29
|
-
:access_key_id => 'xxx',
|
30
|
-
:access_key_secret => 'yyy',
|
29
|
+
:access_key_id => 'xxx',
|
30
|
+
:access_key_secret => 'yyy',
|
31
31
|
:upload_crc_enable => true,
|
32
32
|
:download_crc_enable => true))
|
33
33
|
end
|
@@ -111,7 +111,7 @@ module Aliyun
|
|
111
111
|
context "Initiate multipart upload" do
|
112
112
|
|
113
113
|
it "should POST to create transaction" do
|
114
|
-
query = {'uploads' =>
|
114
|
+
query = {'uploads' => nil}
|
115
115
|
stub_request(:post, request_path).with(:query => query)
|
116
116
|
|
117
117
|
@protocol.initiate_multipart_upload(
|
@@ -129,7 +129,7 @@ module Aliyun
|
|
129
129
|
end
|
130
130
|
|
131
131
|
it "should return transaction id" do
|
132
|
-
query = {'uploads' =>
|
132
|
+
query = {'uploads' => nil}
|
133
133
|
return_txn_id = 'zyx'
|
134
134
|
stub_request(:post, request_path).
|
135
135
|
with(:query => query).
|
@@ -143,7 +143,7 @@ module Aliyun
|
|
143
143
|
end
|
144
144
|
|
145
145
|
it "should raise Exception on error" do
|
146
|
-
query = {'uploads' =>
|
146
|
+
query = {'uploads' => nil}
|
147
147
|
|
148
148
|
code = 'InvalidArgument'
|
149
149
|
message = 'Invalid argument.'
|
@@ -462,7 +462,7 @@ module Aliyun
|
|
462
462
|
|
463
463
|
it "should GET to list multiparts" do
|
464
464
|
request_path = "#{@bucket}.#{@endpoint}/"
|
465
|
-
query = {'uploads' =>
|
465
|
+
query = {'uploads' => nil}
|
466
466
|
|
467
467
|
stub_request(:get, request_path).with(:query => query)
|
468
468
|
|
@@ -475,7 +475,7 @@ module Aliyun
|
|
475
475
|
it "should send extra params when list multiparts" do
|
476
476
|
request_path = "#{@bucket}.#{@endpoint}/"
|
477
477
|
query = {
|
478
|
-
'uploads' =>
|
478
|
+
'uploads' => nil,
|
479
479
|
'prefix' => 'foo-',
|
480
480
|
'upload-id-marker' => 'id-marker',
|
481
481
|
'key-marker' => 'key-marker',
|
@@ -501,7 +501,7 @@ module Aliyun
|
|
501
501
|
it "should get multipart transactions" do
|
502
502
|
request_path = "#{@bucket}.#{@endpoint}/"
|
503
503
|
query = {
|
504
|
-
'uploads' =>
|
504
|
+
'uploads' => nil,
|
505
505
|
'prefix' => 'foo-',
|
506
506
|
'upload-id-marker' => 'id-marker',
|
507
507
|
'key-marker' => 'key-marker',
|
@@ -548,7 +548,7 @@ module Aliyun
|
|
548
548
|
it "should decode object key" do
|
549
549
|
request_path = "#{@bucket}.#{@endpoint}/"
|
550
550
|
query = {
|
551
|
-
'uploads' =>
|
551
|
+
'uploads' => nil,
|
552
552
|
'prefix' => 'foo-',
|
553
553
|
'upload-id-marker' => 'id-marker',
|
554
554
|
'key-marker' => 'key-marker',
|
@@ -614,7 +614,7 @@ module Aliyun
|
|
614
614
|
|
615
615
|
it "should raise Exception on error" do
|
616
616
|
request_path = "#{@bucket}.#{@endpoint}/"
|
617
|
-
query = {'uploads' =>
|
617
|
+
query = {'uploads' => nil}
|
618
618
|
|
619
619
|
code = 'InvalidArgument'
|
620
620
|
message = 'Invalid argument.'
|