gcore 0.16.0__py3-none-any.whl → 0.23.0__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.

Potentially problematic release.


This version of gcore might be problematic. Click here for more details.

Files changed (220) hide show
  1. gcore/_client.py +16 -0
  2. gcore/_models.py +37 -15
  3. gcore/_streaming.py +12 -12
  4. gcore/_utils/_sync.py +3 -31
  5. gcore/_utils/_utils.py +1 -1
  6. gcore/_version.py +1 -1
  7. gcore/resources/cdn/audit_log.py +4 -4
  8. gcore/resources/cdn/cdn.py +120 -21
  9. gcore/resources/cdn/ip_ranges.py +97 -5
  10. gcore/resources/cdn/{logs/logs.py → logs.py} +9 -9
  11. gcore/resources/cdn/resources/resources.py +20 -20
  12. gcore/resources/cdn/statistics.py +56 -58
  13. gcore/resources/cloud/__init__.py +40 -12
  14. gcore/resources/cloud/audit_logs.py +20 -0
  15. gcore/resources/cloud/baremetal/servers.py +48 -14
  16. gcore/resources/cloud/billing_reservations.py +2 -2
  17. gcore/resources/cloud/cloud.py +100 -18
  18. gcore/resources/cloud/databases/__init__.py +33 -0
  19. gcore/resources/cloud/databases/databases.py +102 -0
  20. gcore/resources/cloud/databases/postgres/__init__.py +61 -0
  21. gcore/resources/cloud/databases/postgres/clusters/__init__.py +33 -0
  22. gcore/resources/cloud/databases/postgres/clusters/clusters.py +716 -0
  23. gcore/resources/cloud/databases/postgres/clusters/user_credentials.py +281 -0
  24. gcore/resources/cloud/databases/postgres/configurations.py +169 -0
  25. gcore/resources/cloud/databases/postgres/custom_configurations.py +197 -0
  26. gcore/resources/cloud/databases/postgres/postgres.py +166 -0
  27. gcore/resources/cloud/file_shares/file_shares.py +154 -49
  28. gcore/resources/cloud/floating_ips.py +42 -10
  29. gcore/resources/cloud/gpu_baremetal_clusters/gpu_baremetal_clusters.py +70 -10
  30. gcore/resources/cloud/gpu_baremetal_clusters/images.py +40 -6
  31. gcore/resources/cloud/gpu_baremetal_clusters/servers.py +16 -0
  32. gcore/resources/cloud/gpu_virtual_clusters/__init__.py +89 -0
  33. gcore/resources/cloud/gpu_virtual_clusters/flavors.py +211 -0
  34. gcore/resources/cloud/gpu_virtual_clusters/gpu_virtual_clusters.py +1551 -0
  35. gcore/resources/cloud/gpu_virtual_clusters/images.py +582 -0
  36. gcore/resources/cloud/gpu_virtual_clusters/interfaces.py +187 -0
  37. gcore/resources/cloud/gpu_virtual_clusters/servers.py +506 -0
  38. gcore/resources/cloud/gpu_virtual_clusters/volumes.py +187 -0
  39. gcore/resources/cloud/inference/deployments/deployments.py +52 -4
  40. gcore/resources/cloud/instances/images.py +72 -18
  41. gcore/resources/cloud/instances/instances.py +110 -18
  42. gcore/resources/cloud/instances/interfaces.py +12 -0
  43. gcore/resources/cloud/k8s/__init__.py +12 -12
  44. gcore/resources/cloud/k8s/clusters/clusters.py +25 -25
  45. gcore/resources/cloud/k8s/clusters/pools/pools.py +14 -14
  46. gcore/resources/cloud/k8s/k8s.py +24 -24
  47. gcore/resources/cloud/load_balancers/l7_policies/l7_policies.py +1420 -218
  48. gcore/resources/cloud/load_balancers/l7_policies/rules.py +134 -22
  49. gcore/resources/cloud/load_balancers/listeners.py +77 -6
  50. gcore/resources/cloud/load_balancers/load_balancers.py +92 -14
  51. gcore/resources/cloud/load_balancers/pools/pools.py +52 -4
  52. gcore/resources/cloud/networks/networks.py +30 -10
  53. gcore/resources/cloud/networks/subnets.py +26 -10
  54. gcore/resources/cloud/placement_groups.py +8 -0
  55. gcore/resources/cloud/projects.py +99 -119
  56. gcore/resources/cloud/quotas/requests.py +0 -8
  57. gcore/resources/cloud/reserved_fixed_ips/reserved_fixed_ips.py +18 -0
  58. gcore/resources/cloud/secrets.py +16 -0
  59. gcore/resources/cloud/security_groups/security_groups.py +38 -12
  60. gcore/resources/cloud/ssh_keys.py +10 -0
  61. gcore/resources/cloud/tasks.py +22 -7
  62. gcore/resources/cloud/volumes.py +65 -23
  63. gcore/resources/dns/zones/rrsets.py +10 -10
  64. gcore/resources/dns/zones/zones.py +2 -2
  65. gcore/resources/security/bgp_announces.py +0 -4
  66. gcore/resources/security/profiles.py +31 -7
  67. gcore/resources/storage/credentials.py +0 -28
  68. gcore/resources/storage/storage.py +2 -2
  69. gcore/types/cdn/__init__.py +5 -0
  70. gcore/types/cdn/alibaba_regions.py +22 -0
  71. gcore/types/cdn/audit_log_list_params.py +2 -2
  72. gcore/types/cdn/aws_regions.py +22 -0
  73. gcore/types/cdn/cdn_list_purge_statuses_response.py +10 -0
  74. gcore/types/cdn/cdn_resource.py +17 -12
  75. gcore/types/cdn/ip_range_list_ips_params.py +19 -0
  76. gcore/types/cdn/ip_range_list_params.py +19 -0
  77. gcore/types/cdn/resource_create_params.py +17 -12
  78. gcore/types/cdn/resource_purge_params.py +4 -4
  79. gcore/types/cdn/resource_replace_params.py +17 -12
  80. gcore/types/cdn/resource_update_params.py +17 -12
  81. gcore/types/cdn/resource_usage_stats.py +16 -15
  82. gcore/types/cdn/resources/cdn_resource_rule.py +15 -10
  83. gcore/types/cdn/resources/rule_create_params.py +15 -10
  84. gcore/types/cdn/resources/rule_replace_params.py +15 -10
  85. gcore/types/cdn/resources/rule_update_params.py +15 -10
  86. gcore/types/cdn/rule_template.py +15 -10
  87. gcore/types/cdn/rule_template_create_params.py +15 -10
  88. gcore/types/cdn/rule_template_replace_params.py +15 -10
  89. gcore/types/cdn/rule_template_update_params.py +15 -10
  90. gcore/types/cdn/statistic_get_logs_usage_aggregated_params.py +4 -1
  91. gcore/types/cdn/statistic_get_logs_usage_series_params.py +5 -12
  92. gcore/types/cdn/statistic_get_resource_usage_aggregated_params.py +10 -21
  93. gcore/types/cdn/statistic_get_resource_usage_series_params.py +6 -1
  94. gcore/types/cdn/statistic_get_shield_usage_aggregated_params.py +5 -2
  95. gcore/types/cdn/statistic_get_shield_usage_series_params.py +3 -0
  96. gcore/types/cloud/__init__.py +9 -3
  97. gcore/types/cloud/audit_log_entry.py +9 -3
  98. gcore/types/cloud/audit_log_list_params.py +12 -0
  99. gcore/types/cloud/baremetal/server_create_params.py +7 -7
  100. gcore/types/cloud/baremetal_flavor.py +0 -6
  101. gcore/types/cloud/billing_reservation_list_params.py +1 -1
  102. gcore/types/cloud/blackhole_port.py +4 -1
  103. gcore/types/cloud/databases/postgres/__init__.py +12 -0
  104. gcore/types/cloud/databases/postgres/cluster_create_params.py +108 -0
  105. gcore/types/cloud/databases/postgres/cluster_list_params.py +19 -0
  106. gcore/types/cloud/databases/postgres/cluster_update_params.py +102 -0
  107. gcore/types/cloud/databases/postgres/clusters/__init__.py +5 -0
  108. gcore/types/cloud/databases/postgres/clusters/postgres_user_credentials.py +13 -0
  109. gcore/types/cloud/databases/postgres/custom_configuration_validate_params.py +19 -0
  110. gcore/types/cloud/databases/postgres/pg_conf_validation.py +15 -0
  111. gcore/types/cloud/databases/postgres/postgres_cluster.py +118 -0
  112. gcore/types/cloud/databases/postgres/postgres_cluster_short.py +22 -0
  113. gcore/types/cloud/databases/postgres/postgres_configuration.py +31 -0
  114. gcore/types/cloud/file_share_create_params.py +8 -8
  115. gcore/types/cloud/file_share_update_params.py +7 -2
  116. gcore/types/cloud/floating_ip.py +5 -1
  117. gcore/types/cloud/floating_ip_create_params.py +4 -4
  118. gcore/types/cloud/floating_ip_detailed.py +5 -1
  119. gcore/types/cloud/floating_ip_list_params.py +8 -0
  120. gcore/types/cloud/floating_ip_update_params.py +7 -2
  121. gcore/types/cloud/gpu_baremetal_cluster.py +18 -3
  122. gcore/types/cloud/gpu_baremetal_cluster_action_params.py +7 -2
  123. gcore/types/cloud/gpu_baremetal_cluster_create_params.py +16 -4
  124. gcore/types/cloud/gpu_baremetal_clusters/gpu_baremetal_cluster_server.py +5 -2
  125. gcore/types/cloud/gpu_baremetal_clusters/image_upload_params.py +4 -4
  126. gcore/types/cloud/gpu_image.py +9 -0
  127. gcore/types/cloud/gpu_virtual_cluster.py +189 -0
  128. gcore/types/cloud/gpu_virtual_cluster_action_params.py +127 -0
  129. gcore/types/cloud/gpu_virtual_cluster_create_params.py +213 -0
  130. gcore/types/cloud/gpu_virtual_cluster_delete_params.py +41 -0
  131. gcore/types/cloud/gpu_virtual_cluster_list_params.py +21 -0
  132. gcore/types/cloud/gpu_virtual_cluster_update_params.py +18 -0
  133. gcore/types/cloud/gpu_virtual_clusters/__init__.py +16 -0
  134. gcore/types/cloud/gpu_virtual_clusters/flavor_list_params.py +21 -0
  135. gcore/types/cloud/gpu_virtual_clusters/gpu_virtual_cluster_server.py +77 -0
  136. gcore/types/cloud/gpu_virtual_clusters/gpu_virtual_cluster_server_list.py +16 -0
  137. gcore/types/cloud/gpu_virtual_clusters/gpu_virtual_cluster_volume.py +64 -0
  138. gcore/types/cloud/gpu_virtual_clusters/gpu_virtual_cluster_volume_list.py +16 -0
  139. gcore/types/cloud/gpu_virtual_clusters/gpu_virtual_flavor.py +155 -0
  140. gcore/types/cloud/gpu_virtual_clusters/gpu_virtual_flavor_list.py +16 -0
  141. gcore/types/cloud/gpu_virtual_clusters/gpu_virtual_interface.py +190 -0
  142. gcore/types/cloud/gpu_virtual_clusters/gpu_virtual_interface_list.py +16 -0
  143. gcore/types/cloud/gpu_virtual_clusters/image_upload_params.py +56 -0
  144. gcore/types/cloud/gpu_virtual_clusters/server_delete_params.py +44 -0
  145. gcore/types/cloud/gpu_virtual_clusters/server_list_params.py +75 -0
  146. gcore/types/cloud/image.py +9 -0
  147. gcore/types/cloud/inference/deployment_create_params.py +1 -1
  148. gcore/types/cloud/inference/deployment_update_params.py +1 -1
  149. gcore/types/cloud/inference/inference_deployment.py +1 -1
  150. gcore/types/cloud/instance_create_params.py +27 -27
  151. gcore/types/cloud/instance_update_params.py +7 -2
  152. gcore/types/cloud/instances/image_create_from_volume_params.py +4 -4
  153. gcore/types/cloud/instances/image_update_params.py +4 -4
  154. gcore/types/cloud/instances/image_upload_params.py +4 -4
  155. gcore/types/cloud/k8s/__init__.py +4 -4
  156. gcore/types/cloud/k8s/cluster_update_params.py +5 -5
  157. gcore/types/cloud/k8s/clusters/__init__.py +2 -2
  158. gcore/types/cloud/k8s/clusters/k8s_cluster_pool.py +2 -2
  159. gcore/types/cloud/k8s/clusters/k8s_cluster_pool_list.py +4 -4
  160. gcore/types/cloud/k8s/k8s_cluster.py +4 -4
  161. gcore/types/cloud/k8s/k8s_cluster_certificate.py +2 -2
  162. gcore/types/cloud/k8s/k8s_cluster_kubeconfig.py +14 -2
  163. gcore/types/cloud/k8s/k8s_cluster_list.py +4 -4
  164. gcore/types/cloud/k8s_cluster_version.py +2 -2
  165. gcore/types/cloud/k8s_cluster_version_list.py +4 -4
  166. gcore/types/cloud/load_balancer_create_params.py +14 -8
  167. gcore/types/cloud/load_balancer_flavor_detail.py +2 -2
  168. gcore/types/cloud/load_balancer_l7_policy.py +29 -16
  169. gcore/types/cloud/load_balancer_l7_policy_list.py +3 -3
  170. gcore/types/cloud/load_balancer_l7_rule.py +14 -23
  171. gcore/types/cloud/load_balancer_l7_rule_list.py +3 -3
  172. gcore/types/cloud/load_balancer_listener_detail.py +2 -2
  173. gcore/types/cloud/load_balancer_update_params.py +7 -2
  174. gcore/types/cloud/load_balancers/__init__.py +1 -0
  175. gcore/types/cloud/load_balancers/l7_policies/rule_create_params.py +5 -10
  176. gcore/types/cloud/load_balancers/l7_policies/rule_replace_params.py +7 -11
  177. gcore/types/cloud/load_balancers/l7_policy_create_params.py +102 -18
  178. gcore/types/cloud/load_balancers/l7_policy_replace_params.py +94 -16
  179. gcore/types/cloud/load_balancers/listener_create_params.py +4 -1
  180. gcore/types/cloud/load_balancers/listener_delete_params.py +18 -0
  181. gcore/types/cloud/load_balancers/listener_update_params.py +4 -1
  182. gcore/types/cloud/load_balancers/pool_create_params.py +1 -1
  183. gcore/types/cloud/network_create_params.py +4 -4
  184. gcore/types/cloud/network_update_params.py +7 -2
  185. gcore/types/cloud/networks/subnet_create_params.py +4 -4
  186. gcore/types/cloud/networks/subnet_update_params.py +7 -2
  187. gcore/types/cloud/project_create_params.py +0 -6
  188. gcore/types/cloud/{project_replace_params.py → project_update_params.py} +2 -2
  189. gcore/types/cloud/quotas/request_create_params.py +0 -3
  190. gcore/types/cloud/region.py +3 -3
  191. gcore/types/cloud/security_group.py +8 -1
  192. gcore/types/cloud/security_group_create_params.py +7 -5
  193. gcore/types/cloud/security_group_list_params.py +6 -4
  194. gcore/types/cloud/security_group_update_params.py +7 -2
  195. gcore/types/cloud/ssh_key_list_params.py +7 -0
  196. gcore/types/cloud/tag.py +2 -2
  197. gcore/types/cloud/task_id_list.py +3 -3
  198. gcore/types/cloud/volume_create_params.py +12 -12
  199. gcore/types/cloud/volume_update_params.py +7 -2
  200. gcore/types/dns/zone_list_params.py +1 -1
  201. gcore/types/iam/api_token_create.py +70 -1
  202. gcore/types/security/bgp_announce_list_params.py +0 -2
  203. gcore/types/security/client_profile.py +1 -0
  204. gcore/types/security/profile_create_params.py +4 -2
  205. gcore/types/security/profile_recreate_params.py +4 -2
  206. gcore/types/security/profile_replace_params.py +4 -2
  207. gcore/types/storage/credential_recreate_params.py +0 -17
  208. gcore/types/storage/storage.py +1 -1
  209. gcore/types/storage/storage_create_params.py +1 -1
  210. gcore/types/streaming/stream.py +3 -2
  211. gcore/types/streaming/video.py +1 -1
  212. gcore/types/waap/domains/custom_rule_create_params.py +1 -1
  213. gcore/types/waap/domains/custom_rule_update_params.py +1 -1
  214. gcore/types/waap/domains/waap_custom_rule.py +1 -1
  215. {gcore-0.16.0.dist-info → gcore-0.23.0.dist-info}/METADATA +14 -14
  216. {gcore-0.16.0.dist-info → gcore-0.23.0.dist-info}/RECORD +219 -168
  217. gcore/resources/cdn/logs/__init__.py +0 -19
  218. /gcore/types/{cdn/logs → cloud/databases}/__init__.py +0 -0
  219. {gcore-0.16.0.dist-info → gcore-0.23.0.dist-info}/WHEEL +0 -0
  220. {gcore-0.16.0.dist-info → gcore-0.23.0.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,187 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from __future__ import annotations
4
+
5
+ import httpx
6
+
7
+ from ...._types import Body, Query, Headers, NotGiven, not_given
8
+ from ...._compat import cached_property
9
+ from ...._resource import SyncAPIResource, AsyncAPIResource
10
+ from ...._response import (
11
+ to_raw_response_wrapper,
12
+ to_streamed_response_wrapper,
13
+ async_to_raw_response_wrapper,
14
+ async_to_streamed_response_wrapper,
15
+ )
16
+ from ...._base_client import make_request_options
17
+ from ....types.cloud.gpu_virtual_clusters.gpu_virtual_cluster_volume_list import GPUVirtualClusterVolumeList
18
+
19
+ __all__ = ["VolumesResource", "AsyncVolumesResource"]
20
+
21
+
22
+ class VolumesResource(SyncAPIResource):
23
+ @cached_property
24
+ def with_raw_response(self) -> VolumesResourceWithRawResponse:
25
+ """
26
+ This property can be used as a prefix for any HTTP method call to return
27
+ the raw response object instead of the parsed content.
28
+
29
+ For more information, see https://www.github.com/G-Core/gcore-python#accessing-raw-response-data-eg-headers
30
+ """
31
+ return VolumesResourceWithRawResponse(self)
32
+
33
+ @cached_property
34
+ def with_streaming_response(self) -> VolumesResourceWithStreamingResponse:
35
+ """
36
+ An alternative to `.with_raw_response` that doesn't eagerly read the response body.
37
+
38
+ For more information, see https://www.github.com/G-Core/gcore-python#with_streaming_response
39
+ """
40
+ return VolumesResourceWithStreamingResponse(self)
41
+
42
+ def list(
43
+ self,
44
+ cluster_id: str,
45
+ *,
46
+ project_id: int | None = None,
47
+ region_id: int | None = None,
48
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
49
+ # The extra values given here take precedence over values defined on the client or passed to this method.
50
+ extra_headers: Headers | None = None,
51
+ extra_query: Query | None = None,
52
+ extra_body: Body | None = None,
53
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
54
+ ) -> GPUVirtualClusterVolumeList:
55
+ """
56
+ List all volumes attached to servers in a virtual GPU cluster.
57
+
58
+ Args:
59
+ project_id: Project ID
60
+
61
+ region_id: Region ID
62
+
63
+ cluster_id: Cluster unique identifier
64
+
65
+ extra_headers: Send extra headers
66
+
67
+ extra_query: Add additional query parameters to the request
68
+
69
+ extra_body: Add additional JSON properties to the request
70
+
71
+ timeout: Override the client-level default timeout for this request, in seconds
72
+ """
73
+ if project_id is None:
74
+ project_id = self._client._get_cloud_project_id_path_param()
75
+ if region_id is None:
76
+ region_id = self._client._get_cloud_region_id_path_param()
77
+ if not cluster_id:
78
+ raise ValueError(f"Expected a non-empty value for `cluster_id` but received {cluster_id!r}")
79
+ return self._get(
80
+ f"/cloud/v3/gpu/virtual/{project_id}/{region_id}/clusters/{cluster_id}/volumes",
81
+ options=make_request_options(
82
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
83
+ ),
84
+ cast_to=GPUVirtualClusterVolumeList,
85
+ )
86
+
87
+
88
+ class AsyncVolumesResource(AsyncAPIResource):
89
+ @cached_property
90
+ def with_raw_response(self) -> AsyncVolumesResourceWithRawResponse:
91
+ """
92
+ This property can be used as a prefix for any HTTP method call to return
93
+ the raw response object instead of the parsed content.
94
+
95
+ For more information, see https://www.github.com/G-Core/gcore-python#accessing-raw-response-data-eg-headers
96
+ """
97
+ return AsyncVolumesResourceWithRawResponse(self)
98
+
99
+ @cached_property
100
+ def with_streaming_response(self) -> AsyncVolumesResourceWithStreamingResponse:
101
+ """
102
+ An alternative to `.with_raw_response` that doesn't eagerly read the response body.
103
+
104
+ For more information, see https://www.github.com/G-Core/gcore-python#with_streaming_response
105
+ """
106
+ return AsyncVolumesResourceWithStreamingResponse(self)
107
+
108
+ async def list(
109
+ self,
110
+ cluster_id: str,
111
+ *,
112
+ project_id: int | None = None,
113
+ region_id: int | None = None,
114
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
115
+ # The extra values given here take precedence over values defined on the client or passed to this method.
116
+ extra_headers: Headers | None = None,
117
+ extra_query: Query | None = None,
118
+ extra_body: Body | None = None,
119
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
120
+ ) -> GPUVirtualClusterVolumeList:
121
+ """
122
+ List all volumes attached to servers in a virtual GPU cluster.
123
+
124
+ Args:
125
+ project_id: Project ID
126
+
127
+ region_id: Region ID
128
+
129
+ cluster_id: Cluster unique identifier
130
+
131
+ extra_headers: Send extra headers
132
+
133
+ extra_query: Add additional query parameters to the request
134
+
135
+ extra_body: Add additional JSON properties to the request
136
+
137
+ timeout: Override the client-level default timeout for this request, in seconds
138
+ """
139
+ if project_id is None:
140
+ project_id = self._client._get_cloud_project_id_path_param()
141
+ if region_id is None:
142
+ region_id = self._client._get_cloud_region_id_path_param()
143
+ if not cluster_id:
144
+ raise ValueError(f"Expected a non-empty value for `cluster_id` but received {cluster_id!r}")
145
+ return await self._get(
146
+ f"/cloud/v3/gpu/virtual/{project_id}/{region_id}/clusters/{cluster_id}/volumes",
147
+ options=make_request_options(
148
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
149
+ ),
150
+ cast_to=GPUVirtualClusterVolumeList,
151
+ )
152
+
153
+
154
+ class VolumesResourceWithRawResponse:
155
+ def __init__(self, volumes: VolumesResource) -> None:
156
+ self._volumes = volumes
157
+
158
+ self.list = to_raw_response_wrapper(
159
+ volumes.list,
160
+ )
161
+
162
+
163
+ class AsyncVolumesResourceWithRawResponse:
164
+ def __init__(self, volumes: AsyncVolumesResource) -> None:
165
+ self._volumes = volumes
166
+
167
+ self.list = async_to_raw_response_wrapper(
168
+ volumes.list,
169
+ )
170
+
171
+
172
+ class VolumesResourceWithStreamingResponse:
173
+ def __init__(self, volumes: VolumesResource) -> None:
174
+ self._volumes = volumes
175
+
176
+ self.list = to_streamed_response_wrapper(
177
+ volumes.list,
178
+ )
179
+
180
+
181
+ class AsyncVolumesResourceWithStreamingResponse:
182
+ def __init__(self, volumes: AsyncVolumesResource) -> None:
183
+ self._volumes = volumes
184
+
185
+ self.list = async_to_streamed_response_wrapper(
186
+ volumes.list,
187
+ )
@@ -109,7 +109,7 @@ class DeploymentsResource(SyncAPIResource):
109
109
  ValidationError will be raised.
110
110
 
111
111
  auth_enabled: Set to `true` to enable API key authentication for the inference instance.
112
- `"Authorization": "Bearer ****\\**"` or `"X-Api-Key": "****\\**"` header is required
112
+ `"Authorization": "Bearer *****"` or `"X-Api-Key": "*****"` header is required
113
113
  for the requests to the instance if enabled. This field is deprecated and will
114
114
  be removed in the future. Use `api_keys` field instead.If `auth_enabled` and
115
115
  `api_keys` are both specified, a ValidationError will be raised.
@@ -214,7 +214,7 @@ class DeploymentsResource(SyncAPIResource):
214
214
  and auth will be disabled on the deployment.
215
215
 
216
216
  auth_enabled: Set to `true` to enable API key authentication for the inference instance.
217
- `"Authorization": "Bearer ****\\**"` or `"X-Api-Key": "****\\**"` header is required
217
+ `"Authorization": "Bearer *****"` or `"X-Api-Key": "*****"` header is required
218
218
  for the requests to the instance if enabled. This field is deprecated and will
219
219
  be removed in the future. Use `api_keys` field instead.If `auth_enabled` and
220
220
  `api_keys` are both specified, a ValidationError will be raised.
@@ -580,6 +580,7 @@ class DeploymentsResource(SyncAPIResource):
580
580
  probes: Optional[deployment_create_params.Probes] | Omit = omit,
581
581
  api_timeout: Optional[int] | Omit = omit,
582
582
  polling_interval_seconds: int | Omit = omit,
583
+ polling_timeout_seconds: int | Omit = omit,
583
584
  timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
584
585
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
585
586
  # The extra values given here take precedence over values defined on the client or passed to this method.
@@ -615,6 +616,7 @@ class DeploymentsResource(SyncAPIResource):
615
616
  task_id=response.tasks[0],
616
617
  extra_headers=extra_headers,
617
618
  polling_interval_seconds=polling_interval_seconds,
619
+ polling_timeout_seconds=polling_timeout_seconds,
618
620
  )
