mithril-client 0.1.0a1__cp314-cp314-macosx_11_0_arm64.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.
Files changed (163) hide show
  1. mithril/__init__.py +7 -0
  2. mithril/_mcli.cpython-314-darwin.so +0 -0
  3. mithril/_mcli.pyi +7 -0
  4. mithril/_mcli_entry.py +75 -0
  5. mithril/api/__init__.py +7 -0
  6. mithril/api/bindings/.gitattributes +2 -0
  7. mithril/api/bindings/__init__.py +10 -0
  8. mithril/api/bindings/api/__init__.py +1 -0
  9. mithril/api/bindings/api/api_keys/__init__.py +1 -0
  10. mithril/api/bindings/api/api_keys/create_api_key_v2_api_keys_post.py +179 -0
  11. mithril/api/bindings/api/api_keys/get_api_keys_v2_api_keys_get.py +141 -0
  12. mithril/api/bindings/api/api_keys/revoke_api_key_v2_api_keys_key_fid_delete.py +173 -0
  13. mithril/api/bindings/api/image_versions/__init__.py +1 -0
  14. mithril/api/bindings/api/image_versions/get_image_versions_v2_image_versions_get.py +141 -0
  15. mithril/api/bindings/api/image_versions/get_mcc_image_versions_v2_mcc_image_versions_get.py +179 -0
  16. mithril/api/bindings/api/instance_types/__init__.py +1 -0
  17. mithril/api/bindings/api/instance_types/get_instance_types_v2_instance_types_get.py +137 -0
  18. mithril/api/bindings/api/instances/__init__.py +1 -0
  19. mithril/api/bindings/api/instances/get_instance_status_v2_instances_instance_id_status_get.py +165 -0
  20. mithril/api/bindings/api/instances/get_instances_v2_instances_get.py +409 -0
  21. mithril/api/bindings/api/kubernetes_clusters/__init__.py +1 -0
  22. mithril/api/bindings/api/kubernetes_clusters/create_kubernetes_cluster_v2_kubernetes_clusters_post.py +171 -0
  23. mithril/api/bindings/api/kubernetes_clusters/delete_kubernetes_cluster_v2_kubernetes_clusters_cluster_fid_delete.py +163 -0
  24. mithril/api/bindings/api/kubernetes_clusters/get_kubernetes_cluster_v2_kubernetes_clusters_cluster_fid_get.py +165 -0
  25. mithril/api/bindings/api/kubernetes_clusters/get_kubernetes_clusters_v2_kubernetes_clusters_get.py +175 -0
  26. mithril/api/bindings/api/lifecycle_scripts/__init__.py +1 -0
  27. mithril/api/bindings/api/lifecycle_scripts/create_lifecycle_script_v2_lifecycle_scripts_post.py +171 -0
  28. mithril/api/bindings/api/lifecycle_scripts/delete_lifecycle_script_v2_lifecycle_scripts_ls_fid_delete.py +155 -0
  29. mithril/api/bindings/api/lifecycle_scripts/get_lifecycle_script_content_v2_lifecycle_scripts_ls_fid_content_get.py +155 -0
  30. mithril/api/bindings/api/lifecycle_scripts/list_lifecycle_scripts_v2_lifecycle_scripts_get.py +247 -0
  31. mithril/api/bindings/api/lifecycle_scripts/update_lifecycle_script_v2_lifecycle_scripts_ls_fid_patch.py +179 -0
  32. mithril/api/bindings/api/pricing/__init__.py +1 -0
  33. mithril/api/bindings/api/pricing/get_current_prices_v2_v2_pricing_current_get.py +217 -0
  34. mithril/api/bindings/api/pricing/get_historical_prices_v2_v2_pricing_history_get.py +222 -0
  35. mithril/api/bindings/api/profile/__init__.py +1 -0
  36. mithril/api/bindings/api/profile/get_me_v2_me_get.py +132 -0
  37. mithril/api/bindings/api/profile/get_my_teammates_v2_me_teammates_get.py +153 -0
  38. mithril/api/bindings/api/projects/__init__.py +1 -0
  39. mithril/api/bindings/api/projects/get_projects_v2_projects_get.py +137 -0
  40. mithril/api/bindings/api/quotas/__init__.py +1 -0
  41. mithril/api/bindings/api/quotas/get_quotas_v2_quotas_get.py +175 -0
  42. mithril/api/bindings/api/reservations/__init__.py +1 -0
  43. mithril/api/bindings/api/reservations/create_reservation_v2_reservation_post.py +171 -0
  44. mithril/api/bindings/api/reservations/extend_reservation_v2_reservation_reservation_fid_extend_post.py +187 -0
  45. mithril/api/bindings/api/reservations/get_availability_v2_reservation_availability_get.py +664 -0
  46. mithril/api/bindings/api/reservations/get_extension_availability_v2_reservation_reservation_fid_extension_availability_get.py +165 -0
  47. mithril/api/bindings/api/reservations/get_reservations_v2_reservation_get.py +309 -0
  48. mithril/api/bindings/api/reservations/update_reservation_v2_reservation_reservation_fid_patch.py +187 -0
  49. mithril/api/bindings/api/spot/__init__.py +1 -0
  50. mithril/api/bindings/api/spot/cancel_bid_v2_spot_bids_bid_fid_delete.py +161 -0
  51. mithril/api/bindings/api/spot/create_bid_v2_spot_bids_post.py +171 -0
  52. mithril/api/bindings/api/spot/get_auctions_v2_spot_availability_get.py +137 -0
  53. mithril/api/bindings/api/spot/get_bid_history_v2_spot_bids_bid_fid_history_get.py +193 -0
  54. mithril/api/bindings/api/spot/get_bid_status_v2_spot_bids_bid_fid_status_get.py +189 -0
  55. mithril/api/bindings/api/spot/get_bid_v2_spot_bids_bid_fid_get.py +163 -0
  56. mithril/api/bindings/api/spot/get_bids_v2_spot_bids_get.py +330 -0
  57. mithril/api/bindings/api/spot/update_bid_v2_spot_bids_bid_fid_patch.py +185 -0
  58. mithril/api/bindings/api/ssh_keys/__init__.py +1 -0
  59. mithril/api/bindings/api/ssh_keys/create_ssh_key_v2_ssh_keys_post.py +175 -0
  60. mithril/api/bindings/api/ssh_keys/delete_ssh_key_v2_ssh_keys_ssh_key_fid_delete.py +167 -0
  61. mithril/api/bindings/api/ssh_keys/get_ssh_keys_v2_ssh_keys_get.py +175 -0
  62. mithril/api/bindings/api/ssh_keys/update_ssh_key_v2_ssh_keys_ssh_key_fid_patch.py +187 -0
  63. mithril/api/bindings/api/volumes/__init__.py +1 -0
  64. mithril/api/bindings/api/volumes/create_volume_v2_volumes_post.py +211 -0
  65. mithril/api/bindings/api/volumes/delete_volume_v2_volumes_volume_fid_delete.py +199 -0
  66. mithril/api/bindings/api/volumes/get_volumes_v2_volumes_get.py +239 -0
  67. mithril/api/bindings/api/volumes/update_volume_v2_volumes_volume_fid_patch.py +243 -0
  68. mithril/api/bindings/client.py +284 -0
  69. mithril/api/bindings/errors.py +18 -0
  70. mithril/api/bindings/models/__init__.py +169 -0
  71. mithril/api/bindings/models/api_key_model.py +114 -0
  72. mithril/api/bindings/models/auction_model.py +146 -0
  73. mithril/api/bindings/models/availability_slot_model.py +76 -0
  74. mithril/api/bindings/models/bid_history_event_model.py +157 -0
  75. mithril/api/bindings/models/bid_history_event_model_event_type.py +19 -0
  76. mithril/api/bindings/models/bid_history_response.py +84 -0
  77. mithril/api/bindings/models/bid_model.py +191 -0
  78. mithril/api/bindings/models/bid_model_status.py +14 -0
  79. mithril/api/bindings/models/bid_status_response.py +72 -0
  80. mithril/api/bindings/models/bid_status_response_status.py +15 -0
  81. mithril/api/bindings/models/check_availability_response.py +60 -0
  82. mithril/api/bindings/models/create_api_key_request.py +68 -0
  83. mithril/api/bindings/models/create_api_key_response.py +122 -0
  84. mithril/api/bindings/models/create_bid_request.py +116 -0
  85. mithril/api/bindings/models/create_kubernetes_cluster_request.py +136 -0
  86. mithril/api/bindings/models/create_kubernetes_cluster_request_k8s_version.py +11 -0
  87. mithril/api/bindings/models/create_lifecycle_script_request.py +115 -0
  88. mithril/api/bindings/models/create_reservation_request.py +124 -0
  89. mithril/api/bindings/models/create_ssh_key_request.py +99 -0
  90. mithril/api/bindings/models/create_volume_request.py +98 -0
  91. mithril/api/bindings/models/create_volume_request_disk_interface.py +11 -0
  92. mithril/api/bindings/models/created_ssh_key_model.py +122 -0
  93. mithril/api/bindings/models/current_prices_response.py +202 -0
  94. mithril/api/bindings/models/extend_reservation_request.py +60 -0
  95. mithril/api/bindings/models/extension_availability_response.py +68 -0
  96. mithril/api/bindings/models/get_availability_v2_reservation_availability_get_mode.py +12 -0
  97. mithril/api/bindings/models/get_bids_response.py +96 -0
  98. mithril/api/bindings/models/get_bids_v2_spot_bids_get_sort_by.py +11 -0
  99. mithril/api/bindings/models/get_bids_v2_spot_bids_get_status.py +14 -0
  100. mithril/api/bindings/models/get_instances_response.py +96 -0
  101. mithril/api/bindings/models/get_instances_v2_instances_get_order_type_in_type_0_item.py +11 -0
  102. mithril/api/bindings/models/get_instances_v2_instances_get_sort_by.py +12 -0
  103. mithril/api/bindings/models/get_instances_v2_instances_get_status_in_type_0_item.py +24 -0
  104. mithril/api/bindings/models/get_latest_end_time_response.py +68 -0
  105. mithril/api/bindings/models/get_reservations_response.py +96 -0
  106. mithril/api/bindings/models/get_reservations_v2_reservation_get_sort_by.py +11 -0
  107. mithril/api/bindings/models/get_reservations_v2_reservation_get_status.py +14 -0
  108. mithril/api/bindings/models/historical_price_point_model.py +94 -0
  109. mithril/api/bindings/models/historical_prices_response_model.py +76 -0
  110. mithril/api/bindings/models/http_validation_error.py +78 -0
  111. mithril/api/bindings/models/image_version_model.py +224 -0
  112. mithril/api/bindings/models/instance_model.py +211 -0
  113. mithril/api/bindings/models/instance_model_status.py +24 -0
  114. mithril/api/bindings/models/instance_status_response.py +141 -0
  115. mithril/api/bindings/models/instance_status_response_status.py +24 -0
  116. mithril/api/bindings/models/instance_type_model.py +170 -0
  117. mithril/api/bindings/models/kubernetes_cluster_model.py +207 -0
  118. mithril/api/bindings/models/kubernetes_cluster_model_status.py +12 -0
  119. mithril/api/bindings/models/launch_specification_model.py +152 -0
  120. mithril/api/bindings/models/lifecycle_script_model.py +134 -0
  121. mithril/api/bindings/models/lifecycle_script_scope.py +12 -0
  122. mithril/api/bindings/models/list_lifecycle_scripts_response.py +96 -0
  123. mithril/api/bindings/models/list_lifecycle_scripts_v2_lifecycle_scripts_get_sort_by.py +11 -0
  124. mithril/api/bindings/models/me_response.py +126 -0
  125. mithril/api/bindings/models/new_ssh_key_model.py +100 -0
  126. mithril/api/bindings/models/persistent_disk_change.py +92 -0
  127. mithril/api/bindings/models/project_model.py +76 -0
  128. mithril/api/bindings/models/public_lifecycle_script_scope.py +11 -0
  129. mithril/api/bindings/models/quota_model.py +132 -0
  130. mithril/api/bindings/models/reservation_model.py +215 -0
  131. mithril/api/bindings/models/reservation_model_status.py +14 -0
  132. mithril/api/bindings/models/size.py +70 -0
  133. mithril/api/bindings/models/size_unit.py +18 -0
  134. mithril/api/bindings/models/sort_direction.py +11 -0
  135. mithril/api/bindings/models/teammate_response.py +158 -0
  136. mithril/api/bindings/models/update_bid_request.py +143 -0
  137. mithril/api/bindings/models/update_lifecycle_script_request.py +109 -0
  138. mithril/api/bindings/models/update_reservation_request.py +103 -0
  139. mithril/api/bindings/models/update_ssh_key_request.py +60 -0
  140. mithril/api/bindings/models/update_volume_request.py +65 -0
  141. mithril/api/bindings/models/validation_error.py +89 -0
  142. mithril/api/bindings/models/volume_model.py +140 -0
  143. mithril/api/bindings/models/volume_model_attachments.py +46 -0
  144. mithril/api/bindings/models/volume_model_interface.py +11 -0
  145. mithril/api/bindings/types.py +56 -0
  146. mithril/api/client.py +138 -0
  147. mithril/cli/__init__.py +7 -0
  148. mithril/cli/commands/__init__.py +15 -0
  149. mithril/cli/commands/help.py +88 -0
  150. mithril/cli/commands/launch.py +353 -0
  151. mithril/cli/main.py +68 -0
  152. mithril/cli/utils/__init__.py +1 -0
  153. mithril/cli/utils/skypilot_passthrough.py +38 -0
  154. mithril/cli/utils/streaming.py +235 -0
  155. mithril/cli/utils/volumes.py +110 -0
  156. mithril/config.py +47 -0
  157. mithril/py.typed +0 -0
  158. mithril/sky/__init__.py +141 -0
  159. mithril/sky/client.py +176 -0
  160. mithril_client-0.1.0a1.dist-info/METADATA +56 -0
  161. mithril_client-0.1.0a1.dist-info/RECORD +163 -0
  162. mithril_client-0.1.0a1.dist-info/WHEEL +4 -0
  163. mithril_client-0.1.0a1.dist-info/entry_points.txt +3 -0
