Skip to content

Commit fedd946

Browse files
authored
Merge pull request #240 from l-iberty/feat/new-list-buckets
Feat/new list buckets
2 parents 6079db1 + 6436093 commit fedd946

File tree

2 files changed

+56
-4
lines changed

2 files changed

+56
-4
lines changed

qcloud_cos/cos_client.py

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3345,7 +3345,7 @@ def get_bucket_intelligenttiering(self, Bucket, **kwargs):
33453345
return data
33463346

33473347
# service interface begin
3348-
def list_buckets(self, **kwargs):
3348+
def list_buckets(self, TagKey=None, TagValue=None, Region=None, CreateTime=None, Range=None, Marker="", MaxKeys=2000, **kwargs):
33493349
"""列出所有bucket
33503350
33513351
:return(dict): 账号下bucket相关信息.
@@ -3366,11 +3366,26 @@ def list_buckets(self, **kwargs):
33663366

33673367
if self._conf._service_domain is not None:
33683368
url = '{scheme}://{domain}/'.format(scheme=self._conf._scheme, domain=self._conf._service_domain)
3369+
3370+
params = {
3371+
'marker': Marker,
3372+
'max-keys': MaxKeys,
3373+
}
3374+
if TagKey and TagValue:
3375+
params['tagkey'] = TagKey
3376+
params['tagvalue'] = TagValue
3377+
if Region:
3378+
params['region'] = Region
3379+
if CreateTime and Range:
3380+
params['create-time'] = CreateTime
3381+
params['range'] = Range
3382+
33693383
rt = self.send_request(
33703384
method='GET',
33713385
url=url,
33723386
bucket=None,
33733387
headers=headers,
3388+
params=params,
33743389
auth=CosS3Auth(self._conf),
33753390
)
33763391
data = xml_to_dict(rt.content)

ut/test.py

Lines changed: 40 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -687,12 +687,50 @@ def test_get_bucket_location():
687687

688688

689689
def test_get_service():
690-
return # TODO: 测试账号的桶太多了导致列举超时,暂时屏蔽掉
691-
692690
"""列出账号下所有的bucket信息"""
693691
response = client.list_buckets()
694692
assert response
695693

694+
# 创建一个桶, 打tag
695+
test_tagging_bucket = 'test-tagging-bucket-' + APPID
696+
client.create_bucket(Bucket=test_tagging_bucket)
697+
client.put_bucket_tagging(
698+
Bucket=test_tagging_bucket,
699+
Tagging={
700+
'TagSet': {
701+
'Tag': [
702+
{
703+
'Key': 'tagKey',
704+
'Value': 'tagValue'
705+
}
706+
]
707+
}
708+
}
709+
)
710+
response = client.list_buckets(Region=REGION, TagKey='tagKey', TagValue='tagValue')
711+
for bucket in response['Buckets']['Bucket']:
712+
tag = client.get_bucket_tagging(Bucket=bucket['Name'])
713+
assert tag['TagSet']['Tag'][0]['Key'] == 'tagKey'
714+
assert tag['TagSet']['Tag'][0]['Value'] == 'tagValue'
715+
716+
time.sleep(3)
717+
client.delete_bucket(Bucket=test_tagging_bucket)
718+
719+
from datetime import datetime
720+
marker = ""
721+
list_over = False
722+
while list_over is False:
723+
create_time = 1514736000
724+
response = client.list_buckets(Region='ap-beijing', CreateTime=create_time, Range='gt', Marker=marker)
725+
for bucket in response['Buckets']['Bucket']:
726+
ctime = int(time.mktime(datetime.strptime(bucket['CreationDate'], '%Y-%m-%dT%H:%M:%SZ').timetuple()))
727+
assert ctime > create_time
728+
assert bucket['Location'] == 'ap-beijing'
729+
730+
marker = response['Marker']
731+
if response['IsTruncated'] == 'false':
732+
list_over = True
733+
696734

697735
def test_put_get_delete_cors():
698736
"""设置、获取、删除跨域配置"""
@@ -3526,7 +3564,6 @@ def test_check_multipart_upload():
35263564

35273565
if __name__ == "__main__":
35283566
setUp()
3529-
test_ci_delete_asr_template()
35303567
"""
35313568
test_config_invalid_scheme()
35323569
test_config_credential_inst()

0 commit comments

Comments
 (0)