619
621
  if (
620
622
  not task.created_resources
@@ -649,6 +651,7 @@ class DeploymentsResource(SyncAPIResource):
649
651
  probes: Optional[deployment_update_params.Probes] | Omit = omit,
650
652
  api_timeout: Optional[int] | Omit = omit,
651
653
  polling_interval_seconds: int | Omit = omit,
654
+ polling_timeout_seconds: int | Omit = omit,
652
655
  timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
653
656
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
654
657
  # The extra values given here take precedence over values defined on the client or passed to this method.
@@ -687,6 +690,7 @@ class DeploymentsResource(SyncAPIResource):
687
690
  task_id=response.tasks[0],
688
691
  extra_headers=extra_headers,
689
692
  polling_interval_seconds=polling_interval_seconds,
693
+ polling_timeout_seconds=polling_timeout_seconds,
690
694
  )
691
695
  return self.get(
692
696
  deployment_name=deployment_name,
@@ -701,6 +705,7 @@ class DeploymentsResource(SyncAPIResource):
701
705
  *,
702
706
  project_id: int | None = None,
703
707
  polling_interval_seconds: int | Omit = omit,
708
+ polling_timeout_seconds: int | Omit = omit,
704
709
  timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
705
710
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
706
711
  # The extra values given here take precedence over values defined on the client or passed to this method.
@@ -725,6 +730,7 @@ class DeploymentsResource(SyncAPIResource):
725
730
  task_id=response.tasks[0],
726
731
  extra_headers=extra_headers,
727
732
  polling_interval_seconds=polling_interval_seconds,
733
+ polling_timeout_seconds=polling_timeout_seconds,
728
734
  )
