gcore 0.1.0a2__py3-none-any.whl → 0.3.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 (293) hide show
  1. gcore/__init__.py +5 -0
  2. gcore/_base_client.py +22 -2
  3. gcore/_client.py +9 -0
  4. gcore/_models.py +2 -0
  5. gcore/_types.py +2 -0
  6. gcore/_utils/_proxy.py +4 -1
  7. gcore/_utils/_resources_proxy.py +24 -0
  8. gcore/_version.py +1 -1
  9. gcore/resources/__init__.py +14 -0
  10. gcore/resources/cloud/baremetal/flavors.py +2 -2
  11. gcore/resources/cloud/baremetal/images.py +2 -2
  12. gcore/resources/cloud/baremetal/servers.py +280 -52
  13. gcore/resources/cloud/billing_reservations.py +24 -0
  14. gcore/resources/cloud/file_shares/file_shares.py +16 -0
  15. gcore/resources/cloud/floating_ips.py +4 -4
  16. gcore/resources/cloud/gpu_baremetal_clusters/gpu_baremetal_clusters.py +358 -8
  17. gcore/resources/cloud/gpu_baremetal_clusters/images.py +206 -2
  18. gcore/resources/cloud/gpu_baremetal_clusters/servers.py +84 -4
  19. gcore/resources/cloud/inference/deployments/deployments.py +328 -10
  20. gcore/resources/cloud/instances/flavors.py +2 -2
  21. gcore/resources/cloud/instances/images.py +318 -2
  22. gcore/resources/cloud/instances/instances.py +534 -70
  23. gcore/resources/cloud/instances/interfaces.py +4 -4
  24. gcore/resources/cloud/load_balancers/flavors.py +2 -2
  25. gcore/resources/cloud/load_balancers/l7_policies/l7_policies.py +302 -20
  26. gcore/resources/cloud/load_balancers/l7_policies/rules.py +326 -0
  27. gcore/resources/cloud/load_balancers/listeners.py +385 -20
  28. gcore/resources/cloud/load_balancers/load_balancers.py +392 -24
  29. gcore/resources/cloud/load_balancers/pools/health_monitors.py +24 -0
  30. gcore/resources/cloud/load_balancers/pools/members.py +34 -6
  31. gcore/resources/cloud/load_balancers/pools/pools.py +388 -8
  32. gcore/resources/cloud/networks/networks.py +72 -16
  33. gcore/resources/cloud/networks/subnets.py +6 -6
  34. gcore/resources/cloud/registries/registries.py +6 -10
  35. gcore/resources/cloud/registries/users.py +4 -10
  36. gcore/resources/cloud/reserved_fixed_ips/reserved_fixed_ips.py +10 -10
  37. gcore/resources/cloud/secrets.py +56 -11
  38. gcore/resources/cloud/security_groups/security_groups.py +2 -2
  39. gcore/resources/cloud/ssh_keys.py +2 -2
  40. gcore/resources/cloud/tasks.py +203 -184
  41. gcore/resources/cloud/users/role_assignments.py +4 -4
  42. gcore/resources/cloud/volumes.py +18 -18
  43. gcore/resources/waap/__init__.py +131 -0
  44. gcore/resources/waap/advanced_rules.py +135 -0
  45. gcore/resources/waap/clients.py +135 -0
  46. gcore/resources/waap/custom_page_sets.py +805 -0
  47. gcore/resources/waap/domains/__init__.py +173 -0
  48. gcore/resources/waap/domains/advanced_rules.py +876 -0
  49. gcore/resources/waap/domains/analytics/__init__.py +33 -0
  50. gcore/resources/waap/domains/analytics/analytics.py +676 -0
  51. gcore/resources/waap/domains/analytics/requests.py +378 -0
  52. gcore/resources/waap/domains/api_discovery/__init__.py +33 -0
  53. gcore/resources/waap/domains/api_discovery/api_discovery.py +530 -0
  54. gcore/resources/waap/domains/api_discovery/scan_results.py +352 -0
  55. gcore/resources/waap/domains/api_path_groups.py +163 -0
  56. gcore/resources/waap/domains/api_paths.py +771 -0
  57. gcore/resources/waap/domains/custom_rules.py +889 -0
  58. gcore/resources/waap/domains/domains.py +914 -0
  59. gcore/resources/waap/domains/firewall_rules.py +884 -0
  60. gcore/resources/waap/domains/insight_silences.py +689 -0
  61. gcore/resources/waap/domains/insights.py +425 -0
  62. gcore/resources/waap/domains/policies.py +173 -0
  63. gcore/resources/waap/domains/settings.py +271 -0
  64. gcore/resources/waap/ip_info.py +1017 -0
  65. gcore/resources/waap/organizations.py +217 -0
  66. gcore/resources/waap/statistics.py +225 -0
  67. gcore/resources/waap/tags.py +233 -0
  68. gcore/resources/waap/waap.py +391 -0
  69. gcore/types/cloud/__init__.py +1 -0
  70. gcore/types/cloud/allowed_address_pairs.py +2 -2
  71. gcore/types/cloud/baremetal/baremetal_server.py +1 -1
  72. gcore/types/cloud/baremetal/image_list_params.py +1 -1
  73. gcore/types/cloud/baremetal/server_create_params.py +9 -9
  74. gcore/types/cloud/baremetal/server_list_params.py +8 -8
  75. gcore/types/cloud/baremetal/server_rebuild_params.py +1 -1
  76. gcore/types/cloud/baremetal_flavor.py +3 -3
  77. gcore/types/cloud/billing_reservation_list_params.py +5 -0
  78. gcore/types/cloud/container_probe_config.py +1 -1
  79. gcore/types/cloud/container_probe_config_create_param.py +2 -3
  80. gcore/types/cloud/container_scale_triggers.py +2 -2
  81. gcore/types/cloud/file_share.py +3 -0
  82. gcore/types/cloud/file_share_list_params.py +7 -1
  83. gcore/types/cloud/floating_ip_detailed.py +1 -1
  84. gcore/types/cloud/floating_ip_list_params.py +2 -2
  85. gcore/types/cloud/gpu_baremetal_cluster.py +1 -1
  86. gcore/types/cloud/gpu_baremetal_cluster_create_params.py +21 -1
  87. gcore/types/cloud/gpu_baremetal_cluster_delete_params.py +1 -1
  88. gcore/types/cloud/gpu_baremetal_cluster_rebuild_params.py +1 -1
  89. gcore/types/cloud/gpu_baremetal_cluster_server.py +1 -1
  90. gcore/types/cloud/gpu_baremetal_clusters/image_upload_params.py +1 -1
  91. gcore/types/cloud/gpu_baremetal_clusters/server_attach_interface_params.py +10 -10
  92. gcore/types/cloud/gpu_baremetal_flavor.py +3 -3
  93. gcore/types/cloud/image.py +1 -1
  94. gcore/types/cloud/inference/deployment_create_params.py +4 -4
  95. gcore/types/cloud/inference/deployment_update_params.py +206 -9
  96. gcore/types/cloud/inference/inference.py +5 -5
  97. gcore/types/cloud/instance.py +1 -1
  98. gcore/types/cloud/instance_create_params.py +8 -10
  99. gcore/types/cloud/instance_list_params.py +8 -8
  100. gcore/types/cloud/instances/flavor_list_suitable_params.py +4 -1
  101. gcore/types/cloud/instances/image_list_params.py +1 -1
  102. gcore/types/cloud/instances/instance_flavor.py +3 -3
  103. gcore/types/cloud/instances/interface_attach_params.py +10 -10
  104. gcore/types/cloud/load_balancer_create_params.py +17 -15
  105. gcore/types/cloud/load_balancer_flavor_detail.py +3 -3
  106. gcore/types/cloud/load_balancer_l7_policy.py +5 -5
  107. gcore/types/cloud/load_balancer_list_params.py +5 -5
  108. gcore/types/cloud/load_balancer_listener_detail.py +17 -17
  109. gcore/types/cloud/load_balancer_pool.py +13 -13
  110. gcore/types/cloud/load_balancer_pool_list.py +99 -4
  111. gcore/types/cloud/load_balancers/l7_policy_create_params.py +5 -5
  112. gcore/types/cloud/load_balancers/l7_policy_replace_params.py +5 -5
  113. gcore/types/cloud/load_balancers/listener_create_params.py +6 -4
  114. gcore/types/cloud/load_balancers/listener_get_params.py +3 -1
  115. gcore/types/cloud/load_balancers/listener_list_params.py +4 -2
  116. gcore/types/cloud/load_balancers/listener_update_params.py +5 -3
  117. gcore/types/cloud/load_balancers/pool_create_params.py +6 -4
  118. gcore/types/cloud/load_balancers/pool_list_params.py +5 -6
  119. gcore/types/cloud/load_balancers/pool_update_params.py +6 -4
  120. gcore/types/cloud/load_balancers/pools/health_monitor_create_params.py +2 -0
  121. gcore/types/cloud/load_balancers/pools/member_add_params.py +5 -3
  122. gcore/types/cloud/member.py +2 -2
  123. gcore/types/cloud/network.py +22 -22
  124. gcore/types/cloud/network_create_params.py +2 -0
  125. gcore/types/cloud/network_details.py +25 -24
  126. gcore/types/cloud/network_list_params.py +15 -10
  127. gcore/types/cloud/network_update_params.py +2 -0
  128. gcore/types/cloud/networks/subnet_create_params.py +1 -1
  129. gcore/types/cloud/networks/subnet_list_params.py +2 -2
  130. gcore/types/cloud/quota_get_all_response.py +18 -0
  131. gcore/types/cloud/quota_get_by_region_response.py +18 -0
  132. gcore/types/cloud/quotas/request_create_params.py +9 -0
  133. gcore/types/cloud/quotas/request_get_response.py +9 -0
  134. gcore/types/cloud/quotas/request_list_response.py +9 -0
  135. gcore/types/cloud/region.py +4 -4
  136. gcore/types/cloud/registries/user_create_multiple_params.py +3 -5
  137. gcore/types/cloud/registries/user_create_params.py +3 -5
  138. gcore/types/cloud/registry_create_params.py +3 -5
  139. gcore/types/cloud/reserved_fixed_ip_create_params.py +2 -2
  140. gcore/types/cloud/reserved_fixed_ip_list_params.py +3 -3
  141. gcore/types/cloud/secret_list_params.py +24 -0
  142. gcore/types/cloud/security_group_list_params.py +1 -1
  143. gcore/types/cloud/session_persistence.py +1 -1
  144. gcore/types/cloud/ssh_key_created.py +3 -6
  145. gcore/types/cloud/task.py +1 -4
  146. gcore/types/cloud/task_list_params.py +56 -46
  147. gcore/types/cloud/users/role_assignment_create_params.py +1 -1
  148. gcore/types/cloud/users/role_assignment_update_params.py +1 -1
  149. gcore/types/cloud/volume_create_params.py +6 -6
  150. gcore/types/cloud/volume_list_params.py +3 -3
  151. gcore/types/waap/__init__.py +108 -0
  152. gcore/types/waap/client_me_response.py +34 -0
  153. gcore/types/waap/custom_page_set_create_params.py +35 -0
  154. gcore/types/waap/custom_page_set_list_params.py +25 -0
  155. gcore/types/waap/custom_page_set_preview_params.py +34 -0
  156. gcore/types/waap/custom_page_set_update_params.py +35 -0
  157. gcore/types/waap/domain_list_params.py +30 -0
  158. gcore/types/waap/domain_list_rule_sets_response.py +10 -0
  159. gcore/types/waap/domain_update_params.py +12 -0
  160. gcore/types/waap/domains/__init__.py +47 -0
  161. gcore/types/waap/domains/advanced_rule_create_params.py +80 -0
  162. gcore/types/waap/domains/advanced_rule_list_params.py +58 -0
  163. gcore/types/waap/domains/advanced_rule_update_params.py +83 -0
  164. gcore/types/waap/domains/analytics/__init__.py +5 -0
  165. gcore/types/waap/domains/analytics/request_list_params.py +53 -0
  166. gcore/types/waap/domains/analytics_get_event_statistics_params.py +34 -0
  167. gcore/types/waap/domains/analytics_list_ddos_attacks_params.py +28 -0
  168. gcore/types/waap/domains/analytics_list_ddos_info_params.py +31 -0
  169. gcore/types/waap/domains/analytics_list_event_traffic_params.py +26 -0
  170. gcore/types/waap/domains/analytics_list_event_traffic_response.py +10 -0
  171. gcore/types/waap/domains/api_discovery/__init__.py +7 -0
  172. gcore/types/waap/domains/api_discovery/scan_result_get_response.py +29 -0
  173. gcore/types/waap/domains/api_discovery/scan_result_list_params.py +41 -0
  174. gcore/types/waap/domains/api_discovery/scan_result_list_response.py +29 -0
  175. gcore/types/waap/domains/api_discovery_get_settings_response.py +36 -0
  176. gcore/types/waap/domains/api_discovery_scan_openapi_response.py +10 -0
  177. gcore/types/waap/domains/api_discovery_update_settings_params.py +34 -0
  178. gcore/types/waap/domains/api_discovery_update_settings_response.py +36 -0
  179. gcore/types/waap/domains/api_discovery_upload_openapi_params.py +19 -0
  180. gcore/types/waap/domains/api_discovery_upload_openapi_response.py +10 -0
  181. gcore/types/waap/domains/api_path_create_params.py +31 -0
  182. gcore/types/waap/domains/api_path_create_response.py +50 -0
  183. gcore/types/waap/domains/api_path_get_response.py +50 -0
  184. gcore/types/waap/domains/api_path_group_list_response.py +12 -0
  185. gcore/types/waap/domains/api_path_list_params.py +62 -0
  186. gcore/types/waap/domains/api_path_list_response.py +50 -0
  187. gcore/types/waap/domains/api_path_update_params.py +29 -0
  188. gcore/types/waap/domains/custom_rule_create_params.py +368 -0
  189. gcore/types/waap/domains/custom_rule_delete_multiple_params.py +13 -0
  190. gcore/types/waap/domains/custom_rule_list_params.py +35 -0
  191. gcore/types/waap/domains/custom_rule_update_params.py +371 -0
  192. gcore/types/waap/domains/firewall_rule_create_params.py +75 -0
  193. gcore/types/waap/domains/firewall_rule_delete_multiple_params.py +13 -0
  194. gcore/types/waap/domains/firewall_rule_list_params.py +33 -0
  195. gcore/types/waap/domains/firewall_rule_update_params.py +78 -0
  196. gcore/types/waap/domains/insight_list_params.py +34 -0
  197. gcore/types/waap/domains/insight_replace_params.py +17 -0
  198. gcore/types/waap/domains/insight_silence_create_params.py +28 -0
  199. gcore/types/waap/domains/insight_silence_list_params.py +33 -0
  200. gcore/types/waap/domains/insight_silence_update_params.py +28 -0
  201. gcore/types/waap/domains/setting_update_params.py +48 -0
  202. gcore/types/waap/ip_info_get_attack_time_series_params.py +12 -0
  203. gcore/types/waap/ip_info_get_attack_time_series_response.py +10 -0
  204. gcore/types/waap/ip_info_get_blocked_requests_params.py +15 -0
  205. gcore/types/waap/ip_info_get_blocked_requests_response.py +10 -0
  206. gcore/types/waap/ip_info_get_counts_params.py +19 -0
  207. gcore/types/waap/ip_info_get_ddos_attack_series_params.py +12 -0
  208. gcore/types/waap/ip_info_get_params.py +12 -0
  209. gcore/types/waap/ip_info_get_top_sessions_params.py +15 -0
  210. gcore/types/waap/ip_info_get_top_sessions_response.py +10 -0
  211. gcore/types/waap/ip_info_get_top_urls_params.py +15 -0
  212. gcore/types/waap/ip_info_get_top_urls_response.py +10 -0
  213. gcore/types/waap/ip_info_get_top_user_agents_params.py +15 -0
  214. gcore/types/waap/ip_info_get_top_user_agents_response.py +10 -0
  215. gcore/types/waap/ip_info_list_attacked_countries_params.py +12 -0
  216. gcore/types/waap/ip_info_list_attacked_countries_response.py +10 -0
  217. gcore/types/waap/organization_list_params.py +22 -0
  218. gcore/types/waap/statistic_get_usage_series_params.py +25 -0
  219. gcore/types/waap/tag_list_params.py +28 -0
  220. gcore/types/waap/waap_advanced_rule.py +83 -0
  221. gcore/types/waap/waap_advanced_rule_descriptor.py +49 -0
  222. gcore/types/waap/waap_advanced_rule_descriptor_list.py +15 -0
  223. gcore/types/waap/waap_block_csrf_page_data.py +28 -0
  224. gcore/types/waap/waap_block_csrf_page_data_param.py +28 -0
  225. gcore/types/waap/waap_block_page_data.py +28 -0
  226. gcore/types/waap/waap_block_page_data_param.py +28 -0
  227. gcore/types/waap/waap_blocked_statistics.py +36 -0
  228. gcore/types/waap/waap_captcha_page_data.py +31 -0
  229. gcore/types/waap/waap_captcha_page_data_param.py +31 -0
  230. gcore/types/waap/waap_common_tag.py +16 -0
  231. gcore/types/waap/waap_cookie_disabled_page_data.py +18 -0
  232. gcore/types/waap/waap_cookie_disabled_page_data_param.py +18 -0
  233. gcore/types/waap/waap_count_statistics.py +36 -0
  234. gcore/types/waap/waap_custom_page_preview.py +10 -0
  235. gcore/types/waap/waap_custom_page_set.py +36 -0
  236. gcore/types/waap/waap_custom_rule.py +373 -0
  237. gcore/types/waap/waap_customer_rule_state.py +7 -0
  238. gcore/types/waap/waap_ddos_attack.py +16 -0
  239. gcore/types/waap/waap_ddos_info.py +17 -0
  240. gcore/types/waap/waap_detailed_domain.py +37 -0
  241. gcore/types/waap/waap_domain_api_settings.py +22 -0
  242. gcore/types/waap/waap_domain_ddos_settings.py +31 -0
  243. gcore/types/waap/waap_domain_policy.py +29 -0
  244. gcore/types/waap/waap_domain_settings_model.py +15 -0
  245. gcore/types/waap/waap_domain_status.py +7 -0
  246. gcore/types/waap/waap_event_statistics.py +15 -0
  247. gcore/types/waap/waap_firewall_rule.py +78 -0
  248. gcore/types/waap/waap_get_account_overview_response.py +34 -0
  249. gcore/types/waap/waap_handshake_page_data.py +25 -0
  250. gcore/types/waap/waap_handshake_page_data_param.py +25 -0
  251. gcore/types/waap/waap_insight.py +38 -0
  252. gcore/types/waap/waap_insight_silence.py +28 -0
  253. gcore/types/waap/waap_insight_silence_sort_by.py +9 -0
  254. gcore/types/waap/waap_insight_sort_by.py +20 -0
  255. gcore/types/waap/waap_insight_status.py +7 -0
  256. gcore/types/waap/waap_ip_country_attack.py +16 -0
  257. gcore/types/waap/waap_ip_ddos_info_model.py +23 -0
  258. gcore/types/waap/waap_ip_info.py +57 -0
  259. gcore/types/waap/waap_ip_info_counts.py +16 -0
  260. gcore/types/waap/waap_javascript_disabled_page_data.py +18 -0
  261. gcore/types/waap/waap_javascript_disabled_page_data_param.py +18 -0
  262. gcore/types/waap/waap_network_details.py +17 -0
  263. gcore/types/waap/waap_organization.py +13 -0
  264. gcore/types/waap/waap_page_type.py +9 -0
  265. gcore/types/waap/waap_paginated_custom_page_set.py +22 -0
  266. gcore/types/waap/waap_paginated_ddos_attack.py +22 -0
  267. gcore/types/waap/waap_paginated_ddos_info.py +22 -0
  268. gcore/types/waap/waap_paginated_request_summary.py +22 -0
  269. gcore/types/waap/waap_pattern_matched_tag.py +37 -0
  270. gcore/types/waap/waap_policy_action.py +7 -0
  271. gcore/types/waap/waap_policy_mode.py +10 -0
  272. gcore/types/waap/waap_request_details.py +92 -0
  273. gcore/types/waap/waap_request_organization.py +13 -0
  274. gcore/types/waap/waap_request_summary.py +59 -0
  275. gcore/types/waap/waap_resolution.py +7 -0
  276. gcore/types/waap/waap_rule_action_type.py +7 -0
  277. gcore/types/waap/waap_rule_blocked_requests.py +16 -0
  278. gcore/types/waap/waap_rule_set.py +41 -0
  279. gcore/types/waap/waap_statistic_item.py +18 -0
  280. gcore/types/waap/waap_statistics_series.py +16 -0
  281. gcore/types/waap/waap_summary_domain.py +26 -0
  282. gcore/types/waap/waap_tag.py +16 -0
  283. gcore/types/waap/waap_time_series_attack.py +23 -0
  284. gcore/types/waap/waap_top_session.py +24 -0
  285. gcore/types/waap/waap_top_url.py +13 -0
  286. gcore/types/waap/waap_top_user_agent.py +13 -0
  287. gcore/types/waap/waap_traffic_metrics.py +68 -0
  288. gcore/types/waap/waap_traffic_type.py +28 -0
  289. gcore/types/waap/waap_user_agent_details.py +40 -0
  290. {gcore-0.1.0a2.dist-info → gcore-0.3.0.dist-info}/METADATA +3 -3
  291. {gcore-0.1.0a2.dist-info → gcore-0.3.0.dist-info}/RECORD +293 -126
  292. {gcore-0.1.0a2.dist-info → gcore-0.3.0.dist-info}/WHEEL +0 -0
  293. {gcore-0.1.0a2.dist-info → gcore-0.3.0.dist-info}/licenses/LICENSE +0 -0
