Skip to content

Commit 5705b07

Browse files
Dev 2106 (#282)
* add transfer acceleration
1 parent 23e5556 commit 5705b07

File tree

7 files changed

+119
-1
lines changed

7 files changed

+119
-1
lines changed

oss2/api.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -397,6 +397,7 @@ class Bucket(_Base):
397397
REPLICATION = "replication"
398398
REPLICATION_LOCATION = 'replicationLocation'
399399
REPLICATION_PROGRESS = 'replicationProgress'
400+
TRANSFER_ACCELERATION = 'transferAcceleration'
400401

401402

402403
def __init__(self, auth, endpoint, bucket_name,
@@ -2492,6 +2493,33 @@ def _get_bucket_config(self, config):
24922493
logger.debug("Get bucket config done, req_id: {0}, status_code: {1}".format(resp.request_id, resp.status))
24932494
return resp
24942495

2496+
def put_bucket_transfer_acceleration(self, enabled):
2497+
"""为存储空间(Bucket)配置传输加速
2498+
2499+
:param str enabled : 是否开启传输加速。true:开启传输加速; false:关闭传输加速.
2500+
:return: :class:`RequestResult <oss2.models.RequestResult>`
2501+
"""
2502+
logger.debug("Start to bucket transfer acceleration, bucket: {0}, enabled: {1}."
2503+
.format(self.bucket_name, enabled))
2504+
data = xml_utils.to_put_bucket_transfer_acceleration(enabled)
2505+
headers = http.CaseInsensitiveDict()
2506+
headers['Content-MD5'] = utils.content_md5(data)
2507+
resp = self.__do_bucket('PUT', data=data, params={Bucket.TRANSFER_ACCELERATION: ''}, headers=headers)
2508+
logger.debug("bucket transfer acceleration done, req_id: {0}, status_code: {1}".format(resp.request_id, resp.status))
2509+
2510+
return RequestResult(resp)
2511+
2512+
def get_bucket_transfer_acceleration(self):
2513+
"""获取目标存储空间(Bucket)的传输加速配置
2514+
2515+
:return: :class:`GetBucketReplicationResult <oss2.models.GetBucketReplicationResult>`
2516+
"""
2517+
logger.debug("Start to get bucket transfer acceleration: {0}".format(self.bucket_name))
2518+
resp = self.__do_bucket('GET', params={Bucket.TRANSFER_ACCELERATION: ''})
2519+
logger.debug("Get bucket transfer acceleration done, req_id: {0}, status_code: {1}".format(resp.request_id, resp.status))
2520+
2521+
return self._parse_result(resp, xml_utils.parse_get_bucket_transfer_acceleration_result, GetBucketTransferAccelerationResult)
2522+
24952523
def __do_object(self, method, key, **kwargs):
24962524
return self._do(method, self.bucket_name, key, **kwargs)
24972525

oss2/auth.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ class ProviderAuth(AuthBase):
8383
'versioning', 'versionId', 'policy', 'requestPayment', 'x-oss-traffic-limit', 'qosInfo', 'asyncFetch',
8484
'x-oss-request-payer', 'sequential', 'inventory', 'inventoryId', 'continuation-token', 'callback',
8585
'callback-var', 'worm', 'wormId', 'wormExtend', 'replication', 'replicationLocation',
86-
'replicationProgress']
86+
'replicationProgress', 'transferAcceleration']
8787
)
8888

8989
def _sign_request(self, req, bucket_name, key):

oss2/exceptions.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -309,6 +309,9 @@ class InvalidWORMConfiguration(ServerError):
309309
status = 400
310310
code = 'InvalidWORMConfiguration'
311311

312+
class NoSuchTransferAccelerationConfiguration(ServerError):
313+
status = 404
314+
code = 'NoSuchTransferAccelerationConfiguration'
312315

313316
def make_exception(resp):
314317
status = resp.status

oss2/models.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2175,3 +2175,14 @@ class GetBucketReplicationProgressResult(RequestResult):
21752175
def __init__(self, resp):
21762176
super(GetBucketReplicationProgressResult, self).__init__(resp)
21772177
self.progress = None
2178+
2179+
2180+
class GetBucketTransferAccelerationResult(RequestResult):
2181+
"""获取目标存储空间(Bucket)的传输加速配置。
2182+
2183+
:param enabled: Bucket传输加速状态
2184+
:type progress: class:`GetBucketTransferAccelerationResult <oss2.models.GetBucketTransferAccelerationResult>`。
2185+
"""
2186+
def __init__(self, resp):
2187+
super(GetBucketTransferAccelerationResult, self).__init__(resp)
2188+
self.enabled = None