729
735
 
730
736
 
@@ -802,7 +808,7 @@ class AsyncDeploymentsResource(AsyncAPIResource):
802
808
  ValidationError will be raised.
803
809
 
804
810
  auth_enabled: Set to `true` to enable API key authentication for the inference instance.
805
- `"Authorization": "Bearer ****\\**"` or `"X-Api-Key": "****\\**"` header is required
811
+ `"Authorization": "Bearer *****"` or `"X-Api-Key": "*****"` header is required
806
812
  for the requests to the instance if enabled. This field is deprecated and will
807
813
  be removed in the future. Use `api_keys` field instead.If `auth_enabled` and
808
814
  `api_keys` are both specified, a ValidationError will be raised.
@@ -907,7 +913,7 @@ class AsyncDeploymentsResource(AsyncAPIResource):
907
913
  and auth will be disabled on the deployment.
908
914
 
909
915
  auth_enabled: Set to `true` to enable API key authentication for the inference instance.
910
- `"Authorization": "Bearer ****\\**"` or `"X-Api-Key": "****\\**"` header is required
916
+ `"Authorization": "Bearer *****"` or `"X-Api-Key": "*****"` header is required
911
917
  for the requests to the instance if enabled. This field is deprecated and will
912
918
  be removed in the future. Use `api_keys` field instead.If `auth_enabled` and
