From 1b1b472e3f86515bb7cc18a176fe4487a141ddde Mon Sep 17 00:00:00 2001 From: libertyzhu Date: Mon, 11 Nov 2024 10:59:50 +0800 Subject: [PATCH 1/4] format response of head_bucket --- qcloud_cos/cos_client.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/qcloud_cos/cos_client.py b/qcloud_cos/cos_client.py index 0c1b6d0b..385af140 100644 --- a/qcloud_cos/cos_client.py +++ b/qcloud_cos/cos_client.py @@ -1678,7 +1678,9 @@ def head_bucket(self, Bucket, **kwargs): bucket=Bucket, auth=CosS3Auth(self._conf), headers=headers) - return rt.headers + + response = dict(**rt.headers) + return response def put_bucket_acl(self, Bucket, AccessControlPolicy={}, **kwargs): """设置bucket ACL From b7a96daa26d2f9dea53f6c61d289788a535f98af Mon Sep 17 00:00:00 2001 From: libertyzhu Date: Mon, 11 Nov 2024 16:57:58 +0800 Subject: [PATCH 2/4] =?UTF-8?q?ssl=E8=AF=81=E4=B9=A6=E6=A0=A1=E9=AA=8C?= =?UTF-8?q?=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- qcloud_cos/cos_client.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/qcloud_cos/cos_client.py b/qcloud_cos/cos_client.py index 385af140..7d86bda3 100644 --- a/qcloud_cos/cos_client.py +++ b/qcloud_cos/cos_client.py @@ -44,7 +44,7 @@ def __init__(self, Appid=None, Region=None, SecretId=None, SecretKey=None, Token Access_id=None, Access_key=None, Secret_id=None, Secret_key=None, Endpoint=None, IP=None, Port=None, Anonymous=None, UA=None, Proxies=None, Domain=None, ServiceDomain=None, KeepAlive=True, PoolConnections=10, PoolMaxSize=10, AllowRedirects=False, SignHost=True, EndpointCi=None, EndpointPic=None, EnableOldDomain=True, EnableInternalDomain=True, SignParams=True, - AutoSwitchDomainOnRetry=False, VerifySSL=None): + AutoSwitchDomainOnRetry=False, VerifySSL=None, SSLCert=None): """初始化,保存用户的信息 :param Appid(string): 用户APPID. @@ -76,7 +76,8 @@ def __init__(self, Appid=None, Region=None, SecretId=None, SecretKey=None, Token :param EnableInternalDomain(bool): 是否使用内网域名访问COS :param SignParams(bool): 是否将请求参数算入签名 :param AutoSwitchDomainOnRetry(bool): 重试请求时是否将myqcloud.com域名切换为tencentcos.cn - :param VerifySSL(bool): 是否开启SSL证书校验 + :param VerifySSL(bool or string): 是否开启SSL证书校验, 或客户端CA bundle证书文件路径. 示例: True/False 或 '/path/certfile' + :param SSLCert(string or tuple): 客户端SSL证书路径. 示例: '/path/client.pem' 或 ('/path/client.cert', '/path/client.key') """ self._appid = to_unicode(Appid) self._token = to_unicode(Token) @@ -103,6 +104,7 @@ def __init__(self, Appid=None, Region=None, SecretId=None, SecretKey=None, Token self._sign_params = SignParams self._auto_switch_domain_on_retry = AutoSwitchDomainOnRetry self._verify_ssl = VerifySSL + self._ssl_cert = SSLCert if self._domain is None: self._endpoint = format_endpoint(Endpoint, Region, u'cos.', EnableOldDomain, EnableInternalDomain) @@ -382,8 +384,12 @@ def send_request(self, method, url, bucket=None, timeout=30, cos_request=True, c except Exception as ioe: file_position = None kwargs['data'] = to_bytes(kwargs['data']) - if self._conf._ip is not None and self._conf._scheme == 'https' or self._conf._verify_ssl is False: - kwargs['verify'] = False + # 使用https访问时可设置ssl证书校验相关参数 + if self._conf._scheme == 'https': + if self._conf._verify_ssl is not None: + kwargs['verify'] = self._conf._verify_ssl + if self._conf._ssl_cert is not None: + kwargs['cert'] = self._conf._ssl_cert if self._conf._allow_redirects is not None: kwargs['allow_redirects'] = self._conf._allow_redirects exception_logbuf = list() # 记录每次重试的错误日志 From 26524daae38c12062632dbf12ef0c5a5a2e7e48a Mon Sep 17 00:00:00 2001 From: libertyzhu Date: Mon, 11 Nov 2024 18:56:30 +0800 Subject: [PATCH 3/4] fix ut: bucket_domain --- ut/test.py | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/ut/test.py b/ut/test.py index 6df3aa57..427d6d7e 100644 --- a/ut/test.py +++ b/ut/test.py @@ -1611,17 +1611,25 @@ def test_put_get_delete_bucket_domain(): ) time.sleep(2) - response = client.put_bucket_domain( - Bucket=test_bucket, - DomainConfiguration=domain_config - ) + try: + response = client.put_bucket_domain( + Bucket=test_bucket, + DomainConfiguration=domain_config + ) + except CosServiceError as e: + if e.get_error_code() == 'RecordAlreadyExist': + pass # wait for sync # get domain time.sleep(4) - response = client.get_bucket_domain( - Bucket=test_bucket - ) - assert domain_config["DomainRule"] == response["DomainRule"] + try: + response = client.get_bucket_domain( + Bucket=test_bucket + ) + assert domain_config["DomainRule"] == response["DomainRule"] + except CosServiceError as e: + if e.get_error_code() == 'DomainConfigNotFoundError': + pass # test domain request """ domain_conf = CosConfig( From 599f9b7da25df0197bad4fd6c1d9cff6ca756332 Mon Sep 17 00:00:00 2001 From: libertyzhu Date: Mon, 11 Nov 2024 19:22:47 +0800 Subject: [PATCH 4/4] fix ut: post_bucket_inverory --- ut/test.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/ut/test.py b/ut/test.py index 427d6d7e..54637a61 100644 --- a/ut/test.py +++ b/ut/test.py @@ -1894,11 +1894,16 @@ def test_post_bucket_inventory_configurations(): Bucket=test_bucket, Id=inventory_id, ) - response = client.post_bucket_inventory( - Bucket=test_bucket, - Id=inventory_id, - InventoryConfiguration=inventory_config, - ) + time.sleep(3) + try: + response = client.post_bucket_inventory( + Bucket=test_bucket, + Id=inventory_id, + InventoryConfiguration=inventory_config, + ) + except CosServiceError as e: + if e.get_error_code() == 'DuplicateInventoryId': + pass def test_put_get_delete_bucket_tagging():