@@ -159,7 +159,7 @@ class ImagesResource(SyncAPIResource):
159
159
  tag_key: Filter by tag keys.
160
160
 
161
161
  tag_key_value: Filter by tag key-value pairs. Must be a valid JSON string. 'curl -G
162
- --data-urlencode 'tag_key_value={"key": "value"}' --url
162
+ --data-urlencode '`tag_key_value`={"key": "value"}' --url
163
163
  'http://localhost:1111/v1/images/1/1'"
164
164
 
165
165
  visibility: Image visibility. Globally visible images are public
@@ -236,6 +236,40 @@ class ImagesResource(SyncAPIResource):
236
236
  cast_to=TaskIDList,
237
237
  )
238
238
 
239
+ def delete_and_poll(
240
+ self,
241
+ image_id: str,
242
+ *,
243
+ project_id: int | None = None,
244
+ region_id: int | None = None,
245
+ polling_interval_seconds: int | NotGiven = NOT_GIVEN,
246
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
247
+ # The extra values given here take precedence over values defined on the client or passed to this method.
248
+ extra_headers: Headers | None = None,
249
+ extra_query: Query | None = None,
250
+ extra_body: Body | None = None,
251
+ timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
252
+ ) -> None:
253
+ """
254
+ Delete image and poll for the result. Only the first task will be polled. If you need to poll more tasks, use the `tasks.poll` method.
255
+ """
256
+ response = self.delete(
257
+ image_id=image_id,
258
+ project_id=project_id,
259
+ region_id=region_id,
260
+ extra_headers=extra_headers,
261
+ extra_query=extra_query,
262
+ extra_body=extra_body,
263
+ timeout=timeout,
264
+ )
265
+ if not response.tasks:
266
+ raise ValueError("Expected at least one task to be created")
267
+ self._client.cloud.tasks.poll(
268
+ task_id=response.tasks[0],
269
+ extra_headers=extra_headers,
270
+ polling_interval_seconds=polling_interval_seconds,
271
+ )
272
+
239
273
  def create_from_volume(
240
274
  self,
241
275
  *,
@@ -321,6 +355,66 @@ class ImagesResource(SyncAPIResource):
321
355
  cast_to=TaskIDList,
322
356
  )