913
919
  `api_keys` are both specified, a ValidationError will be raised.
@@ -1273,6 +1279,7 @@ class AsyncDeploymentsResource(AsyncAPIResource):
1273
1279
  probes: Optional[deployment_create_params.Probes] | Omit = omit,
1274
1280
  api_timeout: Optional[int] | Omit = omit,
1275
1281
  polling_interval_seconds: int | Omit = omit,
1282
+ polling_timeout_seconds: int | Omit = omit,
1276
1283
  timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
1277
1284
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
1278
1285
  # The extra values given here take precedence over values defined on the client or passed to this method.
@@ -1308,6 +1315,7 @@ class AsyncDeploymentsResource(AsyncAPIResource):
1308
1315
  task_id=response.tasks[0],
1309
1316
  extra_headers=extra_headers,
1310
1317
  polling_interval_seconds=polling_interval_seconds,
1318
+ polling_timeout_seconds=polling_timeout_seconds,
1311
1319
  )
1312
1320
  if (
1313
1321
  not task.created_resources
@@ -1342,6 +1350,7 @@ class AsyncDeploymentsResource(AsyncAPIResource):
1342
1350
  probes: Optional[deployment_update_params.Probes] | Omit = omit,
1343
1351
  api_timeout: Optional[int] | Omit = omit,
1344
1352
  polling_interval_seconds: int | Omit = omit,
1353
+ polling_timeout_seconds: int | Omit = omit,
1345
1354
  timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
1346
1355
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
1347
1356
  # The extra values given here take precedence over values defined on the client or passed to this method.
@@ -1380,6 +1389,7 @@ class AsyncDeploymentsResource(AsyncAPIResource):
1380
1389
  task_id=response.tasks[0],
1381
1390
  extra_headers=extra_headers,
1382
1391
  polling_interval_seconds=polling_interval_seconds,
1392
+ polling_timeout_seconds=polling_timeout_seconds,
1383
1393
  )
