Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
82 changes: 79 additions & 3 deletions qcloud_cos/cos_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -2809,9 +2809,7 @@ def list_buckets(self, **kwargs):
config = CosConfig(Region=region, SecretId=secret_id, SecretKey=secret_key, Token=token) # 获取配置对象
client = CosS3Client(config)
# 获取账户下所有存储桶信息
response = logging_client.list_buckets(
Bucket='bucket'
)
response = client.list_buckets()
"""
headers = mapped(kwargs)
url = '{scheme}://service.cos.myqcloud.com/'.format(scheme=self._conf._scheme)
Expand Down Expand Up @@ -3427,6 +3425,84 @@ def update_object_meta(self, Bucket, Key, **kwargs):
)
return response

def put_bucket_encryption(self, Bucket, ServerSideEncryptionConfiguration={}, **kwargs):
"""设置执行存储桶下的默认加密配置

:param Bucket(string): 存储桶名称.
:param ServerSideEncryptionConfiguration(dict): 设置Bucket的加密规则
:param kwargs(dict): 设置请求的headers.
:return: None.
"""
# 类型为list的标签
lst = [
'<Rule>',
'</Rule>'
]
xml_config = format_xml(data=ServerSideEncryptionConfiguration, root='ServerSideEncryptionConfiguration', lst=lst)
headers = mapped(kwargs)
params = {'encryption': ''}
url = self._conf.uri(bucket=Bucket)
logger.info("put bucket encryption, url=:{url} ,headers=:{headers}".format(
url=url,
headers=headers))
rt = self.send_request(
method='PUT',
url=url,
bucket=Bucket,
auth=CosS3Auth(self._conf, params=params),
data=xml_config,
headers=headers,
params=params)

return None

def get_bucket_encryption(self, Bucket, **kwargs):
"""获取存储桶下的默认加密配置

:param Bucket(string): 存储桶名称.
:param kwargs(dict): 设置请求的headers.
:return(dict): 返回bucket的加密规则.
"""
headers = mapped(kwargs)
params = {'encryption': ''}
url = self._conf.uri(bucket=Bucket)
logger.info("get bucket encryption, url=:{url} ,headers=:{headers}".format(
url=url,
headers=headers))
rt = self.send_request(
method='GET',
url=url,
bucket=Bucket,
auth=CosS3Auth(self._conf, params=params),
headers=headers,
params=params)

data = xml_to_dict(rt.content)
format_dict(data, ['Rule'])
return data

def delete_bucket_encryption(self, Bucket, **kwargs):
"""用于删除指定存储桶下的默认加密配置

:param Bucket(string): 存储桶名称.
:param kwargs(dict): 设置请求的headers.
:return: None.
"""
headers = mapped(kwargs)
params = {'encryption': ''}
url = self._conf.uri(bucket=Bucket)
logger.info("delete bucket encryption, url=:{url} ,headers=:{headers}".format(
url=url,
headers=headers))
rt = self.send_request(
method='DELETE',
url=url,
bucket=Bucket,
auth=CosS3Auth(self._conf, params=params),
headers=headers,
params=params)

return None
def put_async_fetch_task(self, Bucket, FetchTaskConfiguration={}, **kwargs):
"""发起异步拉取对象到COS的任务

Expand Down
2 changes: 1 addition & 1 deletion qcloud_cos/resumable_downloader.py
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,7 @@ def __del_record(self):

def __check_crc(self):
logger.debug('start to check crc')
c64 = crcmod.mkCrcFun(0x142F0E1EBA9EA3693L, initCrc=0L, xorOut=0xffffffffffffffffL, rev=True)
c64 = crcmod.mkCrcFun(0x142F0E1EBA9EA3693, initCrc=0, xorOut=0xffffffffffffffff, rev=True)
with open(self.__dest_file_path, 'rb') as f:
local_crc64 = str(c64(f.read()))
object_crc64 = self.__object_info['x-cos-hash-crc64ecma']
Expand Down
2 changes: 1 addition & 1 deletion qcloud_cos/version.py
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@

__version__ = '5.1.8.2'
__version__ = '5.1.8.3'
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ def long_description():

setup(
name='cos-python-sdk-v5',
version='1.8.2',
version='1.8.3',
url='https://www.qcloud.com/',
license='MIT',
author='tiedu, lewzylu, channingliu',
Expand Down
23 changes: 23 additions & 0 deletions ut/test.py
Original file line number Diff line number Diff line change
Expand Up @@ -1212,6 +1212,29 @@ def test_download_file():
if os.path.exists(file_name):
os.remove(file_name)

def test_bucket_encryption():
"""测试存储桶默认加密配置"""
# 测试设置存储桶的默认加密配置
config_dict = {
'Rule': [
{
'ApplySideEncryptionConfiguration': {
'SSEAlgorithm': 'AES256',
}
},
]
}
client.put_bucket_encryption(test_bucket, config_dict)

# 测试获取存储桶默认加密配置
ret = client.get_bucket_encryption(test_bucket)
sse_algorithm = ret['Rule'][0]['ApplyServerSideEncryptionByDefault']['SSEAlgorithm']
assert(sse_algorithm == 'AES256')

# 删除存储桶默认加密配置
client.delete_bucket_encryption(test_bucket)


if __name__ == "__main__":
setUp()
"""
Expand Down