esdk-obs-python 3.25.3__tar.gz → 3.25.8__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {esdk-obs-python-3.25.3 → esdk-obs-python-3.25.8}/PKG-INFO +1 -1
- {esdk-obs-python-3.25.3 → esdk-obs-python-3.25.8}/esdk_obs_python.egg-info/PKG-INFO +1 -1
- {esdk-obs-python-3.25.3 → esdk-obs-python-3.25.8}/obs/__init__.py +3 -2
- {esdk-obs-python-3.25.3 → esdk-obs-python-3.25.8}/obs/bucket.py +113 -113
- {esdk-obs-python-3.25.3 → esdk-obs-python-3.25.8}/obs/client.py +47 -31
- {esdk-obs-python-3.25.3 → esdk-obs-python-3.25.8}/obs/const.py +1 -1
- {esdk-obs-python-3.25.3 → esdk-obs-python-3.25.8}/obs/convertor.py +14 -1
- {esdk-obs-python-3.25.3 → esdk-obs-python-3.25.8}/obs/crc64mod.py +151 -151
- {esdk-obs-python-3.25.3 → esdk-obs-python-3.25.8}/obs/crypto_client.py +279 -279
- {esdk-obs-python-3.25.3 → esdk-obs-python-3.25.8}/obs/http.py +432 -432
- esdk-obs-python-3.25.8/obs/loadtoken.py +341 -0
- {esdk-obs-python-3.25.3 → esdk-obs-python-3.25.8}/obs/model.py +37 -8
- {esdk-obs-python-3.25.3 → esdk-obs-python-3.25.8}/obs/transfer.py +832 -830
- {esdk-obs-python-3.25.3 → esdk-obs-python-3.25.8}/obs/util.py +526 -526
- {esdk-obs-python-3.25.3 → esdk-obs-python-3.25.8}/setup.py +1 -1
- esdk-obs-python-3.25.3/obs/loadtoken.py +0 -184
- {esdk-obs-python-3.25.3 → esdk-obs-python-3.25.8}/esdk_obs_python.egg-info/SOURCES.txt +0 -0
- {esdk-obs-python-3.25.3 → esdk-obs-python-3.25.8}/esdk_obs_python.egg-info/dependency_links.txt +0 -0
- {esdk-obs-python-3.25.3 → esdk-obs-python-3.25.8}/esdk_obs_python.egg-info/not-zip-safe +0 -0
- {esdk-obs-python-3.25.3 → esdk-obs-python-3.25.8}/esdk_obs_python.egg-info/requires.txt +0 -0
- {esdk-obs-python-3.25.3 → esdk-obs-python-3.25.8}/esdk_obs_python.egg-info/top_level.txt +0 -0
- {esdk-obs-python-3.25.3 → esdk-obs-python-3.25.8}/obs/auth.py +0 -0
- {esdk-obs-python-3.25.3 → esdk-obs-python-3.25.8}/obs/bulktasks.py +0 -0
- {esdk-obs-python-3.25.3 → esdk-obs-python-3.25.8}/obs/cache.py +0 -0
- {esdk-obs-python-3.25.3 → esdk-obs-python-3.25.8}/obs/extension.py +0 -0
- {esdk-obs-python-3.25.3 → esdk-obs-python-3.25.8}/obs/http2.py +0 -0
- {esdk-obs-python-3.25.3 → esdk-obs-python-3.25.8}/obs/ilog.py +0 -0
- {esdk-obs-python-3.25.3 → esdk-obs-python-3.25.8}/obs/locks.py +0 -0
- {esdk-obs-python-3.25.3 → esdk-obs-python-3.25.8}/obs/obs_cipher_suite.py +0 -0
- {esdk-obs-python-3.25.3 → esdk-obs-python-3.25.8}/obs/posix_transfer.py +0 -0
- {esdk-obs-python-3.25.3 → esdk-obs-python-3.25.8}/obs/progress.py +0 -0
- {esdk-obs-python-3.25.3 → esdk-obs-python-3.25.8}/obs/scheduler.py +0 -0
- {esdk-obs-python-3.25.3 → esdk-obs-python-3.25.8}/obs/searchmethod.py +0 -0
- {esdk-obs-python-3.25.3 → esdk-obs-python-3.25.8}/obs/workflow.py +0 -0
- {esdk-obs-python-3.25.3 → esdk-obs-python-3.25.8}/setup.cfg +0 -0
|
@@ -23,7 +23,7 @@ from obs.model import TopicConfiguration, FunctionGraphConfiguration, FilterRule
|
|
|
23
23
|
from obs.model import Options, PutObjectHeader, AppendObjectHeader, AppendObjectContent, RedirectAllRequestTo
|
|
24
24
|
from obs.model import Redirect, RoutingRule, Tag, TagInfo, Transition, NoncurrentVersionTransition, Rule, Versions, AbortIncompleteMultipartUpload
|
|
25
25
|
from obs.model import Object, WebsiteConfiguration, Logging, CompleteMultipartUploadRequest, DeleteObjectsRequest,CustomDomainConfiguration
|
|
26
|
-
from obs.model import ListMultipartUploadsRequest, GetObjectRequest, UploadFileHeader, Payer
|
|
26
|
+
from obs.model import ListMultipartUploadsRequest, GetObjectRequest, UploadFileHeader, Payer, ClientVerify
|
|
27
27
|
from obs.model import ExtensionHeader, FetchStatus, BucketAliasModel, ListBucketAliasModel
|
|
28
28
|
from obs.workflow import WorkflowClient
|
|
29
29
|
from obs.crypto_client import CryptoObsClient
|
|
@@ -97,5 +97,6 @@ __all__ = [
|
|
|
97
97
|
'CtrRSACipherGenerator',
|
|
98
98
|
'BucketAliasModel',
|
|
99
99
|
'ListBucketAliasModel',
|
|
100
|
-
'CustomDomainConfiguration'
|
|
100
|
+
'CustomDomainConfiguration',
|
|
101
|
+
'ClientVerify'
|
|
101
102
|
]
|
|
@@ -1,113 +1,113 @@
|
|
|
1
|
-
#!/usr/bin/python
|
|
2
|
-
# -*- coding:utf-8 -*-
|
|
3
|
-
# Copyright 2019 Huawei Technologies Co.,Ltd.
|
|
4
|
-
# Licensed under the Apache License, Version 2.0 (the "License"); you may not use
|
|
5
|
-
# this file except in compliance with the License. You may obtain a copy of the
|
|
6
|
-
# License at
|
|
7
|
-
|
|
8
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
-
|
|
10
|
-
# Unless required by applicable law or agreed to in writing, software distributed
|
|
11
|
-
# under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
|
|
12
|
-
# CONDITIONS OF ANY KIND, either express or implied. See the License for the
|
|
13
|
-
# specific language governing permissions and limitations under the License.
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
class BucketClient(object):
|
|
17
|
-
allowedMethod = [
|
|
18
|
-
'createBucket',
|
|
19
|
-
'deleteBucket',
|
|
20
|
-
'headBucket',
|
|
21
|
-
'getBucketMetadata',
|
|
22
|
-
'setBucketQuota',
|
|
23
|
-
'getBucketQuota',
|
|
24
|
-
'getBucketStorageInfo',
|
|
25
|
-
'setBucketAcl',
|
|
26
|
-
'getBucketAcl',
|
|
27
|
-
'setBucketPolicy',
|
|
28
|
-
'getBucketPolicy',
|
|
29
|
-
'deleteBucketPolicy',
|
|
30
|
-
'setBucketVersioning',
|
|
31
|
-
'getBucketVersioning',
|
|
32
|
-
'listVersions',
|
|
33
|
-
'listObjects',
|
|
34
|
-
'listMultipartUploads',
|
|
35
|
-
'deleteBucketLifecycle',
|
|
36
|
-
'setBucketLifecycle',
|
|
37
|
-
'getBucketLifecycle',
|
|
38
|
-
'deleteBucketWebsite',
|
|
39
|
-
'setBucketWebsite',
|
|
40
|
-
'getBucketWebsite',
|
|
41
|
-
'setBucketLogging',
|
|
42
|
-
'getBucketLogging',
|
|
43
|
-
'getBucketLocation',
|
|
44
|
-
'getBucketTagging',
|
|
45
|
-
'setBucketTagging',
|
|
46
|
-
'deleteBucketTagging',
|
|
47
|
-
'setBucketCors',
|
|
48
|
-
'deleteBucketCors',
|
|
49
|
-
'getBucketCors',
|
|
50
|
-
'setBucketNotification',
|
|
51
|
-
'getBucketNotification',
|
|
52
|
-
'getObjectMetadata',
|
|
53
|
-
'setObjectMetadata',
|
|
54
|
-
'getObject',
|
|
55
|
-
'putContent',
|
|
56
|
-
'putObject',
|
|
57
|
-
'appendObject',
|
|
58
|
-
'putFile',
|
|
59
|
-
'uploadPart',
|
|
60
|
-
'copyObject',
|
|
61
|
-
'setObjectAcl',
|
|
62
|
-
'getObjectAcl',
|
|
63
|
-
'deleteObject',
|
|
64
|
-
'deleteObjects',
|
|
65
|
-
'restoreObject',
|
|
66
|
-
'initiateMultipartUpload',
|
|
67
|
-
'copyPart',
|
|
68
|
-
'completeMultipartUpload',
|
|
69
|
-
'abortMultipartUpload',
|
|
70
|
-
'listParts',
|
|
71
|
-
'getBucketStoragePolicy',
|
|
72
|
-
'setBucketStoragePolicy',
|
|
73
|
-
'optionsBucket',
|
|
74
|
-
'optionsObject',
|
|
75
|
-
'setBucketEncryption',
|
|
76
|
-
'getBucketEncryption',
|
|
77
|
-
'deleteBucketEncryption',
|
|
78
|
-
'headObject',
|
|
79
|
-
'setBucketRequestPayment',
|
|
80
|
-
'getBucketRequestPayment',
|
|
81
|
-
'setBucketFetchPolicy',
|
|
82
|
-
'getBucketFetchPolicy',
|
|
83
|
-
'deleteBucketFetchPolicy',
|
|
84
|
-
'setBucketFetchJob',
|
|
85
|
-
'getBucketFetchJob',
|
|
86
|
-
'setBucketCustomDomain',
|
|
87
|
-
'deleteBucketCustomDomain',
|
|
88
|
-
'getBucketCustomDomain',
|
|
89
|
-
]
|
|
90
|
-
|
|
91
|
-
def __init__(self, obsClient, bucketName):
|
|
92
|
-
self.__obsClient = obsClient
|
|
93
|
-
self.__bucketName = bucketName
|
|
94
|
-
|
|
95
|
-
def __getattr__(self, key):
|
|
96
|
-
if key in self.allowedMethod and hasattr(self.__obsClient, key):
|
|
97
|
-
original_method = getattr(self.__obsClient, key)
|
|
98
|
-
if callable(original_method):
|
|
99
|
-
def delegate(*args, **kwargs):
|
|
100
|
-
_args = list(args)
|
|
101
|
-
if key == 'copyObject':
|
|
102
|
-
if 'destBucketName' not in kwargs:
|
|
103
|
-
if len(_args) >= 2:
|
|
104
|
-
_args.insert(2, self.__bucketName)
|
|
105
|
-
else:
|
|
106
|
-
kwargs['destBucketName'] = self.__bucketName
|
|
107
|
-
else:
|
|
108
|
-
if 'bucketName' not in kwargs:
|
|
109
|
-
_args.insert(0, self.__bucketName)
|
|
110
|
-
return original_method(*_args, **kwargs)
|
|
111
|
-
|
|
112
|
-
return delegate
|
|
113
|
-
return super(BucketClient, self).__getattribute__(key)
|
|
1
|
+
#!/usr/bin/python
|
|
2
|
+
# -*- coding:utf-8 -*-
|
|
3
|
+
# Copyright 2019 Huawei Technologies Co.,Ltd.
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License"); you may not use
|
|
5
|
+
# this file except in compliance with the License. You may obtain a copy of the
|
|
6
|
+
# License at
|
|
7
|
+
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software distributed
|
|
11
|
+
# under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
|
|
12
|
+
# CONDITIONS OF ANY KIND, either express or implied. See the License for the
|
|
13
|
+
# specific language governing permissions and limitations under the License.
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class BucketClient(object):
|
|
17
|
+
allowedMethod = [
|
|
18
|
+
'createBucket',
|
|
19
|
+
'deleteBucket',
|
|
20
|
+
'headBucket',
|
|
21
|
+
'getBucketMetadata',
|
|
22
|
+
'setBucketQuota',
|
|
23
|
+
'getBucketQuota',
|
|
24
|
+
'getBucketStorageInfo',
|
|
25
|
+
'setBucketAcl',
|
|
26
|
+
'getBucketAcl',
|
|
27
|
+
'setBucketPolicy',
|
|
28
|
+
'getBucketPolicy',
|
|
29
|
+
'deleteBucketPolicy',
|
|
30
|
+
'setBucketVersioning',
|
|
31
|
+
'getBucketVersioning',
|
|
32
|
+
'listVersions',
|
|
33
|
+
'listObjects',
|
|
34
|
+
'listMultipartUploads',
|
|
35
|
+
'deleteBucketLifecycle',
|
|
36
|
+
'setBucketLifecycle',
|
|
37
|
+
'getBucketLifecycle',
|
|
38
|
+
'deleteBucketWebsite',
|
|
39
|
+
'setBucketWebsite',
|
|
40
|
+
'getBucketWebsite',
|
|
41
|
+
'setBucketLogging',
|
|
42
|
+
'getBucketLogging',
|
|
43
|
+
'getBucketLocation',
|
|
44
|
+
'getBucketTagging',
|
|
45
|
+
'setBucketTagging',
|
|
46
|
+
'deleteBucketTagging',
|
|
47
|
+
'setBucketCors',
|
|
48
|
+
'deleteBucketCors',
|
|
49
|
+
'getBucketCors',
|
|
50
|
+
'setBucketNotification',
|
|
51
|
+
'getBucketNotification',
|
|
52
|
+
'getObjectMetadata',
|
|
53
|
+
'setObjectMetadata',
|
|
54
|
+
'getObject',
|
|
55
|
+
'putContent',
|
|
56
|
+
'putObject',
|
|
57
|
+
'appendObject',
|
|
58
|
+
'putFile',
|
|
59
|
+
'uploadPart',
|
|
60
|
+
'copyObject',
|
|
61
|
+
'setObjectAcl',
|
|
62
|
+
'getObjectAcl',
|
|
63
|
+
'deleteObject',
|
|
64
|
+
'deleteObjects',
|
|
65
|
+
'restoreObject',
|
|
66
|
+
'initiateMultipartUpload',
|
|
67
|
+
'copyPart',
|
|
68
|
+
'completeMultipartUpload',
|
|
69
|
+
'abortMultipartUpload',
|
|
70
|
+
'listParts',
|
|
71
|
+
'getBucketStoragePolicy',
|
|
72
|
+
'setBucketStoragePolicy',
|
|
73
|
+
'optionsBucket',
|
|
74
|
+
'optionsObject',
|
|
75
|
+
'setBucketEncryption',
|
|
76
|
+
'getBucketEncryption',
|
|
77
|
+
'deleteBucketEncryption',
|
|
78
|
+
'headObject',
|
|
79
|
+
'setBucketRequestPayment',
|
|
80
|
+
'getBucketRequestPayment',
|
|
81
|
+
'setBucketFetchPolicy',
|
|
82
|
+
'getBucketFetchPolicy',
|
|
83
|
+
'deleteBucketFetchPolicy',
|
|
84
|
+
'setBucketFetchJob',
|
|
85
|
+
'getBucketFetchJob',
|
|
86
|
+
'setBucketCustomDomain',
|
|
87
|
+
'deleteBucketCustomDomain',
|
|
88
|
+
'getBucketCustomDomain',
|
|
89
|
+
]
|
|
90
|
+
|
|
91
|
+
def __init__(self, obsClient, bucketName):
|
|
92
|
+
self.__obsClient = obsClient
|
|
93
|
+
self.__bucketName = bucketName
|
|
94
|
+
|
|
95
|
+
def __getattr__(self, key):
|
|
96
|
+
if key in self.allowedMethod and hasattr(self.__obsClient, key):
|
|
97
|
+
original_method = getattr(self.__obsClient, key)
|
|
98
|
+
if callable(original_method):
|
|
99
|
+
def delegate(*args, **kwargs):
|
|
100
|
+
_args = list(args)
|
|
101
|
+
if key == 'copyObject':
|
|
102
|
+
if 'destBucketName' not in kwargs:
|
|
103
|
+
if len(_args) >= 2:
|
|
104
|
+
_args.insert(2, self.__bucketName)
|
|
105
|
+
else:
|
|
106
|
+
kwargs['destBucketName'] = self.__bucketName
|
|
107
|
+
else:
|
|
108
|
+
if 'bucketName' not in kwargs:
|
|
109
|
+
_args.insert(0, self.__bucketName)
|
|
110
|
+
return original_method(*_args, **kwargs)
|
|
111
|
+
|
|
112
|
+
return delegate
|
|
113
|
+
return super(BucketClient, self).__getattribute__(key)
|
|
@@ -199,9 +199,9 @@ class ConvertWrapper(object):
|
|
|
199
199
|
|
|
200
200
|
class _BasicClient(object):
|
|
201
201
|
def __init__(self, access_key_id='', secret_access_key='', is_secure=True, server=None,
|
|
202
|
-
signature='obs', region='region', path_style=False, ssl_verify=False,
|
|
202
|
+
signature='obs', region='region', path_style=False, ssl_verify=False, is_use_gmssl=False,
|
|
203
203
|
port=None, max_retry_count=3, timeout=60, chunk_size=const.READ_ONCE_LENGTH,
|
|
204
|
-
long_conn_mode=False, proxy_host=None, proxy_port=None,
|
|
204
|
+
long_conn_mode=False, proxy_host=None, proxy_port=None, client_verify=None,
|
|
205
205
|
proxy_username=None, proxy_password=None, security_token=None,
|
|
206
206
|
custom_ciphers=None, use_http2=False, is_signature_negotiation=True, is_cname=False,
|
|
207
207
|
max_redirect_count=10, security_providers=None, security_provider_policy=None, client_mode='obs',
|
|
@@ -239,7 +239,8 @@ class _BasicClient(object):
|
|
|
239
239
|
self.is_signature_negotiation = is_signature_negotiation
|
|
240
240
|
self.is_cname = is_cname
|
|
241
241
|
self.max_redirect_count = max_redirect_count
|
|
242
|
-
|
|
242
|
+
self.is_use_gmssl = is_use_gmssl
|
|
243
|
+
self.client_verify = client_verify
|
|
243
244
|
if client_mode == 'obs':
|
|
244
245
|
if self.path_style or self.is_cname:
|
|
245
246
|
self.is_signature_negotiation = False
|
|
@@ -364,30 +365,45 @@ class _BasicClient(object):
|
|
|
364
365
|
self.connHolder = {'connSet': Queue(), 'lock': threading.Lock()}
|
|
365
366
|
|
|
366
367
|
def _init_ssl_context(self, custom_ciphers):
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
if
|
|
368
|
+
import ssl
|
|
369
|
+
if hasattr(ssl, 'SSLContext'):
|
|
370
|
+
if self.is_use_gmssl:
|
|
371
|
+
if not hasattr(ssl, 'PROTOCOL_GMTLS'):
|
|
372
|
+
raise Exception('ssl not support PROTOCOL_GMTLS.')
|
|
373
|
+
context = ssl.SSLContext(ssl.PROTOCOL_GMTLS)
|
|
374
|
+
context.set_ciphers('ECC-SM4-SM3:ECDHE-SM4-SM3')
|
|
375
|
+
else:
|
|
370
376
|
context = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
377
|
+
context.options |= ssl.OP_NO_SSLv2
|
|
378
|
+
context.options |= ssl.OP_NO_SSLv3
|
|
379
|
+
if custom_ciphers is not None:
|
|
380
|
+
custom_ciphers = util.to_string(custom_ciphers).strip()
|
|
381
|
+
if custom_ciphers != '' and hasattr(context, 'set_ciphers') and callable(context.set_ciphers):
|
|
382
|
+
context.set_ciphers(custom_ciphers)
|
|
383
|
+
if self.ssl_verify:
|
|
384
|
+
import _ssl
|
|
385
|
+
cafile = util.to_string(self.ssl_verify)
|
|
386
|
+
context.options |= getattr(_ssl, "OP_NO_COMPRESSION", 0)
|
|
387
|
+
context.verify_mode = ssl.CERT_REQUIRED
|
|
388
|
+
if os.path.isfile(cafile):
|
|
389
|
+
context.load_verify_locations(cafile)
|
|
390
|
+
else:
|
|
391
|
+
context.verify_mode = ssl.CERT_NONE
|
|
392
|
+
is_client_sign_verify = self.client_verify and self.client_verify.clientCert and \
|
|
393
|
+
self.client_verify.clientKey
|
|
394
|
+
is_client_enc_verify = self.client_verify and self.client_verify.clientEncCert and \
|
|
395
|
+
self.client_verify.clientEncKey
|
|
396
|
+
if is_client_sign_verify:
|
|
397
|
+
context.load_cert_chain(certfile=util.to_string(self.client_verify.clientCert),
|
|
398
|
+
keyfile=util.to_string(self.client_verify.clientKey),
|
|
399
|
+
password=util.to_string(self.client_verify.clientKeyPassword))
|
|
400
|
+
if is_client_enc_verify:
|
|
401
|
+
context.load_cert_chain(certfile=util.to_string(self.client_verify.clientEncCert),
|
|
402
|
+
keyfile=util.to_string(self.client_verify.clientEncKey),
|
|
403
|
+
password=util.to_string(self.client_verify.clientEncKeyPassword))
|
|
404
|
+
if hasattr(context, 'check_hostname'):
|
|
405
|
+
context.check_hostname = False
|
|
406
|
+
self.context = context
|
|
391
407
|
|
|
392
408
|
def close(self):
|
|
393
409
|
if self.connHolder is not None:
|
|
@@ -502,7 +518,7 @@ class _BasicClient(object):
|
|
|
502
518
|
if flag >= self.max_retry_count or readable:
|
|
503
519
|
return self._make_error_result(e, ret)
|
|
504
520
|
flag += 1
|
|
505
|
-
time.sleep(math.pow(2, flag) * 0.
|
|
521
|
+
time.sleep(math.pow(2, flag) * 0.1)
|
|
506
522
|
self.log_client.log(WARNING, 'request again, time:%d' % int(flag))
|
|
507
523
|
continue
|
|
508
524
|
|
|
@@ -824,7 +840,9 @@ class _BasicClient(object):
|
|
|
824
840
|
result_wrapper = ResponseWrapper(conn, response, self.connHolder, content_length, notifier, obs_crc64=obs_crc64)
|
|
825
841
|
self.log_client.log(DEBUG, 'CRC64 from the server is {0}'.format(obs_crc64))
|
|
826
842
|
else:
|
|
827
|
-
|
|
843
|
+
result_wrapper = ResponseWrapper(conn, response, self.connHolder, content_length, notifier)
|
|
844
|
+
self.log_client.log(WARNING, 'object {0} not get CRC64 from the server.'.format(objectKey))
|
|
845
|
+
|
|
828
846
|
else:
|
|
829
847
|
result_wrapper = ResponseWrapper(conn, response, self.connHolder, content_length, notifier)
|
|
830
848
|
if loadStreamInMemory:
|
|
@@ -1248,9 +1266,7 @@ class ObsClient(_BasicClient):
|
|
|
1248
1266
|
if matchAnyKey:
|
|
1249
1267
|
policy.append('["starts-with", "$key", ""],')
|
|
1250
1268
|
|
|
1251
|
-
policy.
|
|
1252
|
-
|
|
1253
|
-
originPolicy = ''.join(policy)
|
|
1269
|
+
originPolicy = ''.join(policy).rstrip(',') + ']}'
|
|
1254
1270
|
|
|
1255
1271
|
policy = util.base64_encode(originPolicy)
|
|
1256
1272
|
|
|
@@ -641,6 +641,14 @@ class Convertor(object):
|
|
|
641
641
|
if certificate.get("certificateChain", None):
|
|
642
642
|
ET.SubElement(root, "CertificateChain").text = util.to_string(certificate.get("certificateChain", None))
|
|
643
643
|
ET.SubElement(root, "PrivateKey").text = util.to_string(certificate.get("privateKey"))
|
|
644
|
+
if certificate.get("certificateType", None):
|
|
645
|
+
ET.SubElement(root, "CertificateType").text = util.to_string(certificate.get("certificateType", None))
|
|
646
|
+
if certificate.get("encCertificate", None):
|
|
647
|
+
ET.SubElement(root, "ENCCertificate").text = util.to_string(certificate.get("encCertificate", None))
|
|
648
|
+
if certificate.get("encPrivateKey", None):
|
|
649
|
+
ET.SubElement(root, "ENCPrivateKey").text = util.to_string(certificate.get("encPrivateKey", None))
|
|
650
|
+
if util.to_string(certificate.get("deleteCertificate", None)):
|
|
651
|
+
ET.SubElement(root, "DeleteCertificate").text = util.to_string(certificate.get("deleteCertificate", None))
|
|
644
652
|
entity = ET.tostring(root, "UTF-8")
|
|
645
653
|
if len(entity) > const.MAX_CERT_XML_BODY_SIZE:
|
|
646
654
|
error_message = "XML body size exceeds {} KB limit".format(const.MAX_CERT_XML_BODY_SIZE / 1024)
|
|
@@ -1336,7 +1344,12 @@ class Convertor(object):
|
|
|
1336
1344
|
d = self._find_item(domain, "CreateTime")
|
|
1337
1345
|
certificate_id = self._find_item(domain, "CertificateId")
|
|
1338
1346
|
create_time = DateTime.UTCToLocal(d)
|
|
1339
|
-
|
|
1347
|
+
name = self._find_item(domain, "Name")
|
|
1348
|
+
certificate_type = self._find_item(domain, "CertificateType")
|
|
1349
|
+
e = self._find_item(domain, "ExpiredTime")
|
|
1350
|
+
expired_time = DateTime.UTCToLocal(e)
|
|
1351
|
+
curr_bucket = BucketCustomDomain(domainName=domain_name, createTime=create_time, certificateId=certificate_id,
|
|
1352
|
+
name=name, certificateType=certificate_type, expiredTime=expired_time)
|
|
1340
1353
|
entries.append(curr_bucket)
|
|
1341
1354
|
|
|
1342
1355
|
return ListBucketCustomDomainsResponse(domains=entries)
|