1384
1394
  return await self.get(
1385
1395
  deployment_name=deployment_name,
@@ -1394,6 +1404,7 @@ class AsyncDeploymentsResource(AsyncAPIResource):
1394
1404
  *,
1395
1405
  project_id: int | None = None,
1396
1406
  polling_interval_seconds: int | Omit = omit,
1407
+ polling_timeout_seconds: int | Omit = omit,
1397
1408
  timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
1398
1409
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
1399
1410
  # The extra values given here take precedence over values defined on the client or passed to this method.
@@ -1418,6 +1429,7 @@ class AsyncDeploymentsResource(AsyncAPIResource):
1418
1429
  task_id=response.tasks[0],
1419
1430
  extra_headers=extra_headers,
1420
1431
  polling_interval_seconds=polling_interval_seconds,
1432
+ polling_timeout_seconds=polling_timeout_seconds,
1421
1433
  )
1422
1434
 
1423
1435
 
@@ -1451,6 +1463,15 @@ class DeploymentsResourceWithRawResponse:
1451
1463
  self.stop = to_raw_response_wrapper(
1452
1464
  deployments.stop,
1453
1465
  )
1466
+ self.create_and_poll = to_raw_response_wrapper(
1467
+ deployments.create_and_poll,
1468
+ )
1469
+ self.update_and_poll = to_raw_response_wrapper(
1470
+ deployments.update_and_poll,
1471
+ )
1472
+ self.delete_and_poll = to_raw_response_wrapper(
1473
+ deployments.delete_and_poll,
1474
+ )
1454
1475
 
