fog-aliyun 0.3.8 → 0.3.9
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/fog/aliyun/models/storage/directories.rb +30 -7
- data/lib/fog/aliyun/models/storage/directory.rb +1 -3
- data/lib/fog/aliyun/models/storage/file.rb +13 -13
- data/lib/fog/aliyun/models/storage/files.rb +35 -22
- data/lib/fog/aliyun/requests/storage/get_bucket.rb +27 -2
- data/lib/fog/aliyun/requests/storage/list_objects.rb +6 -6
- data/lib/fog/aliyun/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1282dc25fa74615eb50ae3d68e2e6a4525712cf12d7b2af1741a18b61b4842da
|
4
|
+
data.tar.gz: 07b73a4fcfb1ad04d1bf16d5127153b554633afe7a91aa31a1675533680b1478
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0bd08522fda123aa1a0fac945ca83bf09a16ac811594eafb8b3d36d2d4f354298dc8146dfe1c64608dc90a3d1fb55c9bc4c9a1ab647316d63048cda15d6ecb54
|
7
|
+
data.tar.gz: 346b5a912c43de55a7ed3067d7fb1bfc3c8e7f216e512eb880aa9eb7c5f144bc32857e786e2346bef2034f7ee0125179497afcf88736e61da4159aec1f9dbf09
|
@@ -30,6 +30,9 @@ module Fog
|
|
30
30
|
# If key is a directory(including /), return an existed or a new one;
|
31
31
|
# If key does not contain /, if bucket, return '', else return an existed or a new one directory;
|
32
32
|
def get(key, options = {})
|
33
|
+
if key.is_a? Array
|
34
|
+
key = key[0]
|
35
|
+
end
|
33
36
|
if !key.nil? && key != '' && key != '.'
|
34
37
|
key = key.chomp('/')
|
35
38
|
if key.include? '/'
|
@@ -37,14 +40,34 @@ module Fog
|
|
37
40
|
ret = service.head_object(dir, options)
|
38
41
|
new(key: key) if ret.data[:status] == 200
|
39
42
|
else
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
43
|
+
remap_attributes(options, {
|
44
|
+
:delimiter => 'delimiter',
|
45
|
+
:marker => 'marker',
|
46
|
+
:max_keys => 'max-keys',
|
47
|
+
:prefix => 'prefix'
|
48
|
+
})
|
49
|
+
data = service.get_bucket(key, options)
|
50
|
+
directory = new(:key => data['Name'], :is_persisted => true)
|
51
|
+
options = {}
|
52
|
+
for k, v in data
|
53
|
+
if ['CommonPrefixes', 'Delimiter', 'IsTruncated', 'Marker', 'MaxKeys', 'Prefix'].include?(k)
|
54
|
+
# Sometimes, the v will be a Array, like "Name"=>["blobstore-droplet1"], "Prefix"=>[{}], "Marker"=>[{}], "MaxKeys"=>["100"], "Delimiter"=>[{}], "IsTruncated"=>["false"]
|
55
|
+
# and there needs to parse them
|
56
|
+
if !v.nil? && (v.is_a? Array) && (v.size > 0)
|
57
|
+
if v[0].is_a? Hash
|
58
|
+
v = nil
|
59
|
+
else
|
60
|
+
v = v[0]
|
61
|
+
end
|
62
|
+
end
|
63
|
+
options[k] = v
|
64
|
+
end
|
65
|
+
end
|
66
|
+
directory.files.merge_attributes(options)
|
67
|
+
if data.key?('Contents') && !data['Contents'].nil?
|
68
|
+
directory.files.load(data['Contents'])
|
47
69
|
end
|
70
|
+
directory
|
48
71
|
end
|
49
72
|
else
|
50
73
|
new(key: '')
|
@@ -7,7 +7,7 @@ module Fog
|
|
7
7
|
module Storage
|
8
8
|
class Aliyun
|
9
9
|
class Directory < Fog::Model
|
10
|
-
identity :key
|
10
|
+
identity :key, :aliases => ['Key', 'Name', 'name']
|
11
11
|
|
12
12
|
def destroy
|
13
13
|
requires :key
|
@@ -15,7 +15,6 @@ module Fog
|
|
15
15
|
ret = service.list_objects(prefix: prefix)['Contents']
|
16
16
|
|
17
17
|
if ret.nil?
|
18
|
-
puts ' Not found: Direction not exist!'
|
19
18
|
false
|
20
19
|
elsif ret.size == 1
|
21
20
|
service.delete_container(key)
|
@@ -48,7 +47,6 @@ module Fog
|
|
48
47
|
if !key.nil? && key != '' && key != '.' && !(key.include? '/')
|
49
48
|
data = service.get_bucket(key)
|
50
49
|
if data.class == Hash && data.key?('Code') && !data['Code'].nil? && !data['Code'].empty?
|
51
|
-
puts "[INFO] The key #{key} is not a bucket and create one folder named with it."
|
52
50
|
service.put_container(key)
|
53
51
|
end
|
54
52
|
end
|
@@ -6,7 +6,7 @@ module Fog
|
|
6
6
|
module Storage
|
7
7
|
class Aliyun
|
8
8
|
class File < Fog::Model
|
9
|
-
identity :key, aliases: 'name'
|
9
|
+
identity :key, aliases: ['Key', 'Name', 'name']
|
10
10
|
attribute :date, aliases: 'Date'
|
11
11
|
attribute :content_length, aliases: 'Content-Length', type: :integer
|
12
12
|
attribute :content_type, aliases: 'Content-Type'
|
@@ -35,32 +35,32 @@ module Fog
|
|
35
35
|
|
36
36
|
def copy(target_directory_key, target_file_key, options = {})
|
37
37
|
requires :directory, :key
|
38
|
-
directory_key = collection.check_directory_key(directory.key)
|
38
|
+
source_bucket, directory_key = collection.check_directory_key(directory.key)
|
39
39
|
source_object = if directory_key == ''
|
40
40
|
key
|
41
41
|
else
|
42
42
|
directory_key + '/' + key
|
43
43
|
end
|
44
|
-
target_directory_key = collection.check_directory_key(target_directory_key)
|
44
|
+
target_bucket, target_directory_key = collection.check_directory_key(target_directory_key)
|
45
45
|
target_object = if target_directory_key == ''
|
46
46
|
target_file_key
|
47
47
|
else
|
48
48
|
target_directory_key + '/' + target_file_key
|
49
49
|
end
|
50
|
-
service.copy_object(
|
50
|
+
service.copy_object(source_bucket, source_object, target_bucket, target_object, options)
|
51
51
|
target_directory = service.directories.new(key: target_directory_key)
|
52
52
|
target_directory.files.get(target_file_key)
|
53
53
|
end
|
54
54
|
|
55
55
|
def destroy
|
56
56
|
requires :directory, :key
|
57
|
-
directory_key = collection.check_directory_key(directory.key)
|
57
|
+
bucket_name, directory_key = collection.check_directory_key(directory.key)
|
58
58
|
object = if directory_key == ''
|
59
59
|
key
|
60
60
|
else
|
61
61
|
directory_key + '/' + key
|
62
62
|
end
|
63
|
-
service.delete_object(object)
|
63
|
+
service.delete_object(object, bucket: bucket_name)
|
64
64
|
true
|
65
65
|
end
|
66
66
|
|
@@ -94,13 +94,13 @@ module Fog
|
|
94
94
|
expires = expires.nil? ? 0 : expires.to_i
|
95
95
|
|
96
96
|
requires :directory, :key
|
97
|
-
directory_key = collection.check_directory_key(directory.key)
|
97
|
+
bucket_name, directory_key = collection.check_directory_key(directory.key)
|
98
98
|
object = if directory_key == ''
|
99
99
|
key
|
100
100
|
else
|
101
101
|
directory_key + '/' + key
|
102
102
|
end
|
103
|
-
service.get_object_http_url_public(object, expires, options)
|
103
|
+
service.get_object_http_url_public(object, expires, options.merge(bucket: bucket_name))
|
104
104
|
end
|
105
105
|
|
106
106
|
def public_url
|
@@ -113,16 +113,16 @@ module Fog
|
|
113
113
|
options['Content-Type'] = content_type if content_type
|
114
114
|
options['Content-Disposition'] = content_disposition if content_disposition
|
115
115
|
options.merge!(metadata_to_headers)
|
116
|
-
directory_key = collection.check_directory_key(directory.key)
|
116
|
+
bucket_name, directory_key = collection.check_directory_key(directory.key)
|
117
117
|
object = if directory_key == ''
|
118
118
|
key
|
119
119
|
else
|
120
120
|
directory_key + '/' + key
|
121
121
|
end
|
122
122
|
if body.is_a?(::File)
|
123
|
-
data = service.put_object(object, body, options).data
|
123
|
+
data = service.put_object(object, body, options.merge(bucket: bucket_name)).data
|
124
124
|
elsif body.is_a?(String)
|
125
|
-
data = service.put_object_with_body(object, body, options).data
|
125
|
+
data = service.put_object_with_body(object, body, options.merge(bucket: bucket_name)).data
|
126
126
|
else
|
127
127
|
raise Fog::Storage::Aliyun::Error, " Forbidden: Invalid body type: #{body.class}!"
|
128
128
|
end
|
@@ -172,14 +172,14 @@ module Fog
|
|
172
172
|
|
173
173
|
def metadata_attributes
|
174
174
|
if last_modified
|
175
|
-
directory_key = collection.check_directory_key(directory.key)
|
175
|
+
bucket_name, directory_key = collection.check_directory_key(directory.key)
|
176
176
|
object = if directory_key == ''
|
177
177
|
key
|
178
178
|
else
|
179
179
|
directory_key + '/' + key
|
180
180
|
end
|
181
181
|
|
182
|
-
data = service.head_object(object).data
|
182
|
+
data = service.head_object(object, bucket: bucket_name).data
|
183
183
|
if data[:status] == 200
|
184
184
|
headers = data[:headers]
|
185
185
|
headers.select! { |k, _v| metadata_attribute?(k) }
|
@@ -9,9 +9,13 @@ module Fog
|
|
9
9
|
class Files < Fog::Collection
|
10
10
|
attribute :directory
|
11
11
|
attribute :limit
|
12
|
-
attribute :
|
12
|
+
attribute :prefix, :aliases => 'Prefix'
|
13
13
|
attribute :path
|
14
|
-
attribute :
|
14
|
+
attribute :common_prefixes, :aliases => 'CommonPrefixes'
|
15
|
+
attribute :delimiter, :aliases => 'Delimiter'
|
16
|
+
attribute :is_truncated, :aliases => 'IsTruncated'
|
17
|
+
attribute :marker, :aliases => 'Marker'
|
18
|
+
attribute :max_keys, :aliases => ['MaxKeys', 'max-keys']
|
15
19
|
|
16
20
|
model Fog::Storage::Aliyun::File
|
17
21
|
|
@@ -21,6 +25,10 @@ module Fog
|
|
21
25
|
# If so, it will return directly to avoid to create a new redundant folder named with directory_key.
|
22
26
|
# This point will be applied to multi-bucket and make bucket as a directory scenario.
|
23
27
|
def check_directory_key(directory_key)
|
28
|
+
bucket_name = nil
|
29
|
+
if directory_key.is_a? Array
|
30
|
+
directory_key = directory_key[0]
|
31
|
+
end
|
24
32
|
if directory_key != ''
|
25
33
|
# trim the suffix '/'
|
26
34
|
directory_key = directory_key.chomp('/')
|
@@ -29,25 +37,23 @@ module Fog
|
|
29
37
|
directory_key
|
30
38
|
else
|
31
39
|
data = service.get_bucket(directory_key)
|
32
|
-
puts "[DEBUG] Getting the bucket named with directory name #{directory_key}..."
|
33
40
|
if data.class == Hash && data.key?('Code') && !data['Code'].nil? && !data['Code'].empty?
|
34
|
-
puts "[INFO] The directory name #{directory_key} is not a bucket and will create one folder named with it."
|
35
41
|
directory_key
|
36
42
|
else
|
37
|
-
|
38
|
-
''
|
43
|
+
bucket_name = directory_key
|
44
|
+
directory_key = ''
|
39
45
|
end
|
40
46
|
end
|
41
|
-
else
|
42
|
-
''
|
43
47
|
end
|
48
|
+
return bucket_name, directory_key
|
44
49
|
end
|
45
50
|
|
46
51
|
def all(_options = {})
|
47
52
|
requires :directory
|
48
|
-
directory_key = check_directory_key(directory.key)
|
49
|
-
|
50
|
-
|
53
|
+
bucket_name, directory_key = check_directory_key(directory.key)
|
54
|
+
prefix_value = prefix
|
55
|
+
prefix_value = directory_key + '/' + prefix if directory_key != '' && directory_key != '.' && !directory_key.nil?
|
56
|
+
files = service.list_objects(prefix: prefix_value, bucket: bucket_name)['Contents']
|
51
57
|
return if files.nil?
|
52
58
|
data = []
|
53
59
|
i = 0
|
@@ -88,14 +94,14 @@ module Fog
|
|
88
94
|
|
89
95
|
def get(key)
|
90
96
|
requires :directory
|
91
|
-
directory_key = check_directory_key(directory.key)
|
97
|
+
bucket_name, directory_key = check_directory_key(directory.key)
|
92
98
|
object = if directory_key == ''
|
93
99
|
key
|
94
100
|
else
|
95
101
|
directory_key + '/' + key
|
96
102
|
end
|
97
103
|
begin
|
98
|
-
data = service.get_object(object)
|
104
|
+
data = service.get_object(object, nil, bucket: bucket_name)
|
99
105
|
rescue StandardError => error
|
100
106
|
case error.response.body
|
101
107
|
when %r{<Code>NoSuchKey</Code>},%r{<Code>SymlinkTargetNotExist</Code>}
|
@@ -115,7 +121,7 @@ module Fog
|
|
115
121
|
_end = i * Excon::CHUNK_SIZE - 1
|
116
122
|
range = "#{_start}-#{_end}"
|
117
123
|
begin
|
118
|
-
data = service.get_object(object, range)
|
124
|
+
data = service.get_object(object, range, bucket: bucket_name)
|
119
125
|
chunk = data[:body]
|
120
126
|
rescue StandardError => error
|
121
127
|
case error.response.body
|
@@ -157,48 +163,48 @@ module Fog
|
|
157
163
|
|
158
164
|
def get_url(key)
|
159
165
|
requires :directory
|
160
|
-
directory_key = check_directory_key(directory.key)
|
166
|
+
bucket_name, directory_key = check_directory_key(directory.key)
|
161
167
|
object = if directory_key == ''
|
162
168
|
key
|
163
169
|
else
|
164
170
|
directory_key + '/' + key
|
165
171
|
end
|
166
|
-
service.get_object_http_url_public(object, 3600)
|
172
|
+
service.get_object_http_url_public(object, 3600, bucket: bucket_name)
|
167
173
|
end
|
168
174
|
|
169
175
|
def get_http_url(key, expires, options = {})
|
170
176
|
requires :directory
|
171
|
-
directory_key = check_directory_key(directory.key)
|
177
|
+
bucket_name, directory_key = check_directory_key(directory.key)
|
172
178
|
object = if directory_key == ''
|
173
179
|
key
|
174
180
|
else
|
175
181
|
directory_key + '/' + key
|
176
182
|
end
|
177
183
|
expires = expires.nil? ? 0 : expires.to_i
|
178
|
-
service.get_object_http_url_public(object, expires, options)
|
184
|
+
service.get_object_http_url_public(object, expires, options.merge(bucket: bucket_name))
|
179
185
|
end
|
180
186
|
|
181
187
|
def get_https_url(key, expires, options = {})
|
182
188
|
requires :directory
|
183
|
-
directory_key = check_directory_key(directory.key)
|
189
|
+
bucket_name, directory_key = check_directory_key(directory.key)
|
184
190
|
object = if directory_key == ''
|
185
191
|
key
|
186
192
|
else
|
187
193
|
directory_key + '/' + key
|
188
194
|
end
|
189
195
|
expires = expires.nil? ? 0 : expires.to_i
|
190
|
-
service.get_object_https_url_public(object, expires, options)
|
196
|
+
service.get_object_https_url_public(object, expires, options.merge(bucket: bucket_name))
|
191
197
|
end
|
192
198
|
|
193
199
|
def head(key, _options = {})
|
194
200
|
requires :directory
|
195
|
-
directory_key = check_directory_key(directory.key)
|
201
|
+
bucket_name, directory_key = check_directory_key(directory.key)
|
196
202
|
object = if directory_key == ''
|
197
203
|
key
|
198
204
|
else
|
199
205
|
directory_key + '/' + key
|
200
206
|
end
|
201
|
-
data = service.head_object(object).data
|
207
|
+
data = service.head_object(object, bucket: bucket_name).data
|
202
208
|
return nil if data[:status] == 404
|
203
209
|
lastModified = data[:headers]['Last-Modified']
|
204
210
|
last_modified = (Time.parse(lastModified).localtime if !lastModified.nil? && lastModified != '')
|
@@ -225,6 +231,13 @@ module Fog
|
|
225
231
|
|
226
232
|
def new(attributes = {})
|
227
233
|
requires :directory
|
234
|
+
# Sometimes, the v will be a Array, like "Prefix"=>[{}], "Marker"=>[xxxx], "MaxKeys"=>["100"], "IsTruncated"=>["false"]
|
235
|
+
# and there needs to parse them
|
236
|
+
for k, v in attributes
|
237
|
+
if !v.nil? && (v.is_a? Array) && (v.size > 0)
|
238
|
+
attributes[k] = v[0]
|
239
|
+
end
|
240
|
+
end
|
228
241
|
super({ directory: directory }.merge!(attributes))
|
229
242
|
end
|
230
243
|
end
|
@@ -4,7 +4,7 @@ module Fog
|
|
4
4
|
module Storage
|
5
5
|
class Aliyun
|
6
6
|
class Real
|
7
|
-
def get_bucket(bucket)
|
7
|
+
def get_bucket(bucket, options = {})
|
8
8
|
location = get_bucket_location(bucket)
|
9
9
|
# If there is an error, it will return a Hash with error code, host id and others
|
10
10
|
# If can not get a valid location, will return one using region
|
@@ -15,13 +15,38 @@ module Fog
|
|
15
15
|
location = 'oss-' + @aliyun_region_id
|
16
16
|
end
|
17
17
|
endpoint = 'http://' + location + '.aliyuncs.com'
|
18
|
+
|
19
|
+
prefix = options['prefix']
|
20
|
+
marker = options['marker']
|
21
|
+
maxKeys = options['max_keys']
|
22
|
+
delimiter = options['delimiter']
|
23
|
+
path = ''
|
24
|
+
if prefix
|
25
|
+
path += '/?prefix=' + prefix
|
26
|
+
path += '&marker=' + marker if marker
|
27
|
+
path += '&max-keys=' + maxKeys.to_s if maxKeys
|
28
|
+
path += '&delimiter=' + delimiter if delimiter
|
29
|
+
|
30
|
+
elsif marker
|
31
|
+
path += '/?marker=' + marker
|
32
|
+
path += '&max-keys=' + maxKeys.to_s if maxKeys
|
33
|
+
path += '&delimiter=' + delimiter if delimiter
|
34
|
+
|
35
|
+
elsif maxKeys
|
36
|
+
path += '/?max-keys=' + maxKeys.to_s
|
37
|
+
path += '&delimiter=' + delimiter if delimiter
|
38
|
+
elsif delimiter
|
39
|
+
path += '/?delimiter=' + delimiter
|
40
|
+
end
|
41
|
+
|
18
42
|
resource = bucket + '/'
|
19
43
|
ret = request(
|
20
44
|
expects: [200, 203, 404],
|
21
45
|
method: 'GET',
|
22
46
|
bucket: bucket,
|
23
47
|
resource: resource,
|
24
|
-
endpoint: endpoint
|
48
|
+
endpoint: endpoint,
|
49
|
+
path: path
|
25
50
|
)
|
26
51
|
xml = ret.data[:body]
|
27
52
|
XmlSimple.xml_in(xml)
|
@@ -14,21 +14,21 @@ module Fog
|
|
14
14
|
|
15
15
|
path = ''
|
16
16
|
if prefix
|
17
|
-
path += '
|
17
|
+
path += '/?prefix=' + prefix
|
18
18
|
path += '&marker=' + marker if marker
|
19
|
-
path += '&max-keys=' + maxKeys if maxKeys
|
19
|
+
path += '&max-keys=' + maxKeys.to_s if maxKeys
|
20
20
|
path += '&delimiter=' + delimiter if delimiter
|
21
21
|
|
22
22
|
elsif marker
|
23
|
-
path += '
|
24
|
-
path += '&max-keys=' + maxKeys if maxKeys
|
23
|
+
path += '/?marker=' + marker
|
24
|
+
path += '&max-keys=' + maxKeys.to_s if maxKeys
|
25
25
|
path += '&delimiter=' + delimiter if delimiter
|
26
26
|
|
27
27
|
elsif maxKeys
|
28
|
-
path += '
|
28
|
+
path += '/?max-keys=' + maxKeys.to_s
|
29
29
|
path += '&delimiter=' + delimiter if delimiter
|
30
30
|
elsif delimiter
|
31
|
-
path += '
|
31
|
+
path += '/?delimiter=' + delimiter
|
32
32
|
end
|
33
33
|
|
34
34
|
resource = bucket + '/'
|
data/lib/fog/aliyun/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fog-aliyun
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Qinsi Deng, Jianxun Li, Jane Han, Guimin He
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-05-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|