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,96 @@
1
+ from __future__ import annotations
2
+
3
+ from collections.abc import Mapping
4
+ from typing import TYPE_CHECKING, Any, Self, TypeVar, cast
5
+
6
+ from attrs import define as _attrs_define
7
+ from attrs import field as _attrs_field
8
+
9
+ from ..types import UNSET, Unset
10
+
11
+ if TYPE_CHECKING:
12
+ from ..models.reservation_model import ReservationModel
13
+
14
+
15
+ T = TypeVar("T", bound="GetReservationsResponse")
16
+
17
+
18
+ @_attrs_define
19
+ class GetReservationsResponse:
20
+ """Attributes:
21
+ data (list[ReservationModel]):
22
+ next_cursor (None | str | Unset):
23
+ """
24
+
25
+ data: list[ReservationModel]
26
+ next_cursor: None | str | Unset = UNSET
27
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
28
+
29
+ def to_dict(self) -> dict[str, Any]:
30
+ data = []
31
+ for data_item_data in self.data:
32
+ data_item = data_item_data.to_dict()
33
+ data.append(data_item)
34
+
35
+ next_cursor: None | str | Unset
36
+ if isinstance(self.next_cursor, Unset):
37
+ next_cursor = UNSET
38
+ else:
39
+ next_cursor = self.next_cursor
40
+
41
+ field_dict: dict[str, Any] = {}
42
+ field_dict.update(self.additional_properties)
43
+ field_dict.update(
44
+ {
45
+ "data": data,
46
+ }
47
+ )
48
+ if next_cursor is not UNSET:
49
+ field_dict["next_cursor"] = next_cursor
50
+
51
+ return field_dict
52
+
53
+ @classmethod
54
+ def from_dict(cls, src_dict: Mapping[str, Any]) -> Self:
55
+ from ..models.reservation_model import ReservationModel
56
+
57
+ d = dict(src_dict)
58
+ data = []
59
+ _data = d.pop("data")
60
+ for data_item_data in _data:
61
+ data_item = ReservationModel.from_dict(data_item_data)
62
+
63
+ data.append(data_item)
64
+
65
+ def _parse_next_cursor(data: object) -> None | str | Unset:
66
+ if data is None:
67
+ return data
68
+ if isinstance(data, Unset):
69
+ return data
70
+ return cast(None | str | Unset, data)
71
+
72
+ next_cursor = _parse_next_cursor(d.pop("next_cursor", UNSET))
73
+
74
+ get_reservations_response = cls(
75
+ data=data,
76
+ next_cursor=next_cursor,
77
+ )
78
+
79
+ get_reservations_response.additional_properties = d
80
+ return get_reservations_response
81
+
82
+ @property
83
+ def additional_keys(self) -> list[str]:
84
+ return list(self.additional_properties.keys())
85
+
86
+ def __getitem__(self, key: str) -> Any:
87
+ return self.additional_properties[key]
88
+
89
+ def __setitem__(self, key: str, value: Any) -> None:
90
+ self.additional_properties[key] = value
91
+
92
+ def __delitem__(self, key: str) -> None:
93
+ del self.additional_properties[key]
94
+
95
+ def __contains__(self, key: str) -> bool:
96
+ return key in self.additional_properties
@@ -0,0 +1,11 @@
1
+ from __future__ import annotations
2
+
3
+ from enum import Enum
4
+
5
+
6
+ class GetReservationsV2ReservationGetSortBy(str, Enum):
7
+ CREATED_AT = "created_at"
8
+ STATUS = "status"
9
+
10
+ def __str__(self) -> str:
11
+ return str(self.value)
@@ -0,0 +1,14 @@
1
+ from __future__ import annotations
2
+
3
+ from enum import Enum
4
+
5
+
6
+ class GetReservationsV2ReservationGetStatus(str, Enum):
7
+ ACTIVE = "Active"
8
+ CANCELED = "Canceled"
9
+ ENDED = "Ended"
10
+ PAUSED = "Paused"
11
+ PENDING = "Pending"
12
+
13
+ def __str__(self) -> str:
14
+ return str(self.value)
@@ -0,0 +1,94 @@
1
+ from __future__ import annotations
2
+
3
+ from collections.abc import Mapping
4
+ from typing import Any, Self, TypeVar
5
+
6
+ from attrs import define as _attrs_define
7
+ from attrs import field as _attrs_field
8
+
9
+ T = TypeVar("T", bound="HistoricalPricePointModel")
10
+
11
+
12
+ @_attrs_define
13
+ class HistoricalPricePointModel:
14
+ """A single historical price point for an instance type in a region.
15
+
16
+ Attributes:
17
+ spot_instance_price (str): Spot price per hour in dollars
18
+ reserved_instance_price (str): Reserved price per hour in dollars
19
+ timestamp (str): Timestamp when this price was recorded
20
+ instance_type (str): Instance type FID
21
+ region (str): Region name
22
+ """
23
+
24
+ spot_instance_price: str
25
+ reserved_instance_price: str
26
+ timestamp: str
27
+ instance_type: str
28
+ region: str
29
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
30
+
31
+ def to_dict(self) -> dict[str, Any]:
32
+ spot_instance_price = self.spot_instance_price
33
+
34
+ reserved_instance_price = self.reserved_instance_price
35
+
36
+ timestamp = self.timestamp
37
+
38
+ instance_type = self.instance_type
39
+
40
+ region = self.region
41
+
42
+ field_dict: dict[str, Any] = {}
43
+ field_dict.update(self.additional_properties)
44
+ field_dict.update(
45
+ {
46
+ "spot_instance_price": spot_instance_price,
47
+ "reserved_instance_price": reserved_instance_price,
48
+ "timestamp": timestamp,
49
+ "instance_type": instance_type,
50
+ "region": region,
51
+ }
52
+ )
53
+
54
+ return field_dict
55
+
56
+ @classmethod
57
+ def from_dict(cls, src_dict: Mapping[str, Any]) -> Self:
58
+ d = dict(src_dict)
59
+ spot_instance_price = d.pop("spot_instance_price")
60
+
61
+ reserved_instance_price = d.pop("reserved_instance_price")
62
+
63
+ timestamp = d.pop("timestamp")
64
+
65
+ instance_type = d.pop("instance_type")
66
+
67
+ region = d.pop("region")
68
+
69
+ historical_price_point_model = cls(
70
+ spot_instance_price=spot_instance_price,
71
+ reserved_instance_price=reserved_instance_price,
72
+ timestamp=timestamp,
73
+ instance_type=instance_type,
74
+ region=region,
75
+ )
76
+
77
+ historical_price_point_model.additional_properties = d
78
+ return historical_price_point_model
79
+
80
+ @property
81
+ def additional_keys(self) -> list[str]:
82
+ return list(self.additional_properties.keys())
83
+
84
+ def __getitem__(self, key: str) -> Any:
85
+ return self.additional_properties[key]
86
+
87
+ def __setitem__(self, key: str, value: Any) -> None:
88
+ self.additional_properties[key] = value
89
+
90
+ def __delitem__(self, key: str) -> None:
91
+ del self.additional_properties[key]
92
+
93
+ def __contains__(self, key: str) -> bool:
94
+ return key in self.additional_properties
@@ -0,0 +1,76 @@
1
+ from __future__ import annotations
2
+
3
+ from collections.abc import Mapping
4
+ from typing import TYPE_CHECKING, Any, Self, TypeVar
5
+
6
+ from attrs import define as _attrs_define
7
+ from attrs import field as _attrs_field
8
+
9
+ if TYPE_CHECKING:
10
+ from ..models.historical_price_point_model import HistoricalPricePointModel
11
+
12
+
13
+ T = TypeVar("T", bound="HistoricalPricesResponseModel")
14
+
15
+
16
+ @_attrs_define
17
+ class HistoricalPricesResponseModel:
18
+ """Response model for historical pricing data.
19
+
20
+ Attributes:
21
+ prices (list[HistoricalPricePointModel]): List of historical price points
22
+ """
23
+
24
+ prices: list[HistoricalPricePointModel]
25
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
26
+
27
+ def to_dict(self) -> dict[str, Any]:
28
+ prices = []
29
+ for prices_item_data in self.prices:
30
+ prices_item = prices_item_data.to_dict()
31
+ prices.append(prices_item)
32
+
33
+ field_dict: dict[str, Any] = {}
34
+ field_dict.update(self.additional_properties)
35
+ field_dict.update(
36
+ {
37
+ "prices": prices,
38
+ }
39
+ )
40
+
41
+ return field_dict
42
+
43
+ @classmethod
44
+ def from_dict(cls, src_dict: Mapping[str, Any]) -> Self:
45
+ from ..models.historical_price_point_model import HistoricalPricePointModel
46
+
47
+ d = dict(src_dict)
48
+ prices = []
49
+ _prices = d.pop("prices")
50
+ for prices_item_data in _prices:
51
+ prices_item = HistoricalPricePointModel.from_dict(prices_item_data)
52
+
53
+ prices.append(prices_item)
54
+
55
+ historical_prices_response_model = cls(
56
+ prices=prices,
57
+ )
58
+
59
+ historical_prices_response_model.additional_properties = d
60
+ return historical_prices_response_model
61
+
62
+ @property
63
+ def additional_keys(self) -> list[str]:
64
+ return list(self.additional_properties.keys())
65
+
66
+ def __getitem__(self, key: str) -> Any:
67
+ return self.additional_properties[key]
68
+
69
+ def __setitem__(self, key: str, value: Any) -> None:
70
+ self.additional_properties[key] = value
71
+
72
+ def __delitem__(self, key: str) -> None:
73
+ del self.additional_properties[key]
74
+
75
+ def __contains__(self, key: str) -> bool:
76
+ return key in self.additional_properties
@@ -0,0 +1,78 @@
1
+ from __future__ import annotations
2
+
3
+ from collections.abc import Mapping
4
+ from typing import TYPE_CHECKING, Any, Self, TypeVar
5
+
6
+ from attrs import define as _attrs_define
7
+ from attrs import field as _attrs_field
8
+
9
+ from ..types import UNSET, Unset
10
+
11
+ if TYPE_CHECKING:
12
+ from ..models.validation_error import ValidationError
13
+
14
+
15
+ T = TypeVar("T", bound="HTTPValidationError")
16
+
17
+
18
+ @_attrs_define
19
+ class HTTPValidationError:
20
+ """Attributes:
21
+ detail (list[ValidationError] | Unset):
22
+ """
23
+
24
+ detail: list[ValidationError] | Unset = UNSET
25
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
26
+
27
+ def to_dict(self) -> dict[str, Any]:
28
+ detail: list[dict[str, Any]] | Unset = UNSET
29
+ if not isinstance(self.detail, Unset):
30
+ detail = []
31
+ for detail_item_data in self.detail:
32
+ detail_item = detail_item_data.to_dict()
33
+ detail.append(detail_item)
34
+
35
+ field_dict: dict[str, Any] = {}
36
+ field_dict.update(self.additional_properties)
37
+ field_dict.update({})
38
+ if detail is not UNSET:
39
+ field_dict["detail"] = detail
40
+
41
+ return field_dict
42
+
43
+ @classmethod
44
+ def from_dict(cls, src_dict: Mapping[str, Any]) -> Self:
45
+ from ..models.validation_error import ValidationError
46
+
47
+ d = dict(src_dict)
48
+ _detail = d.pop("detail", UNSET)
49
+ detail: list[ValidationError] | Unset = UNSET
50
+ if _detail is not UNSET:
51
+ detail = []
52
+ for detail_item_data in _detail:
53
+ detail_item = ValidationError.from_dict(detail_item_data)
54
+
55
+ detail.append(detail_item)
56
+
57
+ http_validation_error = cls(
58
+ detail=detail,
59
+ )
60
+
61
+ http_validation_error.additional_properties = d
62
+ return http_validation_error
63
+
64
+ @property
65
+ def additional_keys(self) -> list[str]:
66
+ return list(self.additional_properties.keys())
67
+
68
+ def __getitem__(self, key: str) -> Any:
69
+ return self.additional_properties[key]
70
+
71
+ def __setitem__(self, key: str, value: Any) -> None:
72
+ self.additional_properties[key] = value
73
+
74
+ def __delitem__(self, key: str) -> None:
75
+ del self.additional_properties[key]
76
+
77
+ def __contains__(self, key: str) -> bool:
78
+ return key in self.additional_properties
@@ -0,0 +1,224 @@
1
+ from __future__ import annotations
2
+
3
+ from collections.abc import Mapping
4
+ from typing import Any, Self, TypeVar, cast
5
+
6
+ from attrs import define as _attrs_define
7
+ from attrs import field as _attrs_field
8
+
9
+ from ..types import UNSET, Unset
10
+
11
+ T = TypeVar("T", bound="ImageVersionModel")
12
+
13
+
14
+ @_attrs_define
15
+ class ImageVersionModel:
16
+ """Attributes:
17
+ image_version_fid (str):
18
+ image_version_name (str):
19
+ os (str):
20
+ kernel (str):
21
+ stable (bool):
22
+ supported_regions (list[str]):
23
+ deactivated_at (None | str | Unset):
24
+ nvidia_driver (None | str | Unset):
25
+ cuda (None | str | Unset):
26
+ cuda_toolkit (None | str | Unset):
27
+ nvidia_container_toolkit (None | str | Unset):
28
+ packages (None | str | Unset):
29
+ """
30
+
31
+ image_version_fid: str
32
+ image_version_name: str
33
+ os: str
34
+ kernel: str
35
+ stable: bool
36
+ supported_regions: list[str]
37
+ deactivated_at: None | str | Unset = UNSET
38
+ nvidia_driver: None | str | Unset = UNSET
39
+ cuda: None | str | Unset = UNSET
40
+ cuda_toolkit: None | str | Unset = UNSET
41
+ nvidia_container_toolkit: None | str | Unset = UNSET
42
+ packages: None | str | Unset = UNSET
43
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
44
+
45
+ def to_dict(self) -> dict[str, Any]:
46
+ image_version_fid = self.image_version_fid
47
+
48
+ image_version_name = self.image_version_name
49
+
50
+ os = self.os
51
+
52
+ kernel = self.kernel
53
+
54
+ stable = self.stable
55
+
56
+ supported_regions = self.supported_regions
57
+
58
+ deactivated_at: None | str | Unset
59
+ if isinstance(self.deactivated_at, Unset):
60
+ deactivated_at = UNSET
61
+ else:
62
+ deactivated_at = self.deactivated_at
63
+
64
+ nvidia_driver: None | str | Unset
65
+ if isinstance(self.nvidia_driver, Unset):
66
+ nvidia_driver = UNSET
67
+ else:
68
+ nvidia_driver = self.nvidia_driver
69
+
70
+ cuda: None | str | Unset
71
+ if isinstance(self.cuda, Unset):
72
+ cuda = UNSET
73
+ else:
74
+ cuda = self.cuda
75
+
76
+ cuda_toolkit: None | str | Unset
77
+ if isinstance(self.cuda_toolkit, Unset):
78
+ cuda_toolkit = UNSET
79
+ else:
80
+ cuda_toolkit = self.cuda_toolkit
81
+
82
+ nvidia_container_toolkit: None | str | Unset
83
+ if isinstance(self.nvidia_container_toolkit, Unset):
84
+ nvidia_container_toolkit = UNSET
85
+ else:
86
+ nvidia_container_toolkit = self.nvidia_container_toolkit
87
+
88
+ packages: None | str | Unset
89
+ if isinstance(self.packages, Unset):
90
+ packages = UNSET
91
+ else:
92
+ packages = self.packages
93
+
94
+ field_dict: dict[str, Any] = {}
95
+ field_dict.update(self.additional_properties)
96
+ field_dict.update(
97
+ {
98
+ "image_version_fid": image_version_fid,
99
+ "image_version_name": image_version_name,
100
+ "os": os,
101
+ "kernel": kernel,
102
+ "stable": stable,
103
+ "supported_regions": supported_regions,
104
+ }
105
+ )
106
+ if deactivated_at is not UNSET:
107
+ field_dict["deactivated_at"] = deactivated_at
108
+ if nvidia_driver is not UNSET:
109
+ field_dict["nvidia_driver"] = nvidia_driver
110
+ if cuda is not UNSET:
111
+ field_dict["cuda"] = cuda
112
+ if cuda_toolkit is not UNSET:
113
+ field_dict["cuda_toolkit"] = cuda_toolkit
114
+ if nvidia_container_toolkit is not UNSET:
115
+ field_dict["nvidia_container_toolkit"] = nvidia_container_toolkit
116
+ if packages is not UNSET:
117
+ field_dict["packages"] = packages
118
+
119
+ return field_dict
120
+
121
+ @classmethod
122
+ def from_dict(cls, src_dict: Mapping[str, Any]) -> Self:
123
+ d = dict(src_dict)
124
+ image_version_fid = d.pop("image_version_fid")
125
+
126
+ image_version_name = d.pop("image_version_name")
127
+
128
+ os = d.pop("os")
129
+
130
+ kernel = d.pop("kernel")
131
+
132
+ stable = d.pop("stable")
133
+
134
+ supported_regions = cast(list[str], d.pop("supported_regions"))
135
+
136
+ def _parse_deactivated_at(data: object) -> None | str | Unset:
137
+ if data is None:
138
+ return data
139
+ if isinstance(data, Unset):
140
+ return data
141
+ return cast(None | str | Unset, data)
142
+
143
+ deactivated_at = _parse_deactivated_at(d.pop("deactivated_at", UNSET))
144
+
145
+ def _parse_nvidia_driver(data: object) -> None | str | Unset:
146
+ if data is None:
147
+ return data
148
+ if isinstance(data, Unset):
149
+ return data
150
+ return cast(None | str | Unset, data)
151
+
152
+ nvidia_driver = _parse_nvidia_driver(d.pop("nvidia_driver", UNSET))
153
+
154
+ def _parse_cuda(data: object) -> None | str | Unset:
155
+ if data is None:
156
+ return data
157
+ if isinstance(data, Unset):
158
+ return data
159
+ return cast(None | str | Unset, data)
160
+
161
+ cuda = _parse_cuda(d.pop("cuda", UNSET))
162
+
163
+ def _parse_cuda_toolkit(data: object) -> None | str | Unset:
164
+ if data is None:
165
+ return data
166
+ if isinstance(data, Unset):
167
+ return data
168
+ return cast(None | str | Unset, data)
169
+
170
+ cuda_toolkit = _parse_cuda_toolkit(d.pop("cuda_toolkit", UNSET))
171
+
172
+ def _parse_nvidia_container_toolkit(data: object) -> None | str | Unset:
173
+ if data is None:
174
+ return data
175
+ if isinstance(data, Unset):
176
+ return data
177
+ return cast(None | str | Unset, data)
178
+
179
+ nvidia_container_toolkit = _parse_nvidia_container_toolkit(
180
+ d.pop("nvidia_container_toolkit", UNSET)
181
+ )
182
+
183
+ def _parse_packages(data: object) -> None | str | Unset:
184
+ if data is None:
185
+ return data
186
+ if isinstance(data, Unset):
187
+ return data
188
+ return cast(None | str | Unset, data)
189
+
190
+ packages = _parse_packages(d.pop("packages", UNSET))
191
+
192
+ image_version_model = cls(
193
+ image_version_fid=image_version_fid,
194
+ image_version_name=image_version_name,
195
+ os=os,
196
+ kernel=kernel,
197
+ stable=stable,
198
+ supported_regions=supported_regions,
199
+ deactivated_at=deactivated_at,
200
+ nvidia_driver=nvidia_driver,
201
+ cuda=cuda,
202
+ cuda_toolkit=cuda_toolkit,
203
+ nvidia_container_toolkit=nvidia_container_toolkit,
204
+ packages=packages,
205
+ )
206
+
207
+ image_version_model.additional_properties = d
208
+ return image_version_model
209
+
210
+ @property
211
+ def additional_keys(self) -> list[str]:
212
+ return list(self.additional_properties.keys())
213
+
214
+ def __getitem__(self, key: str) -> Any:
215
+ return self.additional_properties[key]
216
+
217
+ def __setitem__(self, key: str, value: Any) -> None:
218
+ self.additional_properties[key] = value
219
+
220
+ def __delitem__(self, key: str) -> None:
221
+ del self.additional_properties[key]
222
+
223
+ def __contains__(self, key: str) -> bool:
224
+ return key in self.additional_properties