1455
1476
  @cached_property
1456
1477
  def logs(self) -> LogsResourceWithRawResponse:
@@ -1487,6 +1508,15 @@ class AsyncDeploymentsResourceWithRawResponse:
1487
1508
  self.stop = async_to_raw_response_wrapper(
1488
1509
  deployments.stop,
1489
1510
  )
1511
+ self.create_and_poll = async_to_raw_response_wrapper(
1512
+ deployments.create_and_poll,
1513
+ )
1514
+ self.update_and_poll = async_to_raw_response_wrapper(
1515
+ deployments.update_and_poll,
1516
+ )
1517
+ self.delete_and_poll = async_to_raw_response_wrapper(
1518
+ deployments.delete_and_poll,
1519
+ )
1490
1520
 
1491
1521
  @cached_property
1492
1522
  def logs(self) -> AsyncLogsResourceWithRawResponse:
@@ -1523,6 +1553,15 @@ class DeploymentsResourceWithStreamingResponse:
1523
1553
  self.stop = to_streamed_response_wrapper(
1524
1554
  deployments.stop,
1525
1555
  )
1556
+ self.create_and_poll = to_streamed_response_wrapper(
1557
+ deployments.create_and_poll,
1558
+ )
1559
+ self.update_and_poll = to_streamed_response_wrapper(
1560
+ deployments.update_and_poll,
1561
+ )
1562
+ self.delete_and_poll = to_streamed_response_wrapper(
1563
+ deployments.delete_and_poll,
1564
+ )
1526
1565
 
1527
1566
  @cached_property
1528
1567
  def logs(self) -> LogsResourceWithStreamingResponse:
@@ -1559,6 +1598,15 @@ class AsyncDeploymentsResourceWithStreamingResponse:
1559
1598
  self.stop = async_to_streamed_response_wrapper(
1560
1599
  deployments.stop,
1561
1600
  )
1601
+ self.create_and_poll = async_to_streamed_response_wrapper(
1602
+ deployments.create_and_poll,
1603
+ )
1604
+ self.update_and_poll = async_to_streamed_response_wrapper(
1605
+ deployments.update_and_poll,
1606
+ )
1607
+ self.delete_and_poll = async_to_streamed_response_wrapper(
1608
+ deployments.delete_and_poll,
1609
+ )
1562
1610
 
1563
1611
  @cached_property
1564
1612
  def logs(self) -> AsyncLogsResourceWithStreamingResponse:
@@ -91,9 +91,10 @@ class ImagesResource(SyncAPIResource):
91
91
 
92
92
  tags: Key-value tags to associate with the resource. A tag is a key-value pair that
93
93
  can be associated with a resource, enabling efficient filtering and grouping for
94
- better organization and management. Some tags are read-only and cannot be
95
- modified by the user. Tags are also integrated with cost reports, allowing cost
96
- data to be filtered based on tag keys or values.
94
+ better organization and management. Both tag keys and values have a maximum
95
+ length of 255 characters. Some tags are read-only and cannot be modified by the
96
+ user. Tags are also integrated with cost reports, allowing cost data to be
97
+ filtered based on tag keys or values.
97
98
 
98
99
  extra_headers: Send extra headers
99
100
 
@@ -244,6 +245,7 @@ class ImagesResource(SyncAPIResource):
244
245
  project_id: int | None = None,
245
246
  region_id: int | None = None,
246
247
  polling_interval_seconds: int | Omit = omit,