323
357
 
358
+ def create_from_volume_and_poll(
359
+ self,
360
+ *,
361
+ project_id: int | None = None,
362
+ region_id: int | None = None,
363
+ name: str,
364
+ volume_id: str,
365
+ architecture: Literal["aarch64", "x86_64"] | NotGiven = NOT_GIVEN,
366
+ hw_firmware_type: Optional[Literal["bios", "uefi"]] | NotGiven = NOT_GIVEN,
367
+ hw_machine_type: Optional[Literal["pc", "q35"]] | NotGiven = NOT_GIVEN,
368
+ is_baremetal: bool | NotGiven = NOT_GIVEN,
369
+ os_type: Literal["linux", "windows"] | NotGiven = NOT_GIVEN,
370
+ source: Literal["volume"] | NotGiven = NOT_GIVEN,
371
+ ssh_key: Literal["allow", "deny", "required"] | NotGiven = NOT_GIVEN,
372
+ tags: TagUpdateMapParam | NotGiven = NOT_GIVEN,
373
+ polling_interval_seconds: int | NotGiven = NOT_GIVEN,
374
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
375
+ # The extra values given here take precedence over values defined on the client or passed to this method.
376
+ extra_headers: Headers | None = None,
377
+ extra_query: Query | None = None,
378
+ extra_body: Body | None = None,
379
+ timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
380
+ ) -> Image:
381
+ """
382
+ Create image from volume and poll for completion
383
+ """
384
+ response = self.create_from_volume(
385
+ project_id=project_id,
386
+ region_id=region_id,
387
+ name=name,
388
+ volume_id=volume_id,
389
+ architecture=architecture,
390
+ hw_firmware_type=hw_firmware_type,
391
+ hw_machine_type=hw_machine_type,
392
+ is_baremetal=is_baremetal,
393
+ os_type=os_type,
394
+ source=source,
395
+ ssh_key=ssh_key,
396
+ tags=tags,
397
+ extra_headers=extra_headers,
398
+ extra_query=extra_query,
399
+ extra_body=extra_body,
400
+ timeout=timeout,
401
+ )
402
+ if not response.tasks or len(response.tasks) != 1:
403
+ raise ValueError(f"Expected exactly one task to be created")
404
+ task = self._client.cloud.tasks.poll(
405
+ task_id=response.tasks[0],
406
+ extra_headers=extra_headers,
407
+ polling_interval_seconds=polling_interval_seconds,
408
+ )
409
+ if not task.created_resources or not task.created_resources.images or len(task.created_resources.images) != 1:
410
+ raise ValueError(f"Expected exactly one resource to be created in a task")
411
+ return self.get(
412
+ image_id=task.created_resources.images[0],
413
+ project_id=project_id,
414
+ region_id=region_id,
415
+ extra_headers=extra_headers,
416
+ )
417
+
324
418
  def get(
325
419
  self,
326
420
  image_id: str,
@@ -461,6 +555,70 @@ class ImagesResource(SyncAPIResource):
461
555
  cast_to=TaskIDList,
462
556
  )