oss2/xml_utils.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1694,3 +1694,13 @@ def parse_get_bucket_replication_progress_result(result, body):
16941694

16951695
result.progress = progress
16961696

1697+
1698+
def to_put_bucket_transfer_acceleration(enabled):
1699+
root = ElementTree.Element('TransferAccelerationConfiguration')
1700+
_add_text_child(root, 'Enabled', str(enabled))
1701+
return _node_to_string(root)
1702+
1703+
1704+
def parse_get_bucket_transfer_acceleration_result(result, body):
1705+
root = ElementTree.fromstring(body)
1706+
result.enabled = _find_tag(root, "Enabled")
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
from .common import *
2+
3+
4+
class TestBucketTransferAccelerat(OssTestCase):
5+
def test_bucket_transfer_acceleration_normal(self):
6+
result = self.bucket.put_bucket_transfer_acceleration('true')
7+
self.assertEqual(200, result.status)
8+
9+
get_result = self.bucket.get_bucket_transfer_acceleration()
10+
self.assertEqual('true', get_result.enabled)
11+
12+
def test_bucket_worm_illegal(self):
13+
self.assertRaises(oss2.exceptions.NoSuchTransferAccelerationConfiguration, self.bucket.get_bucket_transfer_acceleration)
14+
15+
16+
if __name__ == '__main__':
17+
unittest.main()

unittests/test_bucket.py

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -820,6 +820,55 @@ def test_delete_bucket_policy(self, do_request):
820820

821821
self.assertRequest(req_info, request_text)
822822

823+
@patch('oss2.Session.do_request')
824+
def test_put_bucket_transfer_acceleration(self, do_request):
825+
request_text = '''PUT /?transferAcceleration HTTP/1.1
826+
Date: Fri , 30 Apr 2021 13:08:38 GMT
827+
Content-Length:443
828+
Host: ming-oss-share.oss-cn-hangzhou.aliyuncs.com
829+
Authorization: OSS qn6qrrqxo2oawuk53otf****:PYbzsdWAIWAlMW8luk****
830+
831+
<?xml version="1.0" encoding="UTF-8"?>
832+
<TransferAccelerationConfiguration><Enabled>true</Enabled>
833+
</TransferAccelerationConfiguration>'''
834+
835+
response_text = '''HTTP/1.1 200 OK
836+
x-oss-request-id: 534B371674A4D890****
837+
Date: Fri , 30 Apr 2021 13:08:38 GMT
838+
Content-Length: 443
839+
Connection: keep-alive
840+
Server: AliyunOSS'''
841+
842+
req_info = mock_response(do_request, response_text)
843+
844+
result = bucket().put_bucket_transfer_acceleration('true')
845+
846+
self.assertRequest(req_info, request_text)
847+
848+
@patch('oss2.Session.do_request')
849+
def test_get_bucket_transfer_acceleration(self, do_request):
850+
request_text = '''GET /?transferAcceleration HTTP/1.1
851+
Date: Fri , 30 Apr 2021 13:08:38 GMT
852+
Content-Length:443
853+
Host: ming-oss-share.oss-cn-hangzhou.aliyuncs.com
854+
Authorization: OSS qn6qrrqxo2oawuk53otf****:PYbzsdWAIWAlMW8luk****'''
855+
856+
response_text = '''HTTP/1.1 200 OK
857+
x-oss-request-id: 534B371674E88A4D8906****
858+
Date: Fri , 30 Apr 2021 13:08:38 GMT
859+
860+
<?xml version="1.0" encoding="UTF-8"?>
861+
<TransferAccelerationConfiguration>
862+
<Enabled>true</Enabled>
863+
</TransferAccelerationConfiguration>'''
864+
865+
req_info = mock_response(do_request, response_text)
866+
867+
result = bucket().get_bucket_transfer_acceleration()
868+
869+
self.assertRequest(req_info, request_text)
870+
self.assertEqual(result.enabled, 'true')
871+
823872

824873
if __name__ == '__main__':
825874
unittest.main()

0 commit comments

Comments
 (0)