From cc7496bd96c87401062de0e4ae7b86881d62ecfc Mon Sep 17 00:00:00 2001 From: libertyzhu Date: Sat, 8 Feb 2025 11:38:33 +0800 Subject: [PATCH 1/3] modify src distribution filename to comply with PEP 625 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 7cb6681..74eea79 100644 --- a/setup.py +++ b/setup.py @@ -32,7 +32,7 @@ def long_description(): setup( - name='cos-python-sdk-v5', + name='cos_python_sdk_v5', # comply with PEP 625 version='1.9.34', url='https://www.qcloud.com/', license='MIT', From 3e651ae1644fd95cdc73890aec8e19d2bb6b5f61 Mon Sep 17 00:00:00 2001 From: libertyzhu Date: Fri, 21 Feb 2025 19:26:53 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=A4=9A=E8=BF=9B?= =?UTF-8?q?=E7=A8=8B=E5=B9=B6=E5=8F=91=E5=9C=BA=E6=99=AF=E4=B8=8B=E7=9A=84?= =?UTF-8?q?=E4=B8=80=E4=BA=9B=E5=86=B2=E7=AA=81=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- qcloud_cos/resumable_downloader.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/qcloud_cos/resumable_downloader.py b/qcloud_cos/resumable_downloader.py index ddeabd4..cd85df5 100644 --- a/qcloud_cos/resumable_downloader.py +++ b/qcloud_cos/resumable_downloader.py @@ -3,6 +3,7 @@ import json import os import sys +import errno import threading import logging import uuid @@ -45,7 +46,14 @@ def __init__(self, cos_client, bucket, key, dest_filename, object_info, part_siz self.__tmp_file = None if not os.path.exists(self.__dump_record_dir): - os.makedirs(self.__dump_record_dir) + # 多进程并发情况下makedirs会出现冲突, 需要进行异常捕获 + try: + os.makedirs(self.__dump_record_dir) + except OSError as e: + if e.errno != errno.EEXIST: + logger.error('os makedir error: dir: {0}, errno {1}'.format(self.__dump_record_dir), e.errno) + raise + pass logger.debug('resumale downloader init finish, bucket: {0}, key: {1}'.format(bucket, key)) def start(self): From b8da85412d08c38b46c64a72cde2226b4da84dc0 Mon Sep 17 00:00:00 2001 From: libertyzhu Date: Fri, 21 Feb 2025 19:28:44 +0800 Subject: [PATCH 3/3] =?UTF-8?q?delete=5Fobject=E5=B0=86params=E7=AE=97?= =?UTF-8?q?=E5=85=A5=E7=AD=BE=E5=90=8D;Domain=20Certificate=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- qcloud_cos/cos_client.py | 24 +++++++----------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/qcloud_cos/cos_client.py b/qcloud_cos/cos_client.py index 17d67dd..86aa660 100644 --- a/qcloud_cos/cos_client.py +++ b/qcloud_cos/cos_client.py @@ -806,7 +806,7 @@ def delete_object(self, Bucket, Key, **kwargs): method='DELETE', url=url, bucket=Bucket, - auth=CosS3Auth(self._conf, Key), + auth=CosS3Auth(self._conf, Key, params), headers=headers, params=params) data = dict(**rt.headers) @@ -2680,11 +2680,8 @@ def put_bucket_domain_certificate(self, Bucket, DomainCertificateConfiguration, headers = mapped(kwargs) headers['Content-MD5'] = get_md5(xml_config) headers['Content-Type'] = 'application/xml' - # params = {'domaincertificate': ''} - # 目前 Domain Certificate API 不能使用 params 传递 query_string '?domaincertificate=', - # 只能将'?domaincertificate'拼接到url + params = {'domaincertificate': ''} url = self._conf.uri(bucket=Bucket) - url += '?domaincertificate' logger.info("put bucket domain certificate, url=:{url} ,headers=:{headers}".format( url=url, headers=headers)) @@ -2693,8 +2690,9 @@ def put_bucket_domain_certificate(self, Bucket, DomainCertificateConfiguration, url=url, bucket=Bucket, data=xml_config, - auth=CosS3Auth(self._conf), - headers=headers) + auth=CosS3Auth(self._conf, params=params), + headers=headers, + params=params) return None def get_bucket_domain_certificate(self, Bucket, DomainName, **kwargs): @@ -2715,12 +2713,8 @@ def get_bucket_domain_certificate(self, Bucket, DomainName, **kwargs): ) """ headers = mapped(kwargs) - # 目前 Domain Certificate API 不能使用 params 传递 query_string '?domaincertificate=', - # 只能将'?domaincertificate'拼接到url - # params = {'domaincertificate': '', 'domainname': DomainName} - params = {'domainname': DomainName} + params = {'domaincertificate': '', 'domainname': DomainName} url = self._conf.uri(bucket=Bucket) - url += '?domaincertificate' logger.info("get bucket domain certificate, url=:{url} ,headers=:{headers}".format( url=url, headers=headers)) @@ -2752,12 +2746,8 @@ def delete_bucket_domain_certificate(self, Bucket, DomainName, **kwargs): ) """ headers = mapped(kwargs) - # 目前 Domain Certificate API 不能使用 params 传递 query_string '?domaincertificate=', - # 只能将'?domaincertificate'拼接到url - # params = {'domaincertificate': '', 'domainname': DomainName} - params = {'domainname': DomainName} + params = {'domaincertificate': '', 'domainname': DomainName} url = self._conf.uri(bucket=Bucket) - url += "?domaincertificate" logger.info("delete bucket domain certificate, url=:{url} ,headers=:{headers}".format( url=url, headers=headers))