463
557
 
558
+ def upload_and_poll(
559
+ self,
560
+ *,
561
+ project_id: int | None = None,
562
+ region_id: int | None = None,
563
+ name: str,
564
+ url: str,
565
+ architecture: Literal["aarch64", "x86_64"] | NotGiven = NOT_GIVEN,
566
+ cow_format: bool | NotGiven = NOT_GIVEN,
567
+ hw_firmware_type: Optional[Literal["bios", "uefi"]] | NotGiven = NOT_GIVEN,
568
+ hw_machine_type: Optional[Literal["pc", "q35"]] | NotGiven = NOT_GIVEN,
569
+ is_baremetal: bool | NotGiven = NOT_GIVEN,
570
+ os_distro: Optional[str] | NotGiven = NOT_GIVEN,
571
+ os_type: Literal["linux", "windows"] | NotGiven = NOT_GIVEN,
572
+ os_version: Optional[str] | NotGiven = NOT_GIVEN,
573
+ ssh_key: Literal["allow", "deny", "required"] | NotGiven = NOT_GIVEN,
574
+ tags: TagUpdateMapParam | NotGiven = NOT_GIVEN,
575
+ polling_interval_seconds: int | NotGiven = NOT_GIVEN,
576
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
577
+ # The extra values given here take precedence over values defined on the client or passed to this method.
578
+ extra_headers: Headers | None = None,
579
+ extra_query: Query | None = None,
580
+ extra_body: Body | None = None,
581
+ timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
582
+ ) -> Image:
583
+ """
584
+ Upload image and poll for completion
585
+ """
586
+ response = self.upload(
587
+ project_id=project_id,
588
+ region_id=region_id,
589
+ name=name,
590
+ url=url,
591
+ architecture=architecture,
592
+ cow_format=cow_format,
593
+ hw_firmware_type=hw_firmware_type,
594
+ hw_machine_type=hw_machine_type,
595
+ is_baremetal=is_baremetal,
596
+ os_distro=os_distro,
597
+ os_type=os_type,
598
+ os_version=os_version,
599
+ ssh_key=ssh_key,
600
+ tags=tags,
601
+ extra_headers=extra_headers,
602
+ extra_query=extra_query,
603
+ extra_body=extra_body,
604
+ timeout=timeout,
605
+ )
606
+ if not response.tasks or len(response.tasks) != 1:
607
+ raise ValueError(f"Expected exactly one task to be created")
608
+ task = self._client.cloud.tasks.poll(
609
+ task_id=response.tasks[0],
610
+ extra_headers=extra_headers,
611
+ polling_interval_seconds=polling_interval_seconds,
612
+ )
613
+ if not task.created_resources or not task.created_resources.images or len(task.created_resources.images) != 1:
614
+ raise ValueError(f"Expected exactly one resource to be created in a task")
615
+ return self.get(
616
+ image_id=task.created_resources.images[0],
617
+ project_id=project_id,
618
+ region_id=region_id,
619
+ extra_headers=extra_headers,
620
+ )
621
+
464
622
 
