Skip to content

Commit 708db2f

Browse files
liyanzhang505huiguangjun
authored andcommitted
Add bucket name check.
1 parent 554dfa3 commit 708db2f

File tree

6 files changed

+29
-9
lines changed

6 files changed

+29
-9
lines changed

oss2/api.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -398,6 +398,8 @@ def __init__(self, auth, endpoint, bucket_name,
398398
app_name, enable_crc)
399399

400400
self.bucket_name = bucket_name.strip()
401+
if utils.is_valid_bucket_name(self.bucket_name) is not True:
402+
raise ClientError("The bucket_name is invalid, please check it.")
401403

402404
def sign_url(self, method, key, expires, headers=None, params=None, slash_safe=False):
403405
"""生成签名URL。

tests/common.py

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,11 +48,19 @@ def clean_and_delete_bucket(bucket):
4848
try:
4949
result = bucket.get_bucket_info()
5050
if result.versioning_status in [oss2.BUCKET_VERSIONING_ENABLE, oss2.BUCKET_VERSIONING_SUSPEND]:
51-
all_objects = bucket.list_object_versions()
52-
for obj in all_objects.versions:
53-
bucket.delete_object(obj.key, params={'versionId': obj.versionid})
54-
for del_marker in all_objects.delete_marker:
55-
bucket.delete_object(del_marker.key, params={'versionId': del_marker.versionid})
51+
next_key_marker = None
52+
next_versionid_marker = None
53+
is_truncated = True
54+
while is_truncated is True:
55+
objects = bucket.list_object_versions(key_marker=next_key_marker, versionid_marker=next_versionid_marker)
56+
for obj in objects.versions:
57+
bucket.delete_object(obj.key, params={'versionId': obj.versionid})
58+
for del_marker in objects.delete_marker:
59+
bucket.delete_object(del_marker.key, params={'versionId': del_marker.versionid})
60+
is_truncated = objects.is_truncated
61+
if is_truncated:
62+
next_key_marker = objects.next_key_marker
63+
next_versionid_marker = objects.next_versionid_marker
5664
except:
5765
pass
5866

tests/test_api_base.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,7 @@ def test_ip(self):
3333

3434
def test_invalid_bucket_name(self):
3535
bucket_name = random_string(64)
36-
bucket = oss2.Bucket(oss2.AnonymousAuth(), OSS_ENDPOINT, bucket_name)
37-
self.assertRaises(oss2.exceptions.NoSuchBucket, bucket.get_object, 'hello.txt')
36+
self.assertRaises(oss2.exceptions.ClientError, oss2.Bucket, oss2.AnonymousAuth(), OSS_ENDPOINT, bucket_name)
3837

3938
def test_whitespace(self):
4039
bucket = oss2.Bucket(oss2.Auth(OSS_ID, ' ' + OSS_SECRET + ' '), OSS_ENDPOINT, OSS_BUCKET)

tests/test_object.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -717,7 +717,7 @@ def test_object_exists(self):
717717
key = self.random_key()
718718

719719
auth = oss2.Auth(OSS_ID, OSS_SECRET)
720-
bucket_name = OSS_BUCKET + "-test-object_exists"
720+
bucket_name = OSS_BUCKET + "-test-object-exists"
721721
bucket = oss2.Bucket(auth, OSS_ENDPOINT, bucket_name)
722722
self.assertRaises(NoSuchBucket, bucket.object_exists, key)
723723

tests/test_object_versioning.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1008,7 +1008,7 @@ def test_delete_object_versions_with_invalid_arguments(self):
10081008
from oss2.models import BatchDeleteObjectVersionList
10091009

10101010
auth = oss2.Auth(OSS_ID, OSS_SECRET)
1011-
bucket_name = OSS_BUCKET + "test-delete-object-versions"
1011+
bucket_name = OSS_BUCKET + "-test-delete-object-versions"
10121012
bucket = oss2.Bucket(auth, self.endpoint, bucket_name)
10131013
bucket.create_bucket(oss2.BUCKET_ACL_PRIVATE)
10141014

tests/test_utils.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,17 @@ def test_is_valid_bucket_name(self):
5151
self.assertTrue(not oss2.is_valid_bucket_name('hello-'))
5252
self.assertTrue(not oss2.is_valid_bucket_name('-hello'))
5353

54+
access_key_id = "test_access_key_id"
55+
access_key_secret = "test_access_key_secret"
56+
endpoint = "oss-cn-shenzhen.aliyuncs.com"
57+
58+
bucket_name = "hello"
59+
bucket = oss2.Bucket(oss2.Auth(access_key_id, access_key_secret), endpoint, bucket_name)
60+
61+
bucket_name = "hello-"
62+
self.assertRaises(oss2.exceptions.ClientError, oss2.Bucket, oss2.Auth(access_key_id, access_key_secret),
63+
endpoint, bucket_name)
64+
5465
def test_compat(self):
5566
# from unicode
5667
u = u'中文'

0 commit comments

Comments
 (0)