@@ -0,0 +1,187 @@
1
+ from __future__ import annotations
2
+
3
+ from http import HTTPStatus
4
+ from typing import Any
5
+ from urllib.parse import quote
6
+
7
+ import httpx
8
+
9
+ from ... import errors
10
+ from ...client import AuthenticatedClient, Client
11
+ from ...models.http_validation_error import HTTPValidationError
12
+ from ...models.new_ssh_key_model import NewSshKeyModel
13
+ from ...models.update_ssh_key_request import UpdateSshKeyRequest
14
+ from ...types import Response
15
+
16
+
17
+ def _get_kwargs(
18
+ ssh_key_fid: str,
19
+ *,
20
+ body: UpdateSshKeyRequest,
21
+ ) -> dict[str, Any]:
22
+ headers: dict[str, Any] = {}
23
+
24
+ _kwargs: dict[str, Any] = {
25
+ "method": "patch",
26
+ "url": "/v2/ssh-keys/{ssh_key_fid}".format(
27
+ ssh_key_fid=quote(str(ssh_key_fid), safe="")
28
+ ),
29
+ }
30
+
31
+ _kwargs["json"] = body.to_dict()
32
+
33
+ headers["Content-Type"] = "application/json"
34
+
35
+ _kwargs["headers"] = headers
36
+ return _kwargs
37
+
38
+
39
+ def _parse_response(
40
+ *, client: AuthenticatedClient | Client, response: httpx.Response
41
+ ) -> HTTPValidationError | NewSshKeyModel | None:
42
+ if response.status_code == 200:
43
+ response_200 = NewSshKeyModel.from_dict(response.json())
44
+
45
+ return response_200
46
+
47
+ if response.status_code == 422:
48
+ response_422 = HTTPValidationError.from_dict(response.json())
49
+
50
+ return response_422
51
+
52
+ if client.raise_on_unexpected_status:
53
+ raise errors.UnexpectedStatus(response.status_code, response.content)
54
+ return None
55
+
56
+
57
+ def _build_response(
58
+ *, client: AuthenticatedClient | Client, response: httpx.Response
59
+ ) -> Response[HTTPValidationError | NewSshKeyModel]:
60
+ return Response(
61
+ status_code=HTTPStatus(response.status_code),
62
+ content=response.content,
63
+ headers=response.headers,
64
+ parsed=_parse_response(client=client, response=response),
65
+ )
66
+
67
+
68
+ def sync_detailed(
69
+ ssh_key_fid: str,
70
+ *,
71
+ client: AuthenticatedClient,
72
+ body: UpdateSshKeyRequest,
73
+ ) -> Response[HTTPValidationError | NewSshKeyModel]:
74
+ """Update Ssh Key
75
+
76
+ Update an SSH key to set it as required. Only admins can set a key as required.
77
+
78
+ Args:
79
+ ssh_key_fid (str):
80
+ body (UpdateSshKeyRequest):
81
+
82
+ Raises:
83
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
84
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
85
+
86
+ Returns:
87
+ Response[HTTPValidationError | NewSshKeyModel]
88
+ """
89
+ kwargs = _get_kwargs(
90
+ ssh_key_fid=ssh_key_fid,
91
+ body=body,
92
+ )
93
+
94
+ response = client.get_httpx_client().request(
95
+ **kwargs,
96
+ )
97
+
98
+ return _build_response(client=client, response=response)
99
+
100
+
101
+ def sync(
102
+ ssh_key_fid: str,
103
+ *,
104
+ client: AuthenticatedClient,
105
+ body: UpdateSshKeyRequest,
106
+ ) -> HTTPValidationError | NewSshKeyModel | None:
107
+ """Update Ssh Key
108
+
109
+ Update an SSH key to set it as required. Only admins can set a key as required.
110
+
111
+ Args:
112
+ ssh_key_fid (str):
113
+ body (UpdateSshKeyRequest):
114
+
115
+ Raises:
116
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
117
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
118
+
119
+ Returns:
120
+ HTTPValidationError | NewSshKeyModel
121
+ """
122
+ return sync_detailed(
123
+ ssh_key_fid=ssh_key_fid,
124
+ client=client,
125
+ body=body,
126
+ ).parsed
127
+
128
+
129
+ async def asyncio_detailed(
130
+ ssh_key_fid: str,
131
+ *,
132
+ client: AuthenticatedClient,
133
+ body: UpdateSshKeyRequest,
134
+ ) -> Response[HTTPValidationError | NewSshKeyModel]:
135
+ """Update Ssh Key
136
+
137
+ Update an SSH key to set it as required. Only admins can set a key as required.
138
+
139
+ Args:
140
+ ssh_key_fid (str):
141
+ body (UpdateSshKeyRequest):
142
+
143
+ Raises:
144
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
145
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
146
+
147
+ Returns:
148
+ Response[HTTPValidationError | NewSshKeyModel]
149
+ """
150
+ kwargs = _get_kwargs(
151
+ ssh_key_fid=ssh_key_fid,
152
+ body=body,
153
+ )
154
+
155
+ response = await client.get_async_httpx_client().request(**kwargs)
156
+
157
+ return _build_response(client=client, response=response)
158
+
159
+
160
+ async def asyncio(
161
+ ssh_key_fid: str,
162
+ *,
163
+ client: AuthenticatedClient,
164
+ body: UpdateSshKeyRequest,
165
+ ) -> HTTPValidationError | NewSshKeyModel | None:
166
+ """Update Ssh Key
167
+
168
+ Update an SSH key to set it as required. Only admins can set a key as required.
169
+
170
+ Args:
171
+ ssh_key_fid (str):
172
+ body (UpdateSshKeyRequest):
173
+
174
+ Raises:
175
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
176
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
177
+
178
+ Returns:
179
+ HTTPValidationError | NewSshKeyModel
180
+ """
181
+ return (
182
+ await asyncio_detailed(
183
+ ssh_key_fid=ssh_key_fid,
184
+ client=client,
185
+ body=body,
186
+ )
187
+ ).parsed
@@ -0,0 +1 @@
1
+ """Contains endpoint functions for accessing the API"""
@@ -0,0 +1,211 @@
1
+ from __future__ import annotations
2
+
3
+ from http import HTTPStatus
4
+ from typing import Any
5
+
6
+ import httpx
7
+
8
+ from ... import errors
9
+ from ...client import AuthenticatedClient, Client
10
+ from ...models.create_volume_request import CreateVolumeRequest
11
+ from ...models.http_validation_error import HTTPValidationError
12
+ from ...models.volume_model import VolumeModel
13
+ from ...types import Response
14
+
15
+
16
+ def _get_kwargs(
17
+ *,
18
+ body: CreateVolumeRequest,
19
+ ) -> dict[str, Any]:
20
+ headers: dict[str, Any] = {}
21
+
22
+ _kwargs: dict[str, Any] = {
23
+ "method": "post",
24
+ "url": "/v2/volumes",
25
+ }
26
+
27
+ _kwargs["json"] = body.to_dict()
28
+
29
+ headers["Content-Type"] = "application/json"
30
+
31
+ _kwargs["headers"] = headers
32
+ return _kwargs
33
+
34
+
35
+ def _parse_response(
36
+ *, client: AuthenticatedClient | Client, response: httpx.Response
37
+ ) -> HTTPValidationError | VolumeModel | None:
38
+ if response.status_code == 201:
39
+ response_201 = VolumeModel.from_dict(response.json())
40
+
41
+ return response_201
42
+
43
+ if response.status_code == 422:
44
+ response_422 = HTTPValidationError.from_dict(response.json())
45
+
46
+ return response_422
47
+
48
+ if client.raise_on_unexpected_status:
49
+ raise errors.UnexpectedStatus(response.status_code, response.content)
50
+ return None
51
+
52
+
53
+ def _build_response(
54
+ *, client: AuthenticatedClient | Client, response: httpx.Response
55
+ ) -> Response[HTTPValidationError | VolumeModel]:
56
+ return Response(
57
+ status_code=HTTPStatus(response.status_code),
58
+ content=response.content,
59
+ headers=response.headers,
60
+ parsed=_parse_response(client=client, response=response),
61
+ )
62
+
63
+
64
+ def sync_detailed(
65
+ *,
66
+ client: AuthenticatedClient,
67
+ body: CreateVolumeRequest,
68
+ ) -> Response[HTTPValidationError | VolumeModel]:
69
+ """Create Volume
70
+
71
+ Creates a new storage volume.
72
+
73
+ Args:
74
+ user_info: Authenticated user information.
75
+ body: Request body containing volume creation details (size, region, etc).
76
+
77
+ Returns:
78
+ VolumeModel: The created volume model.
79
+
80
+ Raises:
81
+ HTTPException: If user unauthorized or creation fails.
82
+
83
+ Args:
84
+ body (CreateVolumeRequest): Request model for creating a new storage volume.
85
+
86
+ Raises:
87
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
88
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
89
+
90
+ Returns:
91
+ Response[HTTPValidationError | VolumeModel]
92
+ """
93
+ kwargs = _get_kwargs(
94
+ body=body,
95
+ )
96
+
97
+ response = client.get_httpx_client().request(
98
+ **kwargs,
99
+ )
100
+
101
+ return _build_response(client=client, response=response)
102
+
103
+
104
+ def sync(
105
+ *,
106
+ client: AuthenticatedClient,
107
+ body: CreateVolumeRequest,
108
+ ) -> HTTPValidationError | VolumeModel | None:
109
+ """Create Volume
110
+
111
+ Creates a new storage volume.
112
+
113
+ Args:
114
+ user_info: Authenticated user information.
115
+ body: Request body containing volume creation details (size, region, etc).
116
+
117
+ Returns:
118
+ VolumeModel: The created volume model.
119
+
120
+ Raises:
121
+ HTTPException: If user unauthorized or creation fails.
122
+
123
+ Args:
124
+ body (CreateVolumeRequest): Request model for creating a new storage volume.
125
+
126
+ Raises:
127
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
128
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
129
+
130
+ Returns:
131
+ HTTPValidationError | VolumeModel
132
+ """
133
+ return sync_detailed(
134
+ client=client,
135
+ body=body,
136
+ ).parsed
137
+
138
+
139
+ async def asyncio_detailed(
140
+ *,
141
+ client: AuthenticatedClient,
142
+ body: CreateVolumeRequest,
143
+ ) -> Response[HTTPValidationError | VolumeModel]:
144
+ """Create Volume
145
+
146
+ Creates a new storage volume.
147
+
148
+ Args:
149
+ user_info: Authenticated user information.
150
+ body: Request body containing volume creation details (size, region, etc).
151
+
152
+ Returns:
153
+ VolumeModel: The created volume model.
154
+
155
+ Raises:
156
+ HTTPException: If user unauthorized or creation fails.
157
+
158
+ Args:
159
+ body (CreateVolumeRequest): Request model for creating a new storage volume.
160
+
161
+ Raises:
162
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
163
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
164
+
165
+ Returns:
166
+ Response[HTTPValidationError | VolumeModel]
167
+ """
168
+ kwargs = _get_kwargs(
169
+ body=body,
170
+ )
171
+
172
+ response = await client.get_async_httpx_client().request(**kwargs)
173
+
174
+ return _build_response(client=client, response=response)
175
+
176
+
177
+ async def asyncio(
178
+ *,
179
+ client: AuthenticatedClient,
180
+ body: CreateVolumeRequest,
181
+ ) -> HTTPValidationError | VolumeModel | None:
182
+ """Create Volume
183
+
184
+ Creates a new storage volume.
185
+
186
+ Args:
187
+ user_info: Authenticated user information.
188
+ body: Request body containing volume creation details (size, region, etc).
189
+
190
+ Returns:
191
+ VolumeModel: The created volume model.
192
+
193
+ Raises:
194
+ HTTPException: If user unauthorized or creation fails.
195
+
196
+ Args:
197
+ body (CreateVolumeRequest): Request model for creating a new storage volume.
198
+
199
+ Raises:
200
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
201
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
202
+
203
+ Returns:
204
+ HTTPValidationError | VolumeModel
205
+ """
206
+ return (
207
+ await asyncio_detailed(
208
+ client=client,
209
+ body=body,
210
+ )
211
+ ).parsed
@@ -0,0 +1,199 @@
1
+ from __future__ import annotations
2
+
3
+ from http import HTTPStatus
4
+ from typing import Any, cast
5
+ from urllib.parse import quote
6
+
7
+ import httpx
8
+
9
+ from ... import errors
10
+ from ...client import AuthenticatedClient, Client
11
+ from ...models.http_validation_error import HTTPValidationError
12
+ from ...types import Response
13
+
14
+
15
+ def _get_kwargs(
16
+ volume_fid: str,
17
+ ) -> dict[str, Any]:
18
+ _kwargs: dict[str, Any] = {
19
+ "method": "delete",
20
+ "url": "/v2/volumes/{volume_fid}".format(
21
+ volume_fid=quote(str(volume_fid), safe="")
22
+ ),
23
+ }
24
+
25
+ return _kwargs
26
+
27
+
28
+ def _parse_response(
29
+ *, client: AuthenticatedClient | Client, response: httpx.Response
30
+ ) -> Any | HTTPValidationError | None:
31
+ if response.status_code == 204:
32
+ response_204 = cast(Any, None)
33
+ return response_204
34
+
35
+ if response.status_code == 422:
36
+ response_422 = HTTPValidationError.from_dict(response.json())
37
+
38
+ return response_422
39
+
40
+ if client.raise_on_unexpected_status:
41
+ raise errors.UnexpectedStatus(response.status_code, response.content)
42
+ return None
43
+
44
+
45
+ def _build_response(
46
+ *, client: AuthenticatedClient | Client, response: httpx.Response
47
+ ) -> Response[Any | HTTPValidationError]:
48
+ return Response(
49
+ status_code=HTTPStatus(response.status_code),
50
+ content=response.content,
51
+ headers=response.headers,
52
+ parsed=_parse_response(client=client, response=response),
53
+ )
54
+
55
+
56
+ def sync_detailed(
57
+ volume_fid: str,
58
+ *,
59
+ client: AuthenticatedClient,
60
+ ) -> Response[Any | HTTPValidationError]:
61
+ """Delete Volume
62
+
63
+ Deletes a storage volume.
64
+
65
+ Permanently removes a volume. The volume must not be currently in use/attached.
66
+
67
+ Args:
68
+ user_info: Authenticated user information.
69
+ volume_fid: Identifier of the volume to delete.
70
+
71
+ Raises:
72
+ HTTPException: If volume not found, user unauthorized, or volume is in use.
73
+
74
+ Args:
75
+ volume_fid (str):
76
+
77
+ Raises:
78
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
79
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
80
+
81
+ Returns:
82
+ Response[Any | HTTPValidationError]
83
+ """
84
+ kwargs = _get_kwargs(
85
+ volume_fid=volume_fid,
86
+ )
87
+
88
+ response = client.get_httpx_client().request(
89
+ **kwargs,
90
+ )
91
+
92
+ return _build_response(client=client, response=response)
93
+
94
+
95
+ def sync(
96
+ volume_fid: str,
97
+ *,
98
+ client: AuthenticatedClient,
99
+ ) -> Any | HTTPValidationError | None:
100
+ """Delete Volume
101
+
102
+ Deletes a storage volume.
103
+
104
+ Permanently removes a volume. The volume must not be currently in use/attached.
105
+
106
+ Args:
107
+ user_info: Authenticated user information.
108
+ volume_fid: Identifier of the volume to delete.
109
+
110
+ Raises:
111
+ HTTPException: If volume not found, user unauthorized, or volume is in use.
112
+
113
+ Args:
114
+ volume_fid (str):
115
+
116
+ Raises:
117
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
118
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
119
+
120
+ Returns:
121
+ Any | HTTPValidationError
122
+ """
123
+ return sync_detailed(
124
+ volume_fid=volume_fid,
125
+ client=client,
126
+ ).parsed
127
+
128
+
129
+ async def asyncio_detailed(
130
+ volume_fid: str,
131
+ *,
132
+ client: AuthenticatedClient,
133
+ ) -> Response[Any | HTTPValidationError]:
134
+ """Delete Volume
135
+
136
+ Deletes a storage volume.
137
+
138
+ Permanently removes a volume. The volume must not be currently in use/attached.
139
+
140
+ Args:
141
+ user_info: Authenticated user information.
142
+ volume_fid: Identifier of the volume to delete.
143
+
144
+ Raises:
145
+ HTTPException: If volume not found, user unauthorized, or volume is in use.
146
+
147
+ Args:
148
+ volume_fid (str):
149
+
150
+ Raises:
151
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
152
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
153
+
154
+ Returns:
155
+ Response[Any | HTTPValidationError]
156
+ """
157
+ kwargs = _get_kwargs(
158
+ volume_fid=volume_fid,
159
+ )
160
+
161
+ response = await client.get_async_httpx_client().request(**kwargs)
162
+
163
+ return _build_response(client=client, response=response)
164
+
165
+
166
+ async def asyncio(
167
+ volume_fid: str,
168
+ *,
169
+ client: AuthenticatedClient,
170
+ ) -> Any | HTTPValidationError | None:
171
+ """Delete Volume
172
+
173
+ Deletes a storage volume.
174
+
175
+ Permanently removes a volume. The volume must not be currently in use/attached.
176
+
177
+ Args:
178
+ user_info: Authenticated user information.
179
+ volume_fid: Identifier of the volume to delete.
180
+
181
+ Raises:
182
+ HTTPException: If volume not found, user unauthorized, or volume is in use.
183
+
184
+ Args:
185
+ volume_fid (str):
186
+
187
+ Raises:
188
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
189
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
190
+
191
+ Returns:
192
+ Any | HTTPValidationError
193
+ """
194
+ return (
195
+ await asyncio_detailed(
196
+ volume_fid=volume_fid,
197
+ client=client,
198
+ )
199
+ ).parsed