465
623
  class AsyncImagesResource(AsyncAPIResource):
466
624
  @cached_property
@@ -588,7 +746,7 @@ class AsyncImagesResource(AsyncAPIResource):
588
746
  tag_key: Filter by tag keys.
589
747
 
590
748
  tag_key_value: Filter by tag key-value pairs. Must be a valid JSON string. 'curl -G
591
- --data-urlencode 'tag_key_value={"key": "value"}' --url
749
+ --data-urlencode '`tag_key_value`={"key": "value"}' --url
592
750
  'http://localhost:1111/v1/images/1/1'"
593
751
 
594
752
  visibility: Image visibility. Globally visible images are public
@@ -665,6 +823,40 @@ class AsyncImagesResource(AsyncAPIResource):
665
823
  cast_to=TaskIDList,
666
824
  )
667
825
 
826
+ async def delete_and_poll(
827
+ self,
828
+ image_id: str,
829
+ *,
830
+ project_id: int | None = None,
831
+ region_id: int | None = None,
832
+ polling_interval_seconds: int | NotGiven = NOT_GIVEN,
833
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
834
+ # The extra values given here take precedence over values defined on the client or passed to this method.
835
+ extra_headers: Headers | None = None,
836
+ extra_query: Query | None = None,
837
+ extra_body: Body | None = None,
838
+ timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
839
+ ) -> None:
840
+ """
841
+ Delete image and poll for the result. Only the first task will be polled. If you need to poll more tasks, use the `tasks.poll` method.
842
+ """
843
+ response = await self.delete(
844
+ image_id=image_id,
845
+ project_id=project_id,
846
+ region_id=region_id,
847
+ extra_headers=extra_headers,
848
+ extra_query=extra_query,
849
+ extra_body=extra_body,
850
+ timeout=timeout,
851
+ )
852
+ if not response.tasks:
853
+ raise ValueError("Expected at least one task to be created")
854
+ await self._client.cloud.tasks.poll(
855
+ task_id=response.tasks[0],
856
+ extra_headers=extra_headers,
857
+ polling_interval_seconds=polling_interval_seconds,
858
+ )
859
+
668
860
  async def create_from_volume(
669
861
  self,
670
862
  *,
@@ -750,6 +942,66 @@ class AsyncImagesResource(AsyncAPIResource):
750
942
  cast_to=TaskIDList,
751
943
  )
