Skip to content

Commit c92ba31

Browse files
committed
add funtion of bucket encryption
1 parent 9bd4c1a commit c92ba31

File tree

2 files changed

+30
-28
lines changed

2 files changed

+30
-28
lines changed

qcloud_cos/cos_client.py

+16-24
Original file line numberDiff line numberDiff line change
@@ -3425,23 +3425,21 @@ def update_object_meta(self, Bucket, Key, **kwargs):
34253425
)
34263426
return response
34273427

3428-
def put_bucket_encryption(self, Bucket, SSEAlgorithm=None, **kwargs):
3428+
def put_bucket_encryption(self, Bucket, ServerSideEncryptionConfiguration={}, **kwargs):
34293429
"""设置执行存储桶下的默认加密配置
34303430
34313431
:param Bucket(string): 存储桶名称.
34323432
:param SSEAlgorithm(string): 要使用的服务端加密算法
34333433
:param kwargs(dict): 设置下载的headers.
34343434
:return(dict): 设置成功返回的结果.
34353435
"""
3436-
if SSEAlgorithm is None:
3437-
raise CosClientError('SSEAlgorithm is None and must be set!')
3438-
3439-
root = xml.etree.ElementTree.Element("ServerSideEncryptionConfiguration")
3440-
rule_node = xml.etree.ElementTree.SubElement(root, "Rule")
3441-
apply_node = xml.etree.ElementTree.SubElement(rule_node, "ApplySideEncryptionConfiguration")
3442-
xml.etree.ElementTree.SubElement(apply_node, "SSEAlgorithm").text = to_str(SSEAlgorithm)
3443-
body = xml.etree.ElementTree.tostring(root, encoding='utf-8')
3444-
3436+
# 类型为list的标签
3437+
lst = [
3438+
'<Rule>',
3439+
'</Rule>'
3440+
]
3441+
xml_config = format_xml(data=ServerSideEncryptionConfiguration, root='ServerSideEncryptionConfiguration', lst=lst)
3442+
logger.info('xml_config: {0}'.format(xml_config))
34453443
headers = mapped(kwargs)
34463444
params = {'encryption': ''}
34473445
url = self._conf.uri(bucket=Bucket)
@@ -3453,12 +3451,11 @@ def put_bucket_encryption(self, Bucket, SSEAlgorithm=None, **kwargs):
34533451
url=url,
34543452
bucket=Bucket,
34553453
auth=CosS3Auth(self._conf, params=params),
3456-
data=to_bytes(body),
3454+
data=xml_config,
34573455
headers=headers,
34583456
params=params)
34593457

3460-
response = dict(**rt.headers)
3461-
return response
3458+
return None
34623459

34633460
def get_bucket_encryption(self, Bucket, **kwargs):
34643461
"""获取存储桶下的默认加密配置
@@ -3480,15 +3477,11 @@ def get_bucket_encryption(self, Bucket, **kwargs):
34803477
auth=CosS3Auth(self._conf, params=params),
34813478
headers=headers,
34823479
params=params)
3483-
data = xml.etree.ElementTree.fromstring(rt.content)
3484-
sse_algorithm = None
3485-
rule = data.find('Rule')
3486-
if rule is not None:
3487-
apply = rule.find('ApplyServerSideEncryptionByDefault')
3488-
if apply is not None:
3489-
sse_algorithm = to_str(apply.find('SSEAlgorithm').text)
34903480

3491-
return sse_algorithm
3481+
data = xml_to_dict(rt.content)
3482+
format_dict(data, ['Rule'])
3483+
logger.info('data: {0}'.format(data))
3484+
return data
34923485

34933486
def delete_bucket_encryption(self, Bucket, **kwargs):
34943487
"""用于删除指定存储桶下的默认加密配置
@@ -3500,7 +3493,7 @@ def delete_bucket_encryption(self, Bucket, **kwargs):
35003493
headers = mapped(kwargs)
35013494
params = {'encryption': ''}
35023495
url = self._conf.uri(bucket=Bucket)
3503-
logger.info("put bucket encryption, url=:{url} ,headers=:{headers}".format(
3496+
logger.info("delete bucket encryption, url=:{url} ,headers=:{headers}".format(
35043497
url=url,
35053498
headers=headers))
35063499
rt = self.send_request(
@@ -3511,8 +3504,7 @@ def delete_bucket_encryption(self, Bucket, **kwargs):
35113504
headers=headers,
35123505
params=params)
35133506

3514-
response = dict(**rt.headers)
3515-
return response
3507+
return None
35163508

35173509

35183510
if __name__ == "__main__":

ut/test.py

+14-4
Original file line numberDiff line numberDiff line change
@@ -1215,14 +1215,24 @@ def test_download_file():
12151215
def test_bucket_encryption():
12161216
"""测试存储桶默认加密配置"""
12171217
# 测试设置存储桶的默认加密配置
1218-
client.put_bucket_encryption(copy_test_bucket, 'AES256')
1218+
config_dict = {
1219+
'Rule': [
1220+
{
1221+
'ApplySideEncryptionConfiguration': {
1222+
'SSEAlgorithm': 'AES256',
1223+
}
1224+
},
1225+
]
1226+
}
1227+
client.put_bucket_encryption(test_bucket, config_dict)
12191228

12201229
# 测试获取存储桶默认加密配置
1221-
ret = client.get_bucket_encryption(copy_test_bucket)
1222-
assert(ret == 'AES256')
1230+
ret = client.get_bucket_encryption(test_bucket)
1231+
sse_algorithm = ret['Rule'][0]['ApplyServerSideEncryptionByDefault']['SSEAlgorithm']
1232+
assert(sse_algorithm == 'AES256')
12231233

12241234
# 删除存储桶默认加密配置
1225-
client.delete_bucket_encryption(copy_test_bucket)
1235+
client.delete_bucket_encryption(test_bucket)
12261236

12271237

12281238
if __name__ == "__main__":

0 commit comments

Comments
 (0)