zenlayercloud-sdk-python 2.0.62__py3-none-any.whl → 2.0.63__py3-none-any.whl
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.
- zenlayercloud/__init__.py +1 -1
- zenlayercloud/common/abstract_client.py +20 -0
- zenlayercloud/common/config.py +17 -1
- zenlayercloud/common/excpetion/error_code.py +2 -0
- zenlayercloud/zec/v20250901/models.py +76 -0
- zenlayercloud/zec/v20250901/zec_client.py +18 -0
- {zenlayercloud_sdk_python-2.0.62.dist-info → zenlayercloud_sdk_python-2.0.63.dist-info}/METADATA +1 -1
- {zenlayercloud_sdk_python-2.0.62.dist-info → zenlayercloud_sdk_python-2.0.63.dist-info}/RECORD +11 -11
- {zenlayercloud_sdk_python-2.0.62.dist-info → zenlayercloud_sdk_python-2.0.63.dist-info}/WHEEL +0 -0
- {zenlayercloud_sdk_python-2.0.62.dist-info → zenlayercloud_sdk_python-2.0.63.dist-info}/licenses/LICENSE +0 -0
- {zenlayercloud_sdk_python-2.0.62.dist-info → zenlayercloud_sdk_python-2.0.63.dist-info}/top_level.txt +0 -0
zenlayercloud/__init__.py
CHANGED
|
@@ -48,6 +48,26 @@ class AbstractClient(object):
|
|
|
48
48
|
code=error_code.SDK_INVALID_REQUEST,
|
|
49
49
|
message="Request must be AbstractModel"
|
|
50
50
|
)
|
|
51
|
+
|
|
52
|
+
max_retries = max(self.config.rate_limit_max_retries or 0, 0)
|
|
53
|
+
duration_func = self.config.rate_limit_retry_duration
|
|
54
|
+
|
|
55
|
+
last_exception = None
|
|
56
|
+
for idx in range(max_retries + 1):
|
|
57
|
+
try:
|
|
58
|
+
return self._do_api_call(action, request, method, headers)
|
|
59
|
+
except ZenlayerCloudSdkException as e:
|
|
60
|
+
if idx < max_retries and e.code == error_code.REQUEST_LIMIT_EXCEEDED:
|
|
61
|
+
last_exception = e
|
|
62
|
+
duration = duration_func(idx)
|
|
63
|
+
_logger.warning("rate limit exceeded, retrying (%d/%d) in %s seconds: %s",
|
|
64
|
+
idx, max_retries, duration, e.message)
|
|
65
|
+
time.sleep(duration)
|
|
66
|
+
continue
|
|
67
|
+
raise
|
|
68
|
+
raise last_exception
|
|
69
|
+
|
|
70
|
+
def _do_api_call(self, action, request, method, headers) -> dict:
|
|
51
71
|
uri = "/api/v2/%s" % self._service
|
|
52
72
|
req = BaseRequest(host=self.config.domain, method=method, uri=uri, header=headers)
|
|
53
73
|
|
zenlayercloud/common/config.py
CHANGED
|
@@ -3,11 +3,19 @@
|
|
|
3
3
|
|
|
4
4
|
DEFAULT_DOMAIN = "console.zenlayer.com"
|
|
5
5
|
|
|
6
|
+
DEFAULT_RATE_LIMIT_MAX_RETRIES = 3
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def exponential_backoff(index):
|
|
10
|
+
"""Default backoff: 1s, 2s, 4s, 8s, ..."""
|
|
11
|
+
return 2 ** index
|
|
12
|
+
|
|
6
13
|
|
|
7
14
|
class Config(object):
|
|
8
15
|
|
|
9
16
|
def __init__(self, scheme=None, domain=None, request_timeout=60, proxy=None, keep_alive=False, debug=False,
|
|
10
|
-
certification=None
|
|
17
|
+
certification=None, rate_limit_max_retries=DEFAULT_RATE_LIMIT_MAX_RETRIES,
|
|
18
|
+
rate_limit_retry_duration=None):
|
|
11
19
|
"""config.
|
|
12
20
|
|
|
13
21
|
:param scheme: http or https, default is https.
|
|
@@ -20,6 +28,12 @@ class Config(object):
|
|
|
20
28
|
:type keep_alive: bool
|
|
21
29
|
:param debug: open or close debug mode.
|
|
22
30
|
:type debug: bool
|
|
31
|
+
:param rate_limit_max_retries: Max retries when REQUEST_LIMIT_EXCEEDED (HTTP 429)
|
|
32
|
+
is returned. Defaults to 3. Set to 0 to disable.
|
|
33
|
+
:type rate_limit_max_retries: int
|
|
34
|
+
:param rate_limit_retry_duration: A callable ``f(index) -> seconds`` that returns
|
|
35
|
+
the wait time before the next retry. Defaults to exponential backoff.
|
|
36
|
+
:type rate_limit_retry_duration: callable
|
|
23
37
|
"""
|
|
24
38
|
|
|
25
39
|
self.scheme = scheme or "https"
|
|
@@ -29,4 +43,6 @@ class Config(object):
|
|
|
29
43
|
self.request_timeout = 60 if request_timeout is None else request_timeout
|
|
30
44
|
self.debug = debug
|
|
31
45
|
self.certification = certification
|
|
46
|
+
self.rate_limit_max_retries = rate_limit_max_retries
|
|
47
|
+
self.rate_limit_retry_duration = rate_limit_retry_duration or exponential_backoff
|
|
32
48
|
|
|
@@ -1083,9 +1083,11 @@ class ChangeNicNetworkTypeResponse(AbstractModel):
|
|
|
1083
1083
|
class ReleaseInstancesRequest(AbstractModel):
|
|
1084
1084
|
def __init__(self):
|
|
1085
1085
|
self.instanceIds = None
|
|
1086
|
+
self.dependResource = None
|
|
1086
1087
|
|
|
1087
1088
|
def _deserialize(self, params):
|
|
1088
1089
|
self.instanceIds = params.get("instanceIds")
|
|
1090
|
+
self.dependResource = params.get("dependResource")
|
|
1089
1091
|
|
|
1090
1092
|
|
|
1091
1093
|
class ReleaseInstancesResponse(AbstractModel):
|
|
@@ -1181,16 +1183,72 @@ class InquiryPriceModifyInstanceTypeResponse(AbstractModel):
|
|
|
1181
1183
|
def __init__(self):
|
|
1182
1184
|
self.requestId = None
|
|
1183
1185
|
self.specPrice = None
|
|
1186
|
+
self.gpuPrice = None
|
|
1184
1187
|
self.systemDiskPrice = None
|
|
1185
1188
|
|
|
1186
1189
|
def _deserialize(self, params):
|
|
1187
1190
|
self.requestId = params.get("requestId")
|
|
1188
1191
|
if params.get("specPrice") is not None:
|
|
1189
1192
|
self.specPrice = PriceItem(params.get("specPrice"))
|
|
1193
|
+
if params.get("gpuPrice") is not None:
|
|
1194
|
+
self.gpuPrice = PriceItem(params.get("gpuPrice"))
|
|
1190
1195
|
if params.get("systemDiskPrice") is not None:
|
|
1191
1196
|
self.systemDiskPrice = PriceItem(params.get("systemDiskPrice"))
|
|
1192
1197
|
|
|
1193
1198
|
|
|
1199
|
+
class DescribeZoneGpuInstanceConfigInfosRequest(AbstractModel):
|
|
1200
|
+
def __init__(self):
|
|
1201
|
+
self.zoneId = None
|
|
1202
|
+
self.instanceType = None
|
|
1203
|
+
|
|
1204
|
+
def _deserialize(self, params):
|
|
1205
|
+
self.zoneId = params.get("zoneId")
|
|
1206
|
+
self.instanceType = params.get("instanceType")
|
|
1207
|
+
|
|
1208
|
+
|
|
1209
|
+
class DescribeZoneGpuInstanceConfigInfosResponse(AbstractModel):
|
|
1210
|
+
def __init__(self):
|
|
1211
|
+
self.requestId = None
|
|
1212
|
+
self.instanceTypeQuotaSet = None
|
|
1213
|
+
|
|
1214
|
+
def _deserialize(self, params):
|
|
1215
|
+
self.requestId = params.get("requestId")
|
|
1216
|
+
if params.get("instanceTypeQuotaSet") is not None:
|
|
1217
|
+
self.instanceTypeQuotaSet = []
|
|
1218
|
+
for item in params.get("instanceTypeQuotaSet"):
|
|
1219
|
+
obj = GpuInstanceTypeQuotaItem(item)
|
|
1220
|
+
self.instanceTypeQuotaSet.append(obj)
|
|
1221
|
+
|
|
1222
|
+
|
|
1223
|
+
class GpuInstanceTypeQuotaItem(AbstractModel):
|
|
1224
|
+
def __init__(self, params=None):
|
|
1225
|
+
if params is None:
|
|
1226
|
+
params = {}
|
|
1227
|
+
if len(params) > 0:
|
|
1228
|
+
self._deserialize(params)
|
|
1229
|
+
return
|
|
1230
|
+
self.zoneId = None
|
|
1231
|
+
self.instanceType = None
|
|
1232
|
+
self.cpuCount = None
|
|
1233
|
+
self.memory = None
|
|
1234
|
+
self.gpuAmount = None
|
|
1235
|
+
self.instanceTypeName = None
|
|
1236
|
+
self.bps = None
|
|
1237
|
+
self.pps = None
|
|
1238
|
+
self.inventoryCapacity = None
|
|
1239
|
+
|
|
1240
|
+
def _deserialize(self, params):
|
|
1241
|
+
self.zoneId = params.get("zoneId")
|
|
1242
|
+
self.instanceType = params.get("instanceType")
|
|
1243
|
+
self.cpuCount = params.get("cpuCount")
|
|
1244
|
+
self.memory = params.get("memory")
|
|
1245
|
+
self.gpuAmount = params.get("gpuAmount")
|
|
1246
|
+
self.instanceTypeName = params.get("instanceTypeName")
|
|
1247
|
+
self.bps = params.get("bps")
|
|
1248
|
+
self.pps = params.get("pps")
|
|
1249
|
+
self.inventoryCapacity = params.get("inventoryCapacity")
|
|
1250
|
+
|
|
1251
|
+
|
|
1194
1252
|
class DescribeImagesRequest(AbstractModel):
|
|
1195
1253
|
def __init__(self):
|
|
1196
1254
|
self.zoneId = None
|
|
@@ -4356,6 +4414,24 @@ class InquiryPriceChangeEipInternetChargeTypeResponse(AbstractModel):
|
|
|
4356
4414
|
self.remoteBandwidthPrice = PriceItem(params.get("remoteBandwidthPrice"))
|
|
4357
4415
|
|
|
4358
4416
|
|
|
4417
|
+
class ModifyEipTrafficPackageRequest(AbstractModel):
|
|
4418
|
+
def __init__(self):
|
|
4419
|
+
self.eipId = None
|
|
4420
|
+
self.trafficPackageSize = None
|
|
4421
|
+
|
|
4422
|
+
def _deserialize(self, params):
|
|
4423
|
+
self.eipId = params.get("eipId")
|
|
4424
|
+
self.trafficPackageSize = params.get("trafficPackageSize")
|
|
4425
|
+
|
|
4426
|
+
|
|
4427
|
+
class ModifyEipTrafficPackageResponse(AbstractModel):
|
|
4428
|
+
def __init__(self):
|
|
4429
|
+
self.requestId = None
|
|
4430
|
+
|
|
4431
|
+
def _deserialize(self, params):
|
|
4432
|
+
self.requestId = params.get("requestId")
|
|
4433
|
+
|
|
4434
|
+
|
|
4359
4435
|
class DescribeRoutesRequest(AbstractModel):
|
|
4360
4436
|
def __init__(self):
|
|
4361
4437
|
self.routeIds = None
|
|
@@ -233,6 +233,15 @@ class ZecClient(AbstractClient):
|
|
|
233
233
|
model._deserialize(response)
|
|
234
234
|
return model
|
|
235
235
|
|
|
236
|
+
def DescribeZoneGpuInstanceConfigInfos(self, request):
|
|
237
|
+
"""
|
|
238
|
+
查询可用区售卖的 GPU 规格信息
|
|
239
|
+
"""
|
|
240
|
+
response = self._api_call("DescribeZoneGpuInstanceConfigInfos", request)
|
|
241
|
+
model = models.DescribeZoneGpuInstanceConfigInfosResponse()
|
|
242
|
+
model._deserialize(response)
|
|
243
|
+
return model
|
|
244
|
+
|
|
236
245
|
def DescribeImages(self, request):
|
|
237
246
|
"""
|
|
238
247
|
查询某节点支持的镜像列表。
|
|
@@ -1052,6 +1061,15 @@ class ZecClient(AbstractClient):
|
|
|
1052
1061
|
model._deserialize(response)
|
|
1053
1062
|
return model
|
|
1054
1063
|
|
|
1064
|
+
def ModifyEipTrafficPackage(self, request):
|
|
1065
|
+
"""
|
|
1066
|
+
调整弹性公网IP流量包。
|
|
1067
|
+
"""
|
|
1068
|
+
response = self._api_call("ModifyEipTrafficPackage", request)
|
|
1069
|
+
model = models.ModifyEipTrafficPackageResponse()
|
|
1070
|
+
model._deserialize(response)
|
|
1071
|
+
return model
|
|
1072
|
+
|
|
1055
1073
|
def DescribeRoutes(self, request):
|
|
1056
1074
|
"""
|
|
1057
1075
|
查询路由列表。用户可以根据ID、名称等信息来搜索Route信息。路由列表包括系统生成的以及用户创建的路由。
|
{zenlayercloud_sdk_python-2.0.62.dist-info → zenlayercloud_sdk_python-2.0.63.dist-info}/RECORD
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
zenlayercloud/__init__.py,sha256=
|
|
1
|
+
zenlayercloud/__init__.py,sha256=lLZGVoM0hmmvF9hChCg7KN0UlpZ4J6-2CCMTNd5X400,95
|
|
2
2
|
zenlayercloud/aigw/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
3
3
|
zenlayercloud/aigw/v20260414/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
4
|
zenlayercloud/aigw/v20260414/aigw_client.py,sha256=inQDTflrPy3InIZMOvRTjJGz1vE04Jv89XhLOZYuPis,5990
|
|
@@ -19,15 +19,15 @@ zenlayercloud/ccs/v20250901/__init__.py,sha256=A82oWiV038jIXEbygeOeO1DzWKOqGkdQI
|
|
|
19
19
|
zenlayercloud/ccs/v20250901/ccs_client.py,sha256=udKOGiGDxOCtiF7Wh5RdMObwYeE8akvc4S6n2yz1soY,1124
|
|
20
20
|
zenlayercloud/ccs/v20250901/models.py,sha256=52DHoBqyr6KQtvxgHnK0Ux2Ukm3Cce_2mEz1IDKYZWg,3110
|
|
21
21
|
zenlayercloud/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
22
|
-
zenlayercloud/common/abstract_client.py,sha256=
|
|
22
|
+
zenlayercloud/common/abstract_client.py,sha256=gWwrUXnh7H6kH_1g2CqyJvxJvVpx6QXgASXDAkZmGGc,6446
|
|
23
23
|
zenlayercloud/common/abstract_model.py,sha256=4wPo9ZnW0HuKQ9_jDW7Hh9BeJLvzE1gM-eHJi_Ldg_0,1626
|
|
24
|
-
zenlayercloud/common/config.py,sha256=
|
|
24
|
+
zenlayercloud/common/config.py,sha256=7Ycuaqh6gN6KWfqkDFWbXL-7XJ4kqWJadlp1xIpWPR0,1907
|
|
25
25
|
zenlayercloud/common/credential.py,sha256=83uoJoomkud2AoxzAKCncFnO8YHhwFZhdco0I-ohT48,1723
|
|
26
26
|
zenlayercloud/common/request.py,sha256=TYKa-cS2bCI7uZYX8p1C8rcyIqIE6ezlW63JzG7nSag,2925
|
|
27
27
|
zenlayercloud/common/response.py,sha256=94XuYv189UaRjxCoS-wH7VBjjnNc26ydWCCfQnjlQxo,497
|
|
28
28
|
zenlayercloud/common/utils.py,sha256=6HpSEU3AOwMdDiBMvR_LE3FXLQyrvnCneAqxjL_FMbc,354
|
|
29
29
|
zenlayercloud/common/excpetion/__init__.py,sha256=A82oWiV038jIXEbygeOeO1DzWKOqGkdQI2X9BX0HkvM,69
|
|
30
|
-
zenlayercloud/common/excpetion/error_code.py,sha256=
|
|
30
|
+
zenlayercloud/common/excpetion/error_code.py,sha256=LtY4AL-KFnAG3UcU2fxGsfn56_qO2eZIvS8C6D6334o,221
|
|
31
31
|
zenlayercloud/common/excpetion/zenlayer_cloud_sdk_exception.py,sha256=IVKBhJKEKwbCgVk2K7bAZk8-rA4bBgbAaD2yciqaOBg,866
|
|
32
32
|
zenlayercloud/ipt/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
33
33
|
zenlayercloud/ipt/v20240901/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -77,8 +77,8 @@ zenlayercloud/zec/v20240401/__init__.py,sha256=A82oWiV038jIXEbygeOeO1DzWKOqGkdQI
|
|
|
77
77
|
zenlayercloud/zec/v20240401/models.py,sha256=2y8NHcednqU-_TdxG6WMfdA1ySvDaTeS7SnnxPfOBNE,131319
|
|
78
78
|
zenlayercloud/zec/v20240401/zec_client.py,sha256=KoDlhy0ufpQB8eHCr4WP1AY5TNvtWK_0XnyoUGA0TeA,29784
|
|
79
79
|
zenlayercloud/zec/v20250901/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
80
|
-
zenlayercloud/zec/v20250901/models.py,sha256=
|
|
81
|
-
zenlayercloud/zec/v20250901/zec_client.py,sha256=
|
|
80
|
+
zenlayercloud/zec/v20250901/models.py,sha256=L61TQsc-fU3BjkJIvOBy6XeiAZsWNs8FMH7RQ6FId3g,246023
|
|
81
|
+
zenlayercloud/zec/v20250901/zec_client.py,sha256=634ZSL7ypM9pCLvk_-OPeDtGxPYhNUw-8XbbhCTnczw,68137
|
|
82
82
|
zenlayercloud/zga/__init__.py,sha256=A82oWiV038jIXEbygeOeO1DzWKOqGkdQI2X9BX0HkvM,69
|
|
83
83
|
zenlayercloud/zga/v20241104/__init__.py,sha256=A82oWiV038jIXEbygeOeO1DzWKOqGkdQI2X9BX0HkvM,69
|
|
84
84
|
zenlayercloud/zga/v20241104/models.py,sha256=92gBJss6q0Z5FGk2DfHBTvCdif6OY5cVU32gXOY3E2M,40155
|
|
@@ -99,8 +99,8 @@ zenlayercloud/zrm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU
|
|
|
99
99
|
zenlayercloud/zrm/v20251014/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
100
100
|
zenlayercloud/zrm/v20251014/models.py,sha256=3As3PAdEKe_Cpb1QpGI2_mrMlM2uZ6QOa4isOi09q3I,7491
|
|
101
101
|
zenlayercloud/zrm/v20251014/zrm_client.py,sha256=p3fKeOdhGdjx_MhFcMuu9wv4bkSiwn_GNrj_570fkMg,2504
|
|
102
|
-
zenlayercloud_sdk_python-2.0.
|
|
103
|
-
zenlayercloud_sdk_python-2.0.
|
|
104
|
-
zenlayercloud_sdk_python-2.0.
|
|
105
|
-
zenlayercloud_sdk_python-2.0.
|
|
106
|
-
zenlayercloud_sdk_python-2.0.
|
|
102
|
+
zenlayercloud_sdk_python-2.0.63.dist-info/licenses/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
|
|
103
|
+
zenlayercloud_sdk_python-2.0.63.dist-info/METADATA,sha256=VOfU6mBs7-rUD9N2oau7dyQkcHPer8kYN8zf5nE1kR4,1653
|
|
104
|
+
zenlayercloud_sdk_python-2.0.63.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
|
|
105
|
+
zenlayercloud_sdk_python-2.0.63.dist-info/top_level.txt,sha256=ZU6L6c0yQDkyO8nG0oGpC6ptc0TNucEncz3xbFsoHmE,14
|
|
106
|
+
zenlayercloud_sdk_python-2.0.63.dist-info/RECORD,,
|
{zenlayercloud_sdk_python-2.0.62.dist-info → zenlayercloud_sdk_python-2.0.63.dist-info}/WHEEL
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|