752
944
 
945
+ async def create_from_volume_and_poll(
946
+ self,
947
+ *,
948
+ project_id: int | None = None,
949
+ region_id: int | None = None,
950
+ name: str,
951
+ volume_id: str,
952
+ architecture: Literal["aarch64", "x86_64"] | NotGiven = NOT_GIVEN,
953
+ hw_firmware_type: Optional[Literal["bios", "uefi"]] | NotGiven = NOT_GIVEN,
954
+ hw_machine_type: Optional[Literal["pc", "q35"]] | NotGiven = NOT_GIVEN,
955
+ is_baremetal: bool | NotGiven = NOT_GIVEN,
956
+ os_type: Literal["linux", "windows"] | NotGiven = NOT_GIVEN,
957
+ source: Literal["volume"] | NotGiven = NOT_GIVEN,
958
+ ssh_key: Literal["allow", "deny", "required"] | NotGiven = NOT_GIVEN,
959
+ tags: TagUpdateMapParam | NotGiven = NOT_GIVEN,
960
+ polling_interval_seconds: int | NotGiven = NOT_GIVEN,
961
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
962
+ # The extra values given here take precedence over values defined on the client or passed to this method.
963
+ extra_headers: Headers | None = None,
964
+ extra_query: Query | None = None,
965
+ extra_body: Body | None = None,
966
+ timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
967
+ ) -> Image:
968
+ """
969
+ Create image from volume and poll for completion
970
+ """
971
+ response = await self.create_from_volume(
972
+ project_id=project_id,
973
+ region_id=region_id,
974
+ name=name,
975
+ volume_id=volume_id,
976
+ architecture=architecture,
977
+ hw_firmware_type=hw_firmware_type,
978
+ hw_machine_type=hw_machine_type,
979
+ is_baremetal=is_baremetal,
980
+ os_type=os_type,
981
+ source=source,
982
+ ssh_key=ssh_key,
983
+ tags=tags,
984
+ extra_headers=extra_headers,
985
+ extra_query=extra_query,
986
+ extra_body=extra_body,
987
+ timeout=timeout,
988
+ )
989
+ if not response.tasks or len(response.tasks) != 1:
990
+ raise ValueError(f"Expected exactly one task to be created")
991
+ task = await self._client.cloud.tasks.poll(
992
+ task_id=response.tasks[0],
993
+ extra_headers=extra_headers,
994
+ polling_interval_seconds=polling_interval_seconds,
995
+ )
996
+ if not task.created_resources or not task.created_resources.images or len(task.created_resources.images) != 1:
997
+ raise ValueError(f"Expected exactly one resource to be created in a task")
998
+ return await self.get(
999
+ image_id=task.created_resources.images[0],
1000
+ project_id=project_id,
1001
+ region_id=region_id,
1002
+ extra_headers=extra_headers,
1003
+ )
1004
+
753
1005
  async def get(
754
1006
  self,
755
1007
  image_id: str,
@@ -890,6 +1142,70 @@ class AsyncImagesResource(AsyncAPIResource):
890
1142
  cast_to=TaskIDList,
891
1143
  )