248
+ polling_timeout_seconds: int | Omit = omit,
247
249
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
248
250
  # The extra values given here take precedence over values defined on the client or passed to this method.
249
251
  extra_headers: Headers | None = None,
@@ -269,6 +271,7 @@ class ImagesResource(SyncAPIResource):
269
271
  task_id=response.tasks[0],
270
272
  extra_headers=extra_headers,
271
273
  polling_interval_seconds=polling_interval_seconds,
274
+ polling_timeout_seconds=polling_timeout_seconds,
272
275
  )
273
276
 
274
277
  def create_from_volume(
@@ -319,9 +322,10 @@ class ImagesResource(SyncAPIResource):
319
322
 
320
323
  tags: Key-value tags to associate with the resource. A tag is a key-value pair that
321
324
  can be associated with a resource, enabling efficient filtering and grouping for
322
- better organization and management. Some tags are read-only and cannot be
323
- modified by the user. Tags are also integrated with cost reports, allowing cost
324
- data to be filtered based on tag keys or values.
325
+ better organization and management. Both tag keys and values have a maximum
326
+ length of 255 characters. Some tags are read-only and cannot be modified by the
327
+ user. Tags are also integrated with cost reports, allowing cost data to be
328
+ filtered based on tag keys or values.
325
329
 
326
330
  extra_headers: Send extra headers
327
331
 
@@ -374,6 +378,7 @@ class ImagesResource(SyncAPIResource):
374
378
  ssh_key: Literal["allow", "deny", "required"] | Omit = omit,
375
379
  tags: Dict[str, str] | Omit = omit,
376
380
  polling_interval_seconds: int | Omit = omit,
381
+ polling_timeout_seconds: int | Omit = omit,
377
382
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
378
383
  # The extra values given here take precedence over values defined on the client or passed to this method.
379
384
  extra_headers: Headers | None = None,
@@ -408,6 +413,7 @@ class ImagesResource(SyncAPIResource):
408
413
  task_id=response.tasks[0],
409
414
  extra_headers=extra_headers,
410
415
  polling_interval_seconds=polling_interval_seconds,
416
+ polling_timeout_seconds=polling_timeout_seconds,
411
417
  )
412
418
  if not task.created_resources or not task.created_resources.images or len(task.created_resources.images) != 1:
413
419
  raise ValueError(f"Expected exactly one resource to be created in a task")
@@ -519,9 +525,10 @@ class ImagesResource(SyncAPIResource):
519
525
 
520
526
  tags: Key-value tags to associate with the resource. A tag is a key-value pair that
521
527
  can be associated with a resource, enabling efficient filtering and grouping for
522
- better organization and management. Some tags are read-only and cannot be
523
- modified by the user. Tags are also integrated with cost reports, allowing cost
524
- data to be filtered based on tag keys or values.
528
+ better organization and management. Both tag keys and values have a maximum
529
+ length of 255 characters. Some tags are read-only and cannot be modified by the
530
+ user. Tags are also integrated with cost reports, allowing cost data to be
531
+ filtered based on tag keys or values.
525
532
 
526
533
  extra_headers: Send extra headers
527
534
 
@@ -578,6 +585,7 @@ class ImagesResource(SyncAPIResource):
578
585
  ssh_key: Literal["allow", "deny", "required"] | Omit = omit,
579
586
  tags: Dict[str, str] | Omit = omit,
580
587
  polling_interval_seconds: int | Omit = omit,
588
+ polling_timeout_seconds: int | Omit = omit,
581
589
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
582
590
  # The extra values given here take precedence over values defined on the client or passed to this method.
583
591
  extra_headers: Headers | None = None,
@@ -614,6 +622,7 @@ class ImagesResource(SyncAPIResource):
614
622
  task_id=response.tasks[0],
615
623
  extra_headers=extra_headers,
616
624
  polling_interval_seconds=polling_interval_seconds,
625
+ polling_timeout_seconds=polling_timeout_seconds,
617
626
  )
618
627
  if not task.created_resources or not task.created_resources.images or len(task.created_resources.images) != 1:
619
628
  raise ValueError(f"Expected exactly one resource to be created in a task")
@@ -683,9 +692,10 @@ class AsyncImagesResource(AsyncAPIResource):
683
692
 
684
693
  tags: Key-value tags to associate with the resource. A tag is a key-value pair that
685
694
  can be associated with a resource, enabling efficient filtering and grouping for
686
- better organization and management. Some tags are read-only and cannot be
687
- modified by the user. Tags are also integrated with cost reports, allowing cost
688
- data to be filtered based on tag keys or values.
695
+ better organization and management. Both tag keys and values have a maximum
696
+ length of 255 characters. Some tags are read-only and cannot be modified by the
697
+ user. Tags are also integrated with cost reports, allowing cost data to be
698
+ filtered based on tag keys or values.
689
699
 
690
700
  extra_headers: Send extra headers
691
701
 
@@ -836,6 +846,7 @@ class AsyncImagesResource(AsyncAPIResource):
836
846
  project_id: int | None = None,
837
847
  region_id: int | None = None,
838
848
  polling_interval_seconds: int | Omit = omit,
849
+ polling_timeout_seconds: int | Omit = omit,
839
850
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
840
851
  # The extra values given here take precedence over values defined on the client or passed to this method.
841
852
  extra_headers: Headers | None = None,
@@ -861,6 +872,7 @@ class AsyncImagesResource(AsyncAPIResource):
861
872
  task_id=response.tasks[0],
862
873
  extra_headers=extra_headers,
863
874
  polling_interval_seconds=polling_interval_seconds,
875
+ polling_timeout_seconds=polling_timeout_seconds,
864
876
  )
865
877
 
866
878
  async def create_from_volume(
@@ -911,9 +923,10 @@ class AsyncImagesResource(AsyncAPIResource):
911
923
 
912
924
  tags: Key-value tags to associate with the resource. A tag is a key-value pair that
913
925
  can be associated with a resource, enabling efficient filtering and grouping for
914
- better organization and management. Some tags are read-only and cannot be
915
- modified by the user. Tags are also integrated with cost reports, allowing cost
916
- data to be filtered based on tag keys or values.
926
+ better organization and management. Both tag keys and values have a maximum
927
+ length of 255 characters. Some tags are read-only and cannot be modified by the
928
+ user. Tags are also integrated with cost reports, allowing cost data to be
929
+ filtered based on tag keys or values.
917
930
 
918
931
  extra_headers: Send extra headers
919
932
 
@@ -966,6 +979,7 @@ class AsyncImagesResource(AsyncAPIResource):
966
979
  ssh_key: Literal["allow", "deny", "required"] | Omit = omit,
967
980
  tags: Dict[str, str] | Omit = omit,
968
981
  polling_interval_seconds: int | Omit = omit,
982
+ polling_timeout_seconds: int | Omit = omit,
969
983
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
970
984
  # The extra values given here take precedence over values defined on the client or passed to this method.
971
985
  extra_headers: Headers | None = None,
@@ -1000,6 +1014,7 @@ class AsyncImagesResource(AsyncAPIResource):
1000
1014
  task_id=response.tasks[0],
1001
1015
  extra_headers=extra_headers,
1002
1016
  polling_interval_seconds=polling_interval_seconds,
1017
+ polling_timeout_seconds=polling_timeout_seconds,
1003
1018
  )
1004
1019
  if not task.created_resources or not task.created_resources.images or len(task.created_resources.images) != 1:
1005
1020
  raise ValueError(f"Expected exactly one resource to be created in a task")
@@ -1111,9 +1126,10 @@ class AsyncImagesResource(AsyncAPIResource):
1111
1126
 
1112
1127
  tags: Key-value tags to associate with the resource. A tag is a key-value pair that
1113
1128
  can be associated with a resource, enabling efficient filtering and grouping for
1114
- better organization and management. Some tags are read-only and cannot be
1115
- modified by the user. Tags are also integrated with cost reports, allowing cost
1116
- data to be filtered based on tag keys or values.
1129
+ better organization and management. Both tag keys and values have a maximum
1130
+ length of 255 characters. Some tags are read-only and cannot be modified by the
1131
+ user. Tags are also integrated with cost reports, allowing cost data to be
1132
+ filtered based on tag keys or values.
1117
1133
 
1118
1134
  extra_headers: Send extra headers
1119
1135
 
@@ -1170,6 +1186,7 @@ class AsyncImagesResource(AsyncAPIResource):
1170
1186
  ssh_key: Literal["allow", "deny", "required"] | Omit = omit,
1171
1187
  tags: Dict[str, str] | Omit = omit,
1172
1188
  polling_interval_seconds: int | Omit = omit,
1189
+ polling_timeout_seconds: int | Omit = omit,
1173
1190
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
1174
1191
  # The extra values given here take precedence over values defined on the client or passed to this method.
1175
1192
  extra_headers: Headers | None = None,
@@ -1206,6 +1223,7 @@ class AsyncImagesResource(AsyncAPIResource):
1206
1223
  task_id=response.tasks[0],
1207
1224
  extra_headers=extra_headers,
1208
1225
  polling_interval_seconds=polling_interval_seconds,
1226
+ polling_timeout_seconds=polling_timeout_seconds,
1209
1227
  )
1210
1228
  if not task.created_resources or not task.created_resources.images or len(task.created_resources.images) != 1:
1211
1229
  raise ValueError(f"Expected exactly one resource to be created in a task")
@@ -1239,6 +1257,15 @@ class ImagesResourceWithRawResponse:
1239
1257
  self.upload = to_raw_response_wrapper(
1240
1258
  images.upload,
1241
1259
  )
1260
+ self.delete_and_poll = to_raw_response_wrapper(
1261
+ images.delete_and_poll,
1262
+ )
1263
+ self.create_from_volume_and_poll = to_raw_response_wrapper(
1264
+ images.create_from_volume_and_poll,
1265
+ )
1266
+ self.upload_and_poll = to_raw_response_wrapper(
1267
+ images.upload_and_poll,
1268
+ )
1242
1269
 
1243
1270
 
1244
1271
  class AsyncImagesResourceWithRawResponse:
@@ -1263,6 +1290,15 @@ class AsyncImagesResourceWithRawResponse:
1263
1290
  self.upload = async_to_raw_response_wrapper(
1264
1291
  images.upload,
1265
1292
  )
1293
+ self.delete_and_poll = async_to_raw_response_wrapper(
1294
+ images.delete_and_poll,
1295
+ )
1296
+ self.create_from_volume_and_poll = async_to_raw_response_wrapper(
1297
+ images.create_from_volume_and_poll,
1298
+ )
1299
+ self.upload_and_poll = async_to_raw_response_wrapper(
1300
+ images.upload_and_poll,
1301
+ )
1266
1302
 
1267
1303
 
1268
1304
  class ImagesResourceWithStreamingResponse:
@@ -1287,6 +1323,15 @@ class ImagesResourceWithStreamingResponse:
1287
1323
  self.upload = to_streamed_response_wrapper(
1288
1324
  images.upload,
1289
1325
  )
1326
+ self.delete_and_poll = to_streamed_response_wrapper(
1327
+ images.delete_and_poll,
1328
+ )
1329
+ self.create_from_volume_and_poll = to_streamed_response_wrapper(
1330
+ images.create_from_volume_and_poll,
1331
+ )
1332
+ self.upload_and_poll = to_streamed_response_wrapper(
1333
+ images.upload_and_poll,
1334
+ )
1290
1335
 
1291
1336
 
1292
1337
  class AsyncImagesResourceWithStreamingResponse:
@@ -1311,3 +1356,12 @@ class AsyncImagesResourceWithStreamingResponse:
1311
1356
  self.upload = async_to_streamed_response_wrapper(
1312
1357
  images.upload,
1313
1358
  )
1359
+ self.delete_and_poll = async_to_streamed_response_wrapper(
1360
+ images.delete_and_poll,
1361
+ )
1362
+ self.create_from_volume_and_poll = async_to_streamed_response_wrapper(
1363
+ images.create_from_volume_and_poll,
1364
+ )
1365
+ self.upload_and_poll = async_to_streamed_response_wrapper(
1366
+ images.upload_and_poll,
1367
+ )