hyperstack 1.25.0a0__py3-none-any.whl → 1.41.0a0__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.
- hyperstack/__init__.py +79 -131
- hyperstack/api/__init__.py +2 -0
- hyperstack/api/alive_api.py +240 -0
- hyperstack/api/api_key_api.py +16 -20
- hyperstack/api/assigning_member_role_api.py +15 -17
- hyperstack/api/auth_api.py +1050 -5
- hyperstack/api/beta_access_api.py +856 -0
- hyperstack/api/billing_api.py +6461 -673
- hyperstack/api/calculate_api.py +8 -9
- hyperstack/api/callbacks_api.py +120 -126
- hyperstack/api/cluster_events_api.py +1 -2
- hyperstack/api/clusters_api.py +2492 -146
- hyperstack/api/compliance_api.py +14 -18
- hyperstack/api/credit_api.py +17 -15
- hyperstack/api/customer_contract_api.py +30 -33
- hyperstack/api/dashboard_api.py +4 -5
- hyperstack/api/deployment_api.py +4 -8
- hyperstack/api/environment_api.py +285 -16
- hyperstack/api/firewall_attachment_api.py +11 -9
- hyperstack/api/firewalls_api.py +341 -347
- hyperstack/api/flavor_api.py +4 -5
- hyperstack/api/floating_ip_api.py +50 -49
- hyperstack/api/gpu_api.py +1 -2
- hyperstack/api/image_api.py +35 -39
- hyperstack/api/invite_api.py +288 -18
- hyperstack/api/keypair_api.py +22 -26
- hyperstack/api/organization_api.py +12 -15
- hyperstack/api/partner_config_api.py +564 -0
- hyperstack/api/payment_api.py +299 -18
- hyperstack/api/permission_api.py +4 -5
- hyperstack/api/policy_api.py +4 -5
- hyperstack/api/pricebook_api.py +14 -12
- hyperstack/api/profile_api.py +13 -17
- hyperstack/api/rbac_role_api.py +20 -25
- hyperstack/api/region_api.py +7 -8
- hyperstack/api/security_rules_api.py +1 -2
- hyperstack/api/snapshot_events_api.py +1 -2
- hyperstack/api/snapshots_api.py +166 -172
- hyperstack/api/stock_api.py +4 -5
- hyperstack/api/template_api.py +14 -19
- hyperstack/api/user_api.py +55 -49
- hyperstack/api/user_detail_choice_api.py +1 -2
- hyperstack/api/user_permission_api.py +8 -10
- hyperstack/api/virtual_machine_api.py +1529 -929
- hyperstack/api/virtual_machine_events_api.py +21 -22
- hyperstack/api/vnc_url_api.py +54 -50
- hyperstack/api/volume_api.py +340 -40
- hyperstack/api/volume_attachment_api.py +342 -42
- hyperstack/api_client.py +1 -1
- hyperstack/configuration.py +1 -11
- hyperstack/models/__init__.py +76 -130
- hyperstack/models/{environment_fieldsfor_volume.py → access_token_field.py} +7 -7
- hyperstack/models/attach_volume_fields.py +6 -2
- hyperstack/models/attach_volumes_payload.py +4 -2
- hyperstack/models/{virtual_machine_usage.py → attachments_fields_for_volume.py} +13 -11
- hyperstack/models/{flavor_vm_fields.py → attributes.py} +15 -18
- hyperstack/models/auth_get_token_response_model.py +4 -6
- hyperstack/models/{future_node_model.py → beta_access_request_fields.py} +27 -25
- hyperstack/models/{create_gpu.py → beta_access_request_payload.py} +9 -11
- hyperstack/models/{create_discount_response.py → beta_access_request_response_model.py} +11 -11
- hyperstack/models/{export_billing_data_request.py → beta_access_status_item.py} +20 -23
- hyperstack/models/{get_all_discount_for_all_organization_response.py → beta_access_status_response_model.py} +15 -15
- hyperstack/models/{exclude_billing_post_response.py → billing_history.py} +13 -11
- hyperstack/models/billing_history_data_synthesis_details.py +105 -0
- hyperstack/models/{vm_usage_response.py → billing_history_fine_tuning.py} +23 -19
- hyperstack/models/billing_history_model_evalutation_details.py +105 -0
- hyperstack/models/{get_all_discounts_fields.py → billing_history_serverless_inference.py} +23 -24
- hyperstack/models/billing_history_serverless_inference_details.py +105 -0
- hyperstack/models/{billingmetricesfields.py → billing_metrices_fields.py} +4 -4
- hyperstack/models/{billingmetricesresponse.py → billing_metrices_response.py} +7 -7
- hyperstack/models/cluster_fields.py +27 -9
- hyperstack/models/{add_update_flavor_organization_payload.py → cluster_flavor_fields.py} +28 -26
- hyperstack/models/{historical_instances_fields.py → cluster_node_fields.py} +24 -22
- hyperstack/models/{internal_instance_flavor_fields.py → cluster_node_group_fields.py} +17 -17
- hyperstack/models/{create_update_policy_response_model.py → cluster_node_groups_create_response.py} +21 -11
- hyperstack/models/{create_update_permission_response_model.py → cluster_node_groups_get_response.py} +11 -11
- hyperstack/models/{auth_request_login_response_model.py → cluster_node_groups_list_response.py} +15 -11
- hyperstack/models/{contract_eligible_instance_fields.py → cluster_node_instance_fields.py} +13 -11
- hyperstack/models/{image_logos.py → cluster_nodes_list_response.py} +14 -14
- hyperstack/models/{internal_environment_fields.py → cluster_version.py} +13 -9
- hyperstack/models/cluster_versions.py +10 -2
- hyperstack/models/{future_nodes_stock_model.py → colors.py} +17 -15
- hyperstack/models/contract_discount_plan_fields.py +3 -1
- hyperstack/models/contract_instance_fields.py +7 -1
- hyperstack/models/{future_node_response_model.py → create_cluster_node_fields.py} +23 -18
- hyperstack/models/{update_gpu.py → create_cluster_node_group_payload.py} +12 -11
- hyperstack/models/create_cluster_payload.py +31 -8
- hyperstack/models/create_environment.py +1 -1
- hyperstack/models/create_instances_payload.py +7 -7
- hyperstack/models/create_profile_payload.py +1 -1
- hyperstack/models/create_snapshot_payload.py +2 -4
- hyperstack/models/create_volume_payload.py +1 -1
- hyperstack/models/data_synthesis_billing_history_details_response_schema.py +95 -0
- hyperstack/models/{deployment_fieldsforstartdeployments.py → deployment_fields_for_start_deployments.py} +4 -4
- hyperstack/models/{editlabelofanexisting_vm_payload.py → edit_label_of_an_existing_vm_payload.py} +4 -4
- hyperstack/models/environment_features.py +14 -2
- hyperstack/models/{node_stocks_payload.py → environment_fields_for_volume.py} +10 -12
- hyperstack/models/flavor_fields.py +3 -1
- hyperstack/models/{customer_fields.py → flavor_label_fields.py} +7 -7
- hyperstack/models/{getcreditandthresholdinfo.py → get_credit_and_threshold_info.py} +4 -4
- hyperstack/models/{getcreditandthresholdinfoinresponse.py → get_credit_and_threshold_info_in_response.py} +7 -7
- hyperstack/models/{region_payload.py → get_instance_logs_response.py} +7 -9
- hyperstack/models/instance_fields.py +8 -4
- hyperstack/models/instance_flavor_fields.py +13 -1
- hyperstack/models/{flavor_response.py → keypair_environment_features.py} +20 -16
- hyperstack/models/{internal_instance_keypair_fields.py → keypair_environment_fields.py} +13 -11
- hyperstack/models/keypair_fields.py +6 -2
- hyperstack/models/{lastdaycostfields.py → last_day_cost_fields.py} +4 -4
- hyperstack/models/{lastdaycostresponse.py → last_day_cost_response.py} +7 -7
- hyperstack/models/{export_billing_data_response.py → logos.py} +13 -9
- hyperstack/models/{creditrequestresponse.py → master_flavors_response.py} +14 -14
- hyperstack/models/{customer_payload.py → mfa_status_fields.py} +8 -10
- hyperstack/models/{gpu.py → mfa_status_response.py} +11 -11
- hyperstack/models/model_evaluation_billing_history_details_response_schema.py +95 -0
- hyperstack/models/{organization_thresholdfields.py → organization_threshold_fields.py} +4 -4
- hyperstack/models/{organizationthresholdupdateresponse.py → organization_threshold_update_response.py} +7 -7
- hyperstack/models/{organizationthresholdsresponse.py → organization_thresholds_response.py} +7 -7
- hyperstack/models/{logo_get_response.py → pagination.py} +12 -12
- hyperstack/models/{billing_response.py → partner_config.py} +31 -20
- hyperstack/models/payment_details_fields.py +5 -1
- hyperstack/models/{logout_payload.py → primary_color.py} +10 -8
- hyperstack/models/region_fields.py +16 -2
- hyperstack/models/{vm_usage_request_payload.py → request_instance_logs_payload.py} +8 -8
- hyperstack/models/{stock_visibility_user_payload.py → request_instance_logs_response.py} +8 -8
- hyperstack/models/{contract_billing_history.py → resource_level_billing_bucket_details_resources.py} +10 -10
- hyperstack/models/{node_response_model.py → resource_level_billing_history_resources_cluster.py} +21 -11
- hyperstack/models/resource_level_billing_history_response_attributes.py +3 -1
- hyperstack/models/{get_all_contracts_response_model.py → resource_level_bucket_billing_details_response_model.py} +11 -15
- hyperstack/models/{contract_billing_history_response_model.py → resource_level_bucket_billing_history_response_model.py} +11 -11
- hyperstack/models/resource_level_cluster_billing_details_response_model.py +95 -0
- hyperstack/models/resource_level_cluster_billing_history_response_model.py +95 -0
- hyperstack/models/{get_discount_detail_response.py → resource_level_cluster_graph_billing_details_response_model.py} +11 -11
- hyperstack/models/{organization_object_response.py → resource_level_graph_billing_details_bucket.py} +18 -14
- hyperstack/models/{update_discounts_status_payload.py → secondary_color.py} +10 -8
- hyperstack/models/{security_rules_fieldsfor_instance.py → security_rules_fields_for_instance.py} +4 -4
- hyperstack/models/serverless_inferenced_billing_history_details_response_schema.py +95 -0
- hyperstack/models/snapshot_fields.py +6 -1
- hyperstack/models/snapshot_retrieve_fields.py +29 -2
- hyperstack/models/start_deployment.py +3 -3
- hyperstack/models/{subscribeorunsubscribeupdatepayload.py → subscribe_or_unsubscribe_update_payload.py} +4 -4
- hyperstack/models/token_based_billing_history_response.py +95 -0
- hyperstack/models/{update_keypairnameresponse.py → update_keypair_name_response.py} +4 -4
- hyperstack/models/update_volume_attachment_payload.py +87 -0
- hyperstack/models/{verify_api_key_payload.py → update_volume_payload.py} +7 -7
- hyperstack/models/{stock_visibility_user_list_response.py → update_volume_response.py} +14 -16
- hyperstack/models/{auth_request_login_fields.py → uris.py} +19 -9
- hyperstack/models/{userinfopostpayload.py → user_info_post_payload.py} +4 -4
- hyperstack/models/{node_stock_response_model.py → user_organizations_response.py} +14 -14
- hyperstack/models/users_info_fields.py +3 -1
- hyperstack/models/volume_attachment_fields.py +9 -5
- hyperstack/models/volume_fields.py +14 -4
- hyperstack/models/{volume_fieldsfor_instance.py → volume_fields_for_instance.py} +4 -4
- hyperstack/models/volumes.py +17 -11
- hyperstack/models/{instances_summary_fields.py → volumes_fields.py} +33 -29
- hyperstack/models/workload_billing_history_response.py +95 -0
- {hyperstack-1.25.0a0.dist-info → hyperstack-1.41.0a0.dist-info}/METADATA +2 -2
- hyperstack-1.41.0a0.dist-info/RECORD +349 -0
- {hyperstack-1.25.0a0.dist-info → hyperstack-1.41.0a0.dist-info}/WHEEL +1 -1
- hyperstack/models/api_key_verify_fields.py +0 -93
- hyperstack/models/billing_immune_resources_response.py +0 -95
- hyperstack/models/contract_billing_history_response_attributes.py +0 -99
- hyperstack/models/contract_change_payload.py +0 -101
- hyperstack/models/contract_eligible_instances_response.py +0 -101
- hyperstack/models/contract_event_create_model.py +0 -91
- hyperstack/models/contract_resource_payload.py +0 -95
- hyperstack/models/contractl_billing_history_response_metrics.py +0 -87
- hyperstack/models/create_contract_fields.py +0 -110
- hyperstack/models/create_contract_payload.py +0 -106
- hyperstack/models/create_discounts_payload.py +0 -112
- hyperstack/models/create_update_permission_payload.py +0 -93
- hyperstack/models/create_update_policy_payload.py +0 -93
- hyperstack/models/creditrechargelimitfield.py +0 -93
- hyperstack/models/creditrechargelimitresponse.py +0 -99
- hyperstack/models/creditrequests.py +0 -96
- hyperstack/models/data.py +0 -91
- hyperstack/models/discount_entity_model.py +0 -97
- hyperstack/models/discount_fields.py +0 -100
- hyperstack/models/discount_plan_fields.py +0 -108
- hyperstack/models/discount_resource_fields.py +0 -93
- hyperstack/models/discount_resource_payload.py +0 -93
- hyperstack/models/exclude_billing_post_payload.py +0 -91
- hyperstack/models/field_change.py +0 -91
- hyperstack/models/flavor_payload.py +0 -101
- hyperstack/models/flavor_vms_response.py +0 -99
- hyperstack/models/future_node_stock_model.py +0 -93
- hyperstack/models/future_node_update_model.py +0 -98
- hyperstack/models/get_all_contract_fields.py +0 -100
- hyperstack/models/get_discount_response.py +0 -99
- hyperstack/models/get_entity_discount_detail_response.py +0 -108
- hyperstack/models/get_token_payload.py +0 -89
- hyperstack/models/get_version_response.py +0 -91
- hyperstack/models/historical_instance.py +0 -101
- hyperstack/models/infrahub_resource_object_response.py +0 -119
- hyperstack/models/insert_discount_plan_fields.py +0 -112
- hyperstack/models/internal_instance_fields.py +0 -156
- hyperstack/models/internal_instance_image_fields.py +0 -95
- hyperstack/models/internal_instances_response.py +0 -99
- hyperstack/models/internal_security_rules_fields_for_instance.py +0 -104
- hyperstack/models/internal_volume_attachment_fields.py +0 -98
- hyperstack/models/internal_volume_fields.py +0 -95
- hyperstack/models/internal_volumes_response.py +0 -99
- hyperstack/models/new_stock_update_response_model.py +0 -89
- hyperstack/models/node_model.py +0 -114
- hyperstack/models/node_payload_model.py +0 -97
- hyperstack/models/node_power_usage_model.py +0 -120
- hyperstack/models/node_stock_payload_model.py +0 -95
- hyperstack/models/organizationcreditrechargelimitresponse.py +0 -95
- hyperstack/models/power_usage_model.py +0 -89
- hyperstack/models/pricebook_resource_object_response.py +0 -107
- hyperstack/models/refresh_token_payload.py +0 -89
- hyperstack/models/region_response.py +0 -95
- hyperstack/models/set_defaults_payload.py +0 -89
- hyperstack/models/single_visibility_user_response.py +0 -91
- hyperstack/models/success_response_model.py +0 -89
- hyperstack/models/token_fields.py +0 -91
- hyperstack/models/update_contract_payload.py +0 -104
- hyperstack/models/update_discounts_payload.py +0 -102
- hyperstack/models/user_transfer_payload.py +0 -89
- hyperstack/models/verify_api_key_response_model.py +0 -95
- hyperstack/models/volume_status_change_fields.py +0 -96
- hyperstack/models/volumes_last_status_change_response.py +0 -99
- hyperstack/models/warning_mail_log_fields.py +0 -99
- hyperstack/models/warning_mail_log_response.py +0 -101
- hyperstack-1.25.0a0.dist-info/RECORD +0 -401
- {hyperstack-1.25.0a0.dist-info → hyperstack-1.41.0a0.dist-info}/top_level.txt +0 -0
|
@@ -22,13 +22,18 @@ from typing import Any, ClassVar, Dict, List, Optional
|
|
|
22
22
|
from typing import Optional, Set
|
|
23
23
|
from typing_extensions import Self
|
|
24
24
|
|
|
25
|
-
class
|
|
25
|
+
class URIs(BaseModel):
|
|
26
26
|
"""
|
|
27
|
-
|
|
27
|
+
URIs
|
|
28
28
|
""" # noqa: E501
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
api_doc: Optional[StrictStr] = None
|
|
30
|
+
api_uri: Optional[StrictStr] = None
|
|
31
|
+
auth: Optional[StrictStr] = None
|
|
32
|
+
console: Optional[StrictStr] = None
|
|
33
|
+
contact_us: Optional[StrictStr] = None
|
|
34
|
+
doc: Optional[StrictStr] = None
|
|
35
|
+
landing_page: Optional[StrictStr] = None
|
|
36
|
+
__properties: ClassVar[List[str]] = ["api_doc", "api_uri", "auth", "console", "contact_us", "doc", "landing_page"]
|
|
32
37
|
|
|
33
38
|
model_config = ConfigDict(
|
|
34
39
|
populate_by_name=True,
|
|
@@ -48,7 +53,7 @@ class AuthRequestLoginFields(BaseModel):
|
|
|
48
53
|
|
|
49
54
|
@classmethod
|
|
50
55
|
def from_json(cls, json_str: str) -> Optional[Self]:
|
|
51
|
-
"""Create an instance of
|
|
56
|
+
"""Create an instance of URIs from a JSON string"""
|
|
52
57
|
return cls.from_dict(json.loads(json_str))
|
|
53
58
|
|
|
54
59
|
def to_dict(self) -> Dict[str, Any]:
|
|
@@ -73,7 +78,7 @@ class AuthRequestLoginFields(BaseModel):
|
|
|
73
78
|
|
|
74
79
|
@classmethod
|
|
75
80
|
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
|
76
|
-
"""Create an instance of
|
|
81
|
+
"""Create an instance of URIs from a dict"""
|
|
77
82
|
if obj is None:
|
|
78
83
|
return None
|
|
79
84
|
|
|
@@ -81,8 +86,13 @@ class AuthRequestLoginFields(BaseModel):
|
|
|
81
86
|
return cls.model_validate(obj)
|
|
82
87
|
|
|
83
88
|
_obj = cls.model_validate({
|
|
84
|
-
"
|
|
85
|
-
"
|
|
89
|
+
"api_doc": obj.get("api_doc"),
|
|
90
|
+
"api_uri": obj.get("api_uri"),
|
|
91
|
+
"auth": obj.get("auth"),
|
|
92
|
+
"console": obj.get("console"),
|
|
93
|
+
"contact_us": obj.get("contact_us"),
|
|
94
|
+
"doc": obj.get("doc"),
|
|
95
|
+
"landing_page": obj.get("landing_page")
|
|
86
96
|
})
|
|
87
97
|
return _obj
|
|
88
98
|
|
|
@@ -22,9 +22,9 @@ from typing import Any, ClassVar, Dict, List, Optional
|
|
|
22
22
|
from typing import Optional, Set
|
|
23
23
|
from typing_extensions import Self
|
|
24
24
|
|
|
25
|
-
class
|
|
25
|
+
class UserInfoPostPayload(BaseModel):
|
|
26
26
|
"""
|
|
27
|
-
|
|
27
|
+
UserInfoPostPayload
|
|
28
28
|
""" # noqa: E501
|
|
29
29
|
billing_address1: Optional[StrictStr] = None
|
|
30
30
|
billing_address2: Optional[StrictStr] = None
|
|
@@ -57,7 +57,7 @@ class Userinfopostpayload(BaseModel):
|
|
|
57
57
|
|
|
58
58
|
@classmethod
|
|
59
59
|
def from_json(cls, json_str: str) -> Optional[Self]:
|
|
60
|
-
"""Create an instance of
|
|
60
|
+
"""Create an instance of UserInfoPostPayload from a JSON string"""
|
|
61
61
|
return cls.from_dict(json.loads(json_str))
|
|
62
62
|
|
|
63
63
|
def to_dict(self) -> Dict[str, Any]:
|
|
@@ -82,7 +82,7 @@ class Userinfopostpayload(BaseModel):
|
|
|
82
82
|
|
|
83
83
|
@classmethod
|
|
84
84
|
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
|
85
|
-
"""Create an instance of
|
|
85
|
+
"""Create an instance of UserInfoPostPayload from a dict"""
|
|
86
86
|
if obj is None:
|
|
87
87
|
return None
|
|
88
88
|
|
|
@@ -19,16 +19,16 @@ import json
|
|
|
19
19
|
|
|
20
20
|
from pydantic import BaseModel, ConfigDict
|
|
21
21
|
from typing import Any, ClassVar, Dict, List, Optional
|
|
22
|
-
from ..models.
|
|
22
|
+
from ..models.organization_fields import OrganizationFields
|
|
23
23
|
from typing import Optional, Set
|
|
24
24
|
from typing_extensions import Self
|
|
25
25
|
|
|
26
|
-
class
|
|
26
|
+
class UserOrganizationsResponse(BaseModel):
|
|
27
27
|
"""
|
|
28
|
-
|
|
28
|
+
UserOrganizationsResponse
|
|
29
29
|
""" # noqa: E501
|
|
30
|
-
|
|
31
|
-
__properties: ClassVar[List[str]] = ["
|
|
30
|
+
organizations: Optional[List[OrganizationFields]] = None
|
|
31
|
+
__properties: ClassVar[List[str]] = ["organizations"]
|
|
32
32
|
|
|
33
33
|
model_config = ConfigDict(
|
|
34
34
|
populate_by_name=True,
|
|
@@ -48,7 +48,7 @@ class NodeStockResponseModel(BaseModel):
|
|
|
48
48
|
|
|
49
49
|
@classmethod
|
|
50
50
|
def from_json(cls, json_str: str) -> Optional[Self]:
|
|
51
|
-
"""Create an instance of
|
|
51
|
+
"""Create an instance of UserOrganizationsResponse from a JSON string"""
|
|
52
52
|
return cls.from_dict(json.loads(json_str))
|
|
53
53
|
|
|
54
54
|
def to_dict(self) -> Dict[str, Any]:
|
|
@@ -69,18 +69,18 @@ class NodeStockResponseModel(BaseModel):
|
|
|
69
69
|
exclude=excluded_fields,
|
|
70
70
|
exclude_none=True,
|
|
71
71
|
)
|
|
72
|
-
# override the default output from pydantic by calling `to_dict()` of each item in
|
|
72
|
+
# override the default output from pydantic by calling `to_dict()` of each item in organizations (list)
|
|
73
73
|
_items = []
|
|
74
|
-
if self.
|
|
75
|
-
for
|
|
76
|
-
if
|
|
77
|
-
_items.append(
|
|
78
|
-
_dict['
|
|
74
|
+
if self.organizations:
|
|
75
|
+
for _item_organizations in self.organizations:
|
|
76
|
+
if _item_organizations:
|
|
77
|
+
_items.append(_item_organizations.to_dict())
|
|
78
|
+
_dict['organizations'] = _items
|
|
79
79
|
return _dict
|
|
80
80
|
|
|
81
81
|
@classmethod
|
|
82
82
|
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
|
83
|
-
"""Create an instance of
|
|
83
|
+
"""Create an instance of UserOrganizationsResponse from a dict"""
|
|
84
84
|
if obj is None:
|
|
85
85
|
return None
|
|
86
86
|
|
|
@@ -88,7 +88,7 @@ class NodeStockResponseModel(BaseModel):
|
|
|
88
88
|
return cls.model_validate(obj)
|
|
89
89
|
|
|
90
90
|
_obj = cls.model_validate({
|
|
91
|
-
"
|
|
91
|
+
"organizations": [OrganizationFields.from_dict(_item) for _item in obj["organizations"]] if obj.get("organizations") is not None else None
|
|
92
92
|
})
|
|
93
93
|
return _obj
|
|
94
94
|
|
|
@@ -39,9 +39,10 @@ class UsersInfoFields(BaseModel):
|
|
|
39
39
|
organization_id: Optional[StrictInt] = None
|
|
40
40
|
phone: Optional[StrictStr] = None
|
|
41
41
|
state: Optional[StrictStr] = None
|
|
42
|
+
stripe_user_id: Optional[StrictStr] = None
|
|
42
43
|
vat_number: Optional[StrictStr] = None
|
|
43
44
|
zip_code: Optional[StrictStr] = None
|
|
44
|
-
__properties: ClassVar[List[str]] = ["billing_address1", "billing_address2", "business", "company_name", "country", "created_at", "email", "id", "name", "organization_id", "phone", "state", "vat_number", "zip_code"]
|
|
45
|
+
__properties: ClassVar[List[str]] = ["billing_address1", "billing_address2", "business", "company_name", "country", "created_at", "email", "id", "name", "organization_id", "phone", "state", "stripe_user_id", "vat_number", "zip_code"]
|
|
45
46
|
|
|
46
47
|
model_config = ConfigDict(
|
|
47
48
|
populate_by_name=True,
|
|
@@ -106,6 +107,7 @@ class UsersInfoFields(BaseModel):
|
|
|
106
107
|
"organization_id": obj.get("organization_id"),
|
|
107
108
|
"phone": obj.get("phone"),
|
|
108
109
|
"state": obj.get("state"),
|
|
110
|
+
"stripe_user_id": obj.get("stripe_user_id"),
|
|
109
111
|
"vat_number": obj.get("vat_number"),
|
|
110
112
|
"zip_code": obj.get("zip_code")
|
|
111
113
|
})
|
|
@@ -18,9 +18,9 @@ import re # noqa: F401
|
|
|
18
18
|
import json
|
|
19
19
|
|
|
20
20
|
from datetime import datetime
|
|
21
|
-
from pydantic import BaseModel, ConfigDict, StrictStr
|
|
21
|
+
from pydantic import BaseModel, ConfigDict, StrictBool, StrictInt, StrictStr
|
|
22
22
|
from typing import Any, ClassVar, Dict, List, Optional
|
|
23
|
-
from ..models.
|
|
23
|
+
from ..models.volume_fields_for_instance import VolumeFieldsForInstance
|
|
24
24
|
from typing import Optional, Set
|
|
25
25
|
from typing_extensions import Self
|
|
26
26
|
|
|
@@ -30,9 +30,11 @@ class VolumeAttachmentFields(BaseModel):
|
|
|
30
30
|
""" # noqa: E501
|
|
31
31
|
created_at: Optional[datetime] = None
|
|
32
32
|
device: Optional[StrictStr] = None
|
|
33
|
+
id: Optional[StrictInt] = None
|
|
34
|
+
protected: Optional[StrictBool] = None
|
|
33
35
|
status: Optional[StrictStr] = None
|
|
34
|
-
volume: Optional[
|
|
35
|
-
__properties: ClassVar[List[str]] = ["created_at", "device", "status", "volume"]
|
|
36
|
+
volume: Optional[VolumeFieldsForInstance] = None
|
|
37
|
+
__properties: ClassVar[List[str]] = ["created_at", "device", "id", "protected", "status", "volume"]
|
|
36
38
|
|
|
37
39
|
model_config = ConfigDict(
|
|
38
40
|
populate_by_name=True,
|
|
@@ -90,8 +92,10 @@ class VolumeAttachmentFields(BaseModel):
|
|
|
90
92
|
_obj = cls.model_validate({
|
|
91
93
|
"created_at": obj.get("created_at"),
|
|
92
94
|
"device": obj.get("device"),
|
|
95
|
+
"id": obj.get("id"),
|
|
96
|
+
"protected": obj.get("protected"),
|
|
93
97
|
"status": obj.get("status"),
|
|
94
|
-
"volume":
|
|
98
|
+
"volume": VolumeFieldsForInstance.from_dict(obj["volume"]) if obj.get("volume") is not None else None
|
|
95
99
|
})
|
|
96
100
|
return _obj
|
|
97
101
|
|
|
@@ -20,7 +20,8 @@ import json
|
|
|
20
20
|
from datetime import datetime
|
|
21
21
|
from pydantic import BaseModel, ConfigDict, StrictBool, StrictInt, StrictStr
|
|
22
22
|
from typing import Any, ClassVar, Dict, List, Optional
|
|
23
|
-
from ..models.
|
|
23
|
+
from ..models.attachments_fields_for_volume import AttachmentsFieldsForVolume
|
|
24
|
+
from ..models.environment_fields_for_volume import EnvironmentFieldsForVolume
|
|
24
25
|
from typing import Optional, Set
|
|
25
26
|
from typing_extensions import Self
|
|
26
27
|
|
|
@@ -28,11 +29,12 @@ class VolumeFields(BaseModel):
|
|
|
28
29
|
"""
|
|
29
30
|
VolumeFields
|
|
30
31
|
""" # noqa: E501
|
|
32
|
+
attachments: Optional[List[AttachmentsFieldsForVolume]] = None
|
|
31
33
|
bootable: Optional[StrictBool] = None
|
|
32
34
|
callback_url: Optional[StrictStr] = None
|
|
33
35
|
created_at: Optional[datetime] = None
|
|
34
36
|
description: Optional[StrictStr] = None
|
|
35
|
-
environment: Optional[
|
|
37
|
+
environment: Optional[EnvironmentFieldsForVolume] = None
|
|
36
38
|
id: Optional[StrictInt] = None
|
|
37
39
|
image_id: Optional[StrictInt] = None
|
|
38
40
|
name: Optional[StrictStr] = None
|
|
@@ -41,7 +43,7 @@ class VolumeFields(BaseModel):
|
|
|
41
43
|
status: Optional[StrictStr] = None
|
|
42
44
|
updated_at: Optional[datetime] = None
|
|
43
45
|
volume_type: Optional[StrictStr] = None
|
|
44
|
-
__properties: ClassVar[List[str]] = ["bootable", "callback_url", "created_at", "description", "environment", "id", "image_id", "name", "os_image", "size", "status", "updated_at", "volume_type"]
|
|
46
|
+
__properties: ClassVar[List[str]] = ["attachments", "bootable", "callback_url", "created_at", "description", "environment", "id", "image_id", "name", "os_image", "size", "status", "updated_at", "volume_type"]
|
|
45
47
|
|
|
46
48
|
model_config = ConfigDict(
|
|
47
49
|
populate_by_name=True,
|
|
@@ -82,6 +84,13 @@ class VolumeFields(BaseModel):
|
|
|
82
84
|
exclude=excluded_fields,
|
|
83
85
|
exclude_none=True,
|
|
84
86
|
)
|
|
87
|
+
# override the default output from pydantic by calling `to_dict()` of each item in attachments (list)
|
|
88
|
+
_items = []
|
|
89
|
+
if self.attachments:
|
|
90
|
+
for _item_attachments in self.attachments:
|
|
91
|
+
if _item_attachments:
|
|
92
|
+
_items.append(_item_attachments.to_dict())
|
|
93
|
+
_dict['attachments'] = _items
|
|
85
94
|
# override the default output from pydantic by calling `to_dict()` of environment
|
|
86
95
|
if self.environment:
|
|
87
96
|
_dict['environment'] = self.environment.to_dict()
|
|
@@ -97,11 +106,12 @@ class VolumeFields(BaseModel):
|
|
|
97
106
|
return cls.model_validate(obj)
|
|
98
107
|
|
|
99
108
|
_obj = cls.model_validate({
|
|
109
|
+
"attachments": [AttachmentsFieldsForVolume.from_dict(_item) for _item in obj["attachments"]] if obj.get("attachments") is not None else None,
|
|
100
110
|
"bootable": obj.get("bootable"),
|
|
101
111
|
"callback_url": obj.get("callback_url"),
|
|
102
112
|
"created_at": obj.get("created_at"),
|
|
103
113
|
"description": obj.get("description"),
|
|
104
|
-
"environment":
|
|
114
|
+
"environment": EnvironmentFieldsForVolume.from_dict(obj["environment"]) if obj.get("environment") is not None else None,
|
|
105
115
|
"id": obj.get("id"),
|
|
106
116
|
"image_id": obj.get("image_id"),
|
|
107
117
|
"name": obj.get("name"),
|
|
@@ -22,9 +22,9 @@ from typing import Any, ClassVar, Dict, List, Optional
|
|
|
22
22
|
from typing import Optional, Set
|
|
23
23
|
from typing_extensions import Self
|
|
24
24
|
|
|
25
|
-
class
|
|
25
|
+
class VolumeFieldsForInstance(BaseModel):
|
|
26
26
|
"""
|
|
27
|
-
|
|
27
|
+
VolumeFieldsForInstance
|
|
28
28
|
""" # noqa: E501
|
|
29
29
|
bootable: Optional[StrictBool] = None
|
|
30
30
|
description: Optional[StrictStr] = None
|
|
@@ -52,7 +52,7 @@ class VolumeFieldsforInstance(BaseModel):
|
|
|
52
52
|
|
|
53
53
|
@classmethod
|
|
54
54
|
def from_json(cls, json_str: str) -> Optional[Self]:
|
|
55
|
-
"""Create an instance of
|
|
55
|
+
"""Create an instance of VolumeFieldsForInstance from a JSON string"""
|
|
56
56
|
return cls.from_dict(json.loads(json_str))
|
|
57
57
|
|
|
58
58
|
def to_dict(self) -> Dict[str, Any]:
|
|
@@ -77,7 +77,7 @@ class VolumeFieldsforInstance(BaseModel):
|
|
|
77
77
|
|
|
78
78
|
@classmethod
|
|
79
79
|
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
|
80
|
-
"""Create an instance of
|
|
80
|
+
"""Create an instance of VolumeFieldsForInstance from a dict"""
|
|
81
81
|
if obj is None:
|
|
82
82
|
return None
|
|
83
83
|
|
hyperstack/models/volumes.py
CHANGED
|
@@ -17,9 +17,9 @@ import pprint
|
|
|
17
17
|
import re # noqa: F401
|
|
18
18
|
import json
|
|
19
19
|
|
|
20
|
-
from pydantic import BaseModel, ConfigDict, StrictBool, StrictStr
|
|
20
|
+
from pydantic import BaseModel, ConfigDict, StrictBool, StrictInt, StrictStr
|
|
21
21
|
from typing import Any, ClassVar, Dict, List, Optional
|
|
22
|
-
from ..models.
|
|
22
|
+
from ..models.volumes_fields import VolumesFields
|
|
23
23
|
from typing import Optional, Set
|
|
24
24
|
from typing_extensions import Self
|
|
25
25
|
|
|
@@ -27,10 +27,13 @@ class Volumes(BaseModel):
|
|
|
27
27
|
"""
|
|
28
28
|
Volumes
|
|
29
29
|
""" # noqa: E501
|
|
30
|
+
count: Optional[StrictInt] = None
|
|
30
31
|
message: Optional[StrictStr] = None
|
|
32
|
+
page: Optional[StrictInt] = None
|
|
33
|
+
page_size: Optional[StrictInt] = None
|
|
31
34
|
status: Optional[StrictBool] = None
|
|
32
|
-
|
|
33
|
-
__properties: ClassVar[List[str]] = ["message", "status", "
|
|
35
|
+
volumes: Optional[List[VolumesFields]] = None
|
|
36
|
+
__properties: ClassVar[List[str]] = ["count", "message", "page", "page_size", "status", "volumes"]
|
|
34
37
|
|
|
35
38
|
model_config = ConfigDict(
|
|
36
39
|
populate_by_name=True,
|
|
@@ -71,13 +74,13 @@ class Volumes(BaseModel):
|
|
|
71
74
|
exclude=excluded_fields,
|
|
72
75
|
exclude_none=True,
|
|
73
76
|
)
|
|
74
|
-
# override the default output from pydantic by calling `to_dict()` of each item in
|
|
77
|
+
# override the default output from pydantic by calling `to_dict()` of each item in volumes (list)
|
|
75
78
|
_items = []
|
|
76
|
-
if self.
|
|
77
|
-
for
|
|
78
|
-
if
|
|
79
|
-
_items.append(
|
|
80
|
-
_dict['
|
|
79
|
+
if self.volumes:
|
|
80
|
+
for _item_volumes in self.volumes:
|
|
81
|
+
if _item_volumes:
|
|
82
|
+
_items.append(_item_volumes.to_dict())
|
|
83
|
+
_dict['volumes'] = _items
|
|
81
84
|
return _dict
|
|
82
85
|
|
|
83
86
|
@classmethod
|
|
@@ -90,9 +93,12 @@ class Volumes(BaseModel):
|
|
|
90
93
|
return cls.model_validate(obj)
|
|
91
94
|
|
|
92
95
|
_obj = cls.model_validate({
|
|
96
|
+
"count": obj.get("count"),
|
|
93
97
|
"message": obj.get("message"),
|
|
98
|
+
"page": obj.get("page"),
|
|
99
|
+
"page_size": obj.get("page_size"),
|
|
94
100
|
"status": obj.get("status"),
|
|
95
|
-
"
|
|
101
|
+
"volumes": [VolumesFields.from_dict(_item) for _item in obj["volumes"]] if obj.get("volumes") is not None else None
|
|
96
102
|
})
|
|
97
103
|
return _obj
|
|
98
104
|
|
|
@@ -18,33 +18,31 @@ import re # noqa: F401
|
|
|
18
18
|
import json
|
|
19
19
|
|
|
20
20
|
from datetime import datetime
|
|
21
|
-
from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
|
|
21
|
+
from pydantic import BaseModel, ConfigDict, StrictBool, StrictInt, StrictStr
|
|
22
22
|
from typing import Any, ClassVar, Dict, List, Optional
|
|
23
|
+
from ..models.attachments_fields_for_volume import AttachmentsFieldsForVolume
|
|
24
|
+
from ..models.environment_fields_for_volume import EnvironmentFieldsForVolume
|
|
23
25
|
from typing import Optional, Set
|
|
24
26
|
from typing_extensions import Self
|
|
25
27
|
|
|
26
|
-
class
|
|
28
|
+
class VolumesFields(BaseModel):
|
|
27
29
|
"""
|
|
28
|
-
|
|
30
|
+
VolumesFields
|
|
29
31
|
""" # noqa: E501
|
|
32
|
+
attachments: Optional[List[AttachmentsFieldsForVolume]] = None
|
|
33
|
+
bootable: Optional[StrictBool] = None
|
|
34
|
+
callback_url: Optional[StrictStr] = None
|
|
30
35
|
created_at: Optional[datetime] = None
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
fixed_ip: Optional[StrictStr] = None
|
|
34
|
-
flavor: Optional[StrictStr] = None
|
|
35
|
-
flavor_id: Optional[StrictInt] = None
|
|
36
|
-
floating_ip: Optional[StrictStr] = None
|
|
37
|
-
floating_ip_status: Optional[StrictStr] = None
|
|
36
|
+
description: Optional[StrictStr] = None
|
|
37
|
+
environment: Optional[EnvironmentFieldsForVolume] = None
|
|
38
38
|
id: Optional[StrictInt] = None
|
|
39
|
-
image: Optional[StrictStr] = None
|
|
40
39
|
image_id: Optional[StrictInt] = None
|
|
41
|
-
keypair: Optional[StrictStr] = None
|
|
42
|
-
keypair_id: Optional[StrictInt] = None
|
|
43
40
|
name: Optional[StrictStr] = None
|
|
44
|
-
|
|
41
|
+
size: Optional[StrictInt] = None
|
|
45
42
|
status: Optional[StrictStr] = None
|
|
46
43
|
updated_at: Optional[datetime] = None
|
|
47
|
-
|
|
44
|
+
volume_type: Optional[StrictStr] = None
|
|
45
|
+
__properties: ClassVar[List[str]] = ["attachments", "bootable", "callback_url", "created_at", "description", "environment", "id", "image_id", "name", "size", "status", "updated_at", "volume_type"]
|
|
48
46
|
|
|
49
47
|
model_config = ConfigDict(
|
|
50
48
|
populate_by_name=True,
|
|
@@ -64,7 +62,7 @@ class InstancesSummaryFields(BaseModel):
|
|
|
64
62
|
|
|
65
63
|
@classmethod
|
|
66
64
|
def from_json(cls, json_str: str) -> Optional[Self]:
|
|
67
|
-
"""Create an instance of
|
|
65
|
+
"""Create an instance of VolumesFields from a JSON string"""
|
|
68
66
|
return cls.from_dict(json.loads(json_str))
|
|
69
67
|
|
|
70
68
|
def to_dict(self) -> Dict[str, Any]:
|
|
@@ -85,11 +83,21 @@ class InstancesSummaryFields(BaseModel):
|
|
|
85
83
|
exclude=excluded_fields,
|
|
86
84
|
exclude_none=True,
|
|
87
85
|
)
|
|
86
|
+
# override the default output from pydantic by calling `to_dict()` of each item in attachments (list)
|
|
87
|
+
_items = []
|
|
88
|
+
if self.attachments:
|
|
89
|
+
for _item_attachments in self.attachments:
|
|
90
|
+
if _item_attachments:
|
|
91
|
+
_items.append(_item_attachments.to_dict())
|
|
92
|
+
_dict['attachments'] = _items
|
|
93
|
+
# override the default output from pydantic by calling `to_dict()` of environment
|
|
94
|
+
if self.environment:
|
|
95
|
+
_dict['environment'] = self.environment.to_dict()
|
|
88
96
|
return _dict
|
|
89
97
|
|
|
90
98
|
@classmethod
|
|
91
99
|
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
|
92
|
-
"""Create an instance of
|
|
100
|
+
"""Create an instance of VolumesFields from a dict"""
|
|
93
101
|
if obj is None:
|
|
94
102
|
return None
|
|
95
103
|
|
|
@@ -97,23 +105,19 @@ class InstancesSummaryFields(BaseModel):
|
|
|
97
105
|
return cls.model_validate(obj)
|
|
98
106
|
|
|
99
107
|
_obj = cls.model_validate({
|
|
108
|
+
"attachments": [AttachmentsFieldsForVolume.from_dict(_item) for _item in obj["attachments"]] if obj.get("attachments") is not None else None,
|
|
109
|
+
"bootable": obj.get("bootable"),
|
|
110
|
+
"callback_url": obj.get("callback_url"),
|
|
100
111
|
"created_at": obj.get("created_at"),
|
|
101
|
-
"
|
|
102
|
-
"
|
|
103
|
-
"fixed_ip": obj.get("fixed_ip"),
|
|
104
|
-
"flavor": obj.get("flavor"),
|
|
105
|
-
"flavor_id": obj.get("flavor_id"),
|
|
106
|
-
"floating_ip": obj.get("floating_ip"),
|
|
107
|
-
"floating_ip_status": obj.get("floating_ip_status"),
|
|
112
|
+
"description": obj.get("description"),
|
|
113
|
+
"environment": EnvironmentFieldsForVolume.from_dict(obj["environment"]) if obj.get("environment") is not None else None,
|
|
108
114
|
"id": obj.get("id"),
|
|
109
|
-
"image": obj.get("image"),
|
|
110
115
|
"image_id": obj.get("image_id"),
|
|
111
|
-
"keypair": obj.get("keypair"),
|
|
112
|
-
"keypair_id": obj.get("keypair_id"),
|
|
113
116
|
"name": obj.get("name"),
|
|
114
|
-
"
|
|
117
|
+
"size": obj.get("size"),
|
|
115
118
|
"status": obj.get("status"),
|
|
116
|
-
"updated_at": obj.get("updated_at")
|
|
119
|
+
"updated_at": obj.get("updated_at"),
|
|
120
|
+
"volume_type": obj.get("volume_type")
|
|
117
121
|
})
|
|
118
122
|
return _obj
|
|
119
123
|
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
Infrahub-API
|
|
5
|
+
|
|
6
|
+
Leverage the Infrahub API and Hyperstack platform to easily create, manage, and scale powerful GPU virtual machines and their associated resources. Access this SDK to automate the deployment of your workloads and streamline your infrastructure management. To contribute, please raise an issue with a bug report, feature request, feedback, or general inquiry.
|
|
7
|
+
|
|
8
|
+
The version of the OpenAPI document: 1.0
|
|
9
|
+
Generated by OpenAPI Generator (https://openapi-generator.tech)
|
|
10
|
+
|
|
11
|
+
Do not edit the class manually.
|
|
12
|
+
""" # noqa: E501
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
import pprint
|
|
17
|
+
import re # noqa: F401
|
|
18
|
+
import json
|
|
19
|
+
|
|
20
|
+
from pydantic import BaseModel, ConfigDict, StrictBool, StrictStr
|
|
21
|
+
from typing import Any, ClassVar, Dict, List, Optional
|
|
22
|
+
from ..models.billing_history_fine_tuning import BillingHistoryFineTuning
|
|
23
|
+
from typing import Optional, Set
|
|
24
|
+
from typing_extensions import Self
|
|
25
|
+
|
|
26
|
+
class WorkloadBillingHistoryResponse(BaseModel):
|
|
27
|
+
"""
|
|
28
|
+
WorkloadBillingHistoryResponse
|
|
29
|
+
""" # noqa: E501
|
|
30
|
+
billing_history_fine_tuning: Optional[BillingHistoryFineTuning] = None
|
|
31
|
+
message: Optional[StrictStr] = None
|
|
32
|
+
success: Optional[StrictBool] = None
|
|
33
|
+
__properties: ClassVar[List[str]] = ["billing_history_fine_tuning", "message", "success"]
|
|
34
|
+
|
|
35
|
+
model_config = ConfigDict(
|
|
36
|
+
populate_by_name=True,
|
|
37
|
+
validate_assignment=True,
|
|
38
|
+
protected_namespaces=(),
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def to_str(self) -> str:
|
|
43
|
+
"""Returns the string representation of the model using alias"""
|
|
44
|
+
return pprint.pformat(self.model_dump(by_alias=True))
|
|
45
|
+
|
|
46
|
+
def to_json(self) -> str:
|
|
47
|
+
"""Returns the JSON representation of the model using alias"""
|
|
48
|
+
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
|
|
49
|
+
return json.dumps(self.to_dict())
|
|
50
|
+
|
|
51
|
+
@classmethod
|
|
52
|
+
def from_json(cls, json_str: str) -> Optional[Self]:
|
|
53
|
+
"""Create an instance of WorkloadBillingHistoryResponse from a JSON string"""
|
|
54
|
+
return cls.from_dict(json.loads(json_str))
|
|
55
|
+
|
|
56
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
57
|
+
"""Return the dictionary representation of the model using alias.
|
|
58
|
+
|
|
59
|
+
This has the following differences from calling pydantic's
|
|
60
|
+
`self.model_dump(by_alias=True)`:
|
|
61
|
+
|
|
62
|
+
* `None` is only added to the output dict for nullable fields that
|
|
63
|
+
were set at model initialization. Other fields with value `None`
|
|
64
|
+
are ignored.
|
|
65
|
+
"""
|
|
66
|
+
excluded_fields: Set[str] = set([
|
|
67
|
+
])
|
|
68
|
+
|
|
69
|
+
_dict = self.model_dump(
|
|
70
|
+
by_alias=True,
|
|
71
|
+
exclude=excluded_fields,
|
|
72
|
+
exclude_none=True,
|
|
73
|
+
)
|
|
74
|
+
# override the default output from pydantic by calling `to_dict()` of billing_history_fine_tuning
|
|
75
|
+
if self.billing_history_fine_tuning:
|
|
76
|
+
_dict['billing_history_fine_tuning'] = self.billing_history_fine_tuning.to_dict()
|
|
77
|
+
return _dict
|
|
78
|
+
|
|
79
|
+
@classmethod
|
|
80
|
+
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
|
81
|
+
"""Create an instance of WorkloadBillingHistoryResponse from a dict"""
|
|
82
|
+
if obj is None:
|
|
83
|
+
return None
|
|
84
|
+
|
|
85
|
+
if not isinstance(obj, dict):
|
|
86
|
+
return cls.model_validate(obj)
|
|
87
|
+
|
|
88
|
+
_obj = cls.model_validate({
|
|
89
|
+
"billing_history_fine_tuning": BillingHistoryFineTuning.from_dict(obj["billing_history_fine_tuning"]) if obj.get("billing_history_fine_tuning") is not None else None,
|
|
90
|
+
"message": obj.get("message"),
|
|
91
|
+
"success": obj.get("success")
|
|
92
|
+
})
|
|
93
|
+
return _obj
|
|
94
|
+
|
|
95
|
+
|