892
1144
 
1145
+ async def upload_and_poll(
1146
+ self,
1147
+ *,
1148
+ project_id: int | None = None,
1149
+ region_id: int | None = None,
1150
+ name: str,
1151
+ url: str,
1152
+ architecture: Literal["aarch64", "x86_64"] | NotGiven = NOT_GIVEN,
1153
+ cow_format: bool | NotGiven = NOT_GIVEN,
1154
+ hw_firmware_type: Optional[Literal["bios", "uefi"]] | NotGiven = NOT_GIVEN,
1155
+ hw_machine_type: Optional[Literal["pc", "q35"]] | NotGiven = NOT_GIVEN,
1156
+ is_baremetal: bool | NotGiven = NOT_GIVEN,
1157
+ os_distro: Optional[str] | NotGiven = NOT_GIVEN,
1158
+ os_type: Literal["linux", "windows"] | NotGiven = NOT_GIVEN,
1159
+ os_version: Optional[str] | NotGiven = NOT_GIVEN,
1160
+ ssh_key: Literal["allow", "deny", "required"] | NotGiven = NOT_GIVEN,
1161
+ tags: TagUpdateMapParam | NotGiven = NOT_GIVEN,
1162
+ polling_interval_seconds: int | NotGiven = NOT_GIVEN,
1163
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
1164
+ # The extra values given here take precedence over values defined on the client or passed to this method.
1165
+ extra_headers: Headers | None = None,
1166
+ extra_query: Query | None = None,
1167
+ extra_body: Body | None = None,
1168
+ timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
1169
+ ) -> Image:
1170
+ """
1171
+ Upload image and poll for completion
1172
+ """
1173
+ response = await self.upload(
1174
+ project_id=project_id,
1175
+ region_id=region_id,
1176
+ name=name,
1177
+ url=url,
1178
+ architecture=architecture,
1179
+ cow_format=cow_format,
1180
+ hw_firmware_type=hw_firmware_type,
1181
+ hw_machine_type=hw_machine_type,
1182
+ is_baremetal=is_baremetal,
1183
+ os_distro=os_distro,
1184
+ os_type=os_type,
1185
+ os_version=os_version,
1186
+ ssh_key=ssh_key,
1187
+ tags=tags,
1188
+ extra_headers=extra_headers,
1189
+ extra_query=extra_query,
1190
+ extra_body=extra_body,
1191
+ timeout=timeout,
1192
+ )
1193
+ if not response.tasks or len(response.tasks) != 1:
1194
+ raise ValueError(f"Expected exactly one task to be created")
1195
+ task = await self._client.cloud.tasks.poll(
1196
+ task_id=response.tasks[0],
1197
+ extra_headers=extra_headers,
1198
+ polling_interval_seconds=polling_interval_seconds,
1199
+ )
1200
+ if not task.created_resources or not task.created_resources.images or len(task.created_resources.images) != 1:
1201
+ raise ValueError(f"Expected exactly one resource to be created in a task")
1202
+ return await self.get(
1203
+ image_id=task.created_resources.images[0],
1204
+ project_id=project_id,
1205
+ region_id=region_id,
1206
+ extra_headers=extra_headers,
1207
+ )
1208
+
893
1209
 
894
1210
  class ImagesResourceWithRawResponse:
895
1211
  def __init__(self, images: ImagesResource) -> None: