waldur-api-client 7.7.9__py3-none-any.whl → 7.8.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of waldur-api-client might be problematic. Click here for more details.

Files changed (108) hide show
  1. waldur_api_client/api/marketplace_course_accounts/marketplace_course_accounts_count.py +96 -0
  2. waldur_api_client/api/marketplace_course_accounts/marketplace_course_accounts_list.py +96 -0
  3. waldur_api_client/api/marketplace_offering_user_checklist_completions/__init__.py +1 -0
  4. waldur_api_client/api/marketplace_offering_user_checklist_completions/marketplace_offering_user_checklist_completions_count.py +286 -0
  5. waldur_api_client/api/marketplace_offering_user_checklist_completions/marketplace_offering_user_checklist_completions_list.py +289 -0
  6. waldur_api_client/api/{rancher_clusters/rancher_clusters_create.py → marketplace_offering_user_checklist_completions/marketplace_offering_user_checklist_completions_retrieve.py} +29 -38
  7. waldur_api_client/api/marketplace_offering_users/marketplace_offering_users_count.py +15 -0
  8. waldur_api_client/api/marketplace_offering_users/marketplace_offering_users_list.py +15 -0
  9. waldur_api_client/api/{rancher_clusters/rancher_clusters_destroy.py → marketplace_orders/marketplace_orders_delete_attachment.py} +6 -4
  10. waldur_api_client/api/marketplace_orders/marketplace_orders_update_attachment.py +168 -0
  11. waldur_api_client/api/marketplace_provider_offerings/marketplace_provider_offerings_component_stats_list.py +15 -0
  12. waldur_api_client/api/marketplace_provider_offerings/marketplace_provider_offerings_costs_list.py +15 -0
  13. waldur_api_client/api/marketplace_provider_offerings/marketplace_provider_offerings_count.py +15 -0
  14. waldur_api_client/api/marketplace_provider_offerings/marketplace_provider_offerings_customers_list.py +15 -0
  15. waldur_api_client/api/marketplace_provider_offerings/marketplace_provider_offerings_groups_count.py +15 -0
  16. waldur_api_client/api/marketplace_provider_offerings/marketplace_provider_offerings_groups_list.py +15 -0
  17. waldur_api_client/api/marketplace_provider_offerings/marketplace_provider_offerings_list.py +15 -0
  18. waldur_api_client/api/marketplace_provider_offerings/marketplace_provider_offerings_list_course_accounts_retrieve.py +177 -0
  19. waldur_api_client/api/marketplace_provider_offerings/marketplace_provider_offerings_refresh_offering_usernames.py +0 -22
  20. waldur_api_client/api/marketplace_provider_offerings/marketplace_provider_offerings_update_compliance_checklist.py +105 -0
  21. waldur_api_client/api/marketplace_public_offerings/marketplace_public_offerings_count.py +15 -0
  22. waldur_api_client/api/marketplace_public_offerings/marketplace_public_offerings_list.py +15 -0
  23. waldur_api_client/api/marketplace_service_providers/marketplace_service_providers_course_accounts_list.py +98 -0
  24. waldur_api_client/api/marketplace_service_providers/marketplace_service_providers_offerings_list.py +15 -0
  25. waldur_api_client/api/user_invitations/user_invitations_count.py +15 -0
  26. waldur_api_client/api/user_invitations/user_invitations_list.py +15 -0
  27. waldur_api_client/models/__init__.py +34 -6
  28. waldur_api_client/models/booking_offerings_list_field_item.py +1 -0
  29. waldur_api_client/models/booking_offerings_retrieve_field_item.py +1 -0
  30. waldur_api_client/models/booking_resource.py +18 -0
  31. waldur_api_client/models/booking_resources_list_field_item.py +2 -0
  32. waldur_api_client/models/booking_resources_retrieve_field_item.py +2 -0
  33. waldur_api_client/models/country_enum.py +211 -0
  34. waldur_api_client/models/course_account.py +24 -0
  35. waldur_api_client/models/customer_request.py +9 -0
  36. waldur_api_client/models/deployment_mode_enum.py +9 -0
  37. waldur_api_client/models/group_invitation.py +8 -0
  38. waldur_api_client/models/identity_provider.py +57 -0
  39. waldur_api_client/models/identity_provider_request.py +57 -0
  40. waldur_api_client/models/invitation.py +8 -0
  41. waldur_api_client/models/issue.py +8 -17
  42. waldur_api_client/models/issue_request.py +8 -17
  43. waldur_api_client/models/issue_type_enum.py +4 -4
  44. waldur_api_client/models/managed_rancher_cluster_resources_list_field_item.py +2 -0
  45. waldur_api_client/models/managed_rancher_cluster_resources_retrieve_field_item.py +2 -0
  46. waldur_api_client/models/marketplace_course_accounts_count_o_item.py +23 -0
  47. waldur_api_client/models/marketplace_course_accounts_list_o_item.py +23 -0
  48. waldur_api_client/models/marketplace_offering_user_checklist_completions_count_o_item.py +11 -0
  49. waldur_api_client/models/marketplace_offering_user_checklist_completions_list_o_item.py +11 -0
  50. waldur_api_client/models/marketplace_offering_users_list_field_item.py +2 -0
  51. waldur_api_client/models/marketplace_offering_users_retrieve_field_item.py +2 -0
  52. waldur_api_client/models/marketplace_orders_list_field_item.py +5 -0
  53. waldur_api_client/models/marketplace_orders_retrieve_field_item.py +5 -0
  54. waldur_api_client/models/marketplace_provider_offerings_list_course_accounts_retrieve_field_item.py +72 -0
  55. waldur_api_client/models/marketplace_provider_resources_details_retrieve_field_item.py +2 -0
  56. waldur_api_client/models/marketplace_provider_resources_list_field_item.py +2 -0
  57. waldur_api_client/models/marketplace_provider_resources_retrieve_field_item.py +2 -0
  58. waldur_api_client/models/marketplace_public_offerings_list_field_item.py +1 -0
  59. waldur_api_client/models/marketplace_public_offerings_retrieve_field_item.py +1 -0
  60. waldur_api_client/models/marketplace_resources_details_retrieve_field_item.py +2 -0
  61. waldur_api_client/models/marketplace_resources_list_field_item.py +2 -0
  62. waldur_api_client/models/marketplace_resources_retrieve_field_item.py +2 -0
  63. waldur_api_client/models/marketplace_service_providers_course_accounts_list_o_item.py +23 -0
  64. waldur_api_client/models/merged_plugin_options.py +36 -0
  65. waldur_api_client/models/merged_plugin_options_request.py +36 -0
  66. waldur_api_client/models/notification.py +11 -0
  67. waldur_api_client/models/notification_context_fields.py +47 -0
  68. waldur_api_client/models/offering.py +9 -0
  69. waldur_api_client/models/offering_compliance_checklist_update_request.py +82 -0
  70. waldur_api_client/models/offering_create.py +9 -8
  71. waldur_api_client/models/offering_create_request.py +9 -0
  72. waldur_api_client/models/offering_overview_update_request.py +9 -0
  73. waldur_api_client/models/offering_terms_of_service.py +42 -1
  74. waldur_api_client/models/offering_user.py +18 -0
  75. waldur_api_client/models/open_stack_tenant_create_order_attributes.py +0 -18
  76. waldur_api_client/models/open_stack_tenant_request.py +18 -0
  77. waldur_api_client/models/order_attachment.py +71 -0
  78. waldur_api_client/models/order_attachment_request.py +84 -0
  79. waldur_api_client/models/order_create.py +58 -16
  80. waldur_api_client/models/order_create_request.py +44 -62
  81. waldur_api_client/models/order_details.py +99 -16
  82. waldur_api_client/models/patched_customer_request.py +9 -0
  83. waldur_api_client/models/patched_identity_provider_request.py +58 -0
  84. waldur_api_client/models/patched_project_request.py +9 -0
  85. waldur_api_client/models/patched_protected_call_request.py +9 -0
  86. waldur_api_client/models/patched_protected_round_request.py +2 -2
  87. waldur_api_client/models/patched_service_provider_request.py +9 -0
  88. waldur_api_client/models/patched_user_request.py +9 -0
  89. waldur_api_client/models/project_request.py +9 -0
  90. waldur_api_client/models/protected_call_request.py +9 -0
  91. waldur_api_client/models/protected_round.py +2 -2
  92. waldur_api_client/models/protected_round_request.py +2 -2
  93. waldur_api_client/models/public_offering_details.py +9 -0
  94. waldur_api_client/models/rancher_cluster_request.py +1 -48
  95. waldur_api_client/models/resource.py +18 -0
  96. waldur_api_client/models/resource_update_limits_request.py +23 -1
  97. waldur_api_client/models/service_provider_request.py +9 -0
  98. waldur_api_client/models/user_checklist_completion.py +265 -0
  99. waldur_api_client/models/user_consent_info.py +86 -0
  100. waldur_api_client/models/user_request.py +9 -0
  101. waldur_api_client/models/visible_invitation_details.py +8 -0
  102. {waldur_api_client-7.7.9.dist-info → waldur_api_client-7.8.1.dist-info}/METADATA +4 -2
  103. {waldur_api_client-7.7.9.dist-info → waldur_api_client-7.8.1.dist-info}/RECORD +105 -89
  104. {waldur_api_client-7.7.9.dist-info → waldur_api_client-7.8.1.dist-info}/WHEEL +1 -1
  105. waldur_api_client/models/marketplace_managed_rancher_create_order_attributes.py +0 -144
  106. waldur_api_client/models/marketplace_rancher_create_order_attributes.py +0 -145
  107. waldur_api_client/models/provider_offering_details_request.py +0 -398
  108. {waldur_api_client-7.7.9.dist-info → waldur_api_client-7.8.1.dist-info/licenses}/LICENSE +0 -0
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: poetry-core 2.1.3
2
+ Generator: poetry-core 2.2.1
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
@@ -1,144 +0,0 @@
1
- from collections.abc import Mapping
2
- from typing import Any, TypeVar, Union
3
- from uuid import UUID
4
-
5
- from attrs import define as _attrs_define
6
- from attrs import field as _attrs_field
7
-
8
- from ..types import UNSET, Unset
9
-
10
- T = TypeVar("T", bound="MarketplaceManagedRancherCreateOrderAttributes")
11
-
12
-
13
- @_attrs_define
14
- class MarketplaceManagedRancherCreateOrderAttributes:
15
- """
16
- Attributes:
17
- name (str): Unique identifier for the cluster
18
- worker_nodes_count (int):
19
- worker_nodes_flavor_name (str):
20
- worker_nodes_data_volume_size (int): Data volume size for worker nodes in MB (consistent with OpenStack)
21
- worker_nodes_data_volume_type_name (Union[Unset, str]):
22
- openstack_offering_uuid_list (Union[Unset, list[UUID]]): List of UUID of OpenStack offerings where tenant can be
23
- created
24
- install_longhorn (Union[Unset, bool]): Longhorn is a distributed block storage deployed on top of Kubernetes
25
- cluster Default: False.
26
- worker_nodes_longhorn_volume_size (Union[Unset, int]): Longhorn storage volume size for worker nodes in MB
27
- (consistent with OpenStack)
28
- worker_nodes_longhorn_volume_type_name (Union[Unset, str]):
29
- """
30
-
31
- name: str
32
- worker_nodes_count: int
33
- worker_nodes_flavor_name: str
34
- worker_nodes_data_volume_size: int
35
- worker_nodes_data_volume_type_name: Union[Unset, str] = UNSET
36
- openstack_offering_uuid_list: Union[Unset, list[UUID]] = UNSET
37
- install_longhorn: Union[Unset, bool] = False
38
- worker_nodes_longhorn_volume_size: Union[Unset, int] = UNSET
39
- worker_nodes_longhorn_volume_type_name: Union[Unset, str] = UNSET
40
- additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
41
-
42
- def to_dict(self) -> dict[str, Any]:
43
- name = self.name
44
-
45
- worker_nodes_count = self.worker_nodes_count
46
-
47
- worker_nodes_flavor_name = self.worker_nodes_flavor_name
48
-
49
- worker_nodes_data_volume_size = self.worker_nodes_data_volume_size
50
-
51
- worker_nodes_data_volume_type_name = self.worker_nodes_data_volume_type_name
52
-
53
- openstack_offering_uuid_list: Union[Unset, list[str]] = UNSET
54
- if not isinstance(self.openstack_offering_uuid_list, Unset):
55
- openstack_offering_uuid_list = []
56
- for openstack_offering_uuid_list_item_data in self.openstack_offering_uuid_list:
57
- openstack_offering_uuid_list_item = str(openstack_offering_uuid_list_item_data)
58
- openstack_offering_uuid_list.append(openstack_offering_uuid_list_item)
59
-
60
- install_longhorn = self.install_longhorn
61
-
62
- worker_nodes_longhorn_volume_size = self.worker_nodes_longhorn_volume_size
63
-
64
- worker_nodes_longhorn_volume_type_name = self.worker_nodes_longhorn_volume_type_name
65
-
66
- field_dict: dict[str, Any] = {}
67
- field_dict.update(self.additional_properties)
68
- field_dict.update(
69
- {
70
- "name": name,
71
- "worker_nodes_count": worker_nodes_count,
72
- "worker_nodes_flavor_name": worker_nodes_flavor_name,
73
- "worker_nodes_data_volume_size": worker_nodes_data_volume_size,
74
- }
75
- )
76
- if worker_nodes_data_volume_type_name is not UNSET:
77
- field_dict["worker_nodes_data_volume_type_name"] = worker_nodes_data_volume_type_name
78
- if openstack_offering_uuid_list is not UNSET:
79
- field_dict["openstack_offering_uuid_list"] = openstack_offering_uuid_list
80
- if install_longhorn is not UNSET:
81
- field_dict["install_longhorn"] = install_longhorn
82
- if worker_nodes_longhorn_volume_size is not UNSET:
83
- field_dict["worker_nodes_longhorn_volume_size"] = worker_nodes_longhorn_volume_size
84
- if worker_nodes_longhorn_volume_type_name is not UNSET:
85
- field_dict["worker_nodes_longhorn_volume_type_name"] = worker_nodes_longhorn_volume_type_name
86
-
87
- return field_dict
88
-
89
- @classmethod
90
- def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
91
- d = dict(src_dict)
92
- name = d.pop("name")
93
-
94
- worker_nodes_count = d.pop("worker_nodes_count")
95
-
96
- worker_nodes_flavor_name = d.pop("worker_nodes_flavor_name")
97
-
98
- worker_nodes_data_volume_size = d.pop("worker_nodes_data_volume_size")
99
-
100
- worker_nodes_data_volume_type_name = d.pop("worker_nodes_data_volume_type_name", UNSET)
101
-
102
- openstack_offering_uuid_list = []
103
- _openstack_offering_uuid_list = d.pop("openstack_offering_uuid_list", UNSET)
104
- for openstack_offering_uuid_list_item_data in _openstack_offering_uuid_list or []:
105
- openstack_offering_uuid_list_item = UUID(openstack_offering_uuid_list_item_data)
106
-
107
- openstack_offering_uuid_list.append(openstack_offering_uuid_list_item)
108
-
109
- install_longhorn = d.pop("install_longhorn", UNSET)
110
-
111
- worker_nodes_longhorn_volume_size = d.pop("worker_nodes_longhorn_volume_size", UNSET)
112
-
113
- worker_nodes_longhorn_volume_type_name = d.pop("worker_nodes_longhorn_volume_type_name", UNSET)
114
-
115
- marketplace_managed_rancher_create_order_attributes = cls(
116
- name=name,
117
- worker_nodes_count=worker_nodes_count,
118
- worker_nodes_flavor_name=worker_nodes_flavor_name,
119
- worker_nodes_data_volume_size=worker_nodes_data_volume_size,
120
- worker_nodes_data_volume_type_name=worker_nodes_data_volume_type_name,
121
- openstack_offering_uuid_list=openstack_offering_uuid_list,
122
- install_longhorn=install_longhorn,
123
- worker_nodes_longhorn_volume_size=worker_nodes_longhorn_volume_size,
124
- worker_nodes_longhorn_volume_type_name=worker_nodes_longhorn_volume_type_name,
125
- )
126
-
127
- marketplace_managed_rancher_create_order_attributes.additional_properties = d
128
- return marketplace_managed_rancher_create_order_attributes
129
-
130
- @property
131
- def additional_keys(self) -> list[str]:
132
- return list(self.additional_properties.keys())
133
-
134
- def __getitem__(self, key: str) -> Any:
135
- return self.additional_properties[key]
136
-
137
- def __setitem__(self, key: str, value: Any) -> None:
138
- self.additional_properties[key] = value
139
-
140
- def __delitem__(self, key: str) -> None:
141
- del self.additional_properties[key]
142
-
143
- def __contains__(self, key: str) -> bool:
144
- return key in self.additional_properties
@@ -1,145 +0,0 @@
1
- from collections.abc import Mapping
2
- from typing import TYPE_CHECKING, Any, TypeVar, Union, cast
3
-
4
- from attrs import define as _attrs_define
5
- from attrs import field as _attrs_field
6
-
7
- from ..types import UNSET, Unset
8
-
9
- if TYPE_CHECKING:
10
- from ..models.rancher_nested_node_request import RancherNestedNodeRequest
11
-
12
-
13
- T = TypeVar("T", bound="MarketplaceRancherCreateOrderAttributes")
14
-
15
-
16
- @_attrs_define
17
- class MarketplaceRancherCreateOrderAttributes:
18
- """This mixin allows to specify list of fields to be rendered by serializer.
19
- It expects that request is available in serializer's context.
20
-
21
- It is disabled for nested serializers (where parent is another serializer)
22
- but remains active for list views (where parent is a ListSerializer).
23
-
24
- Attributes:
25
- name (str):
26
- nodes (list['RancherNestedNodeRequest']):
27
- description (Union[Unset, str]):
28
- tenant (Union[Unset, str]):
29
- ssh_public_key (Union[Unset, str]):
30
- install_longhorn (Union[Unset, bool]): Longhorn is a distributed block storage deployed on top of Kubernetes
31
- cluster Default: False.
32
- vm_project (Union[None, Unset, str]):
33
- """
34
-
35
- name: str
36
- nodes: list["RancherNestedNodeRequest"]
37
- description: Union[Unset, str] = UNSET
38
- tenant: Union[Unset, str] = UNSET
39
- ssh_public_key: Union[Unset, str] = UNSET
40
- install_longhorn: Union[Unset, bool] = False
41
- vm_project: Union[None, Unset, str] = UNSET
42
- additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
43
-
44
- def to_dict(self) -> dict[str, Any]:
45
- name = self.name
46
-
47
- nodes = []
48
- for nodes_item_data in self.nodes:
49
- nodes_item = nodes_item_data.to_dict()
50
- nodes.append(nodes_item)
51
-
52
- description = self.description
53
-
54
- tenant = self.tenant
55
-
56
- ssh_public_key = self.ssh_public_key
57
-
58
- install_longhorn = self.install_longhorn
59
-
60
- vm_project: Union[None, Unset, str]
61
- if isinstance(self.vm_project, Unset):
62
- vm_project = UNSET
63
- else:
64
- vm_project = self.vm_project
65
-
66
- field_dict: dict[str, Any] = {}
67
- field_dict.update(self.additional_properties)
68
- field_dict.update(
69
- {
70
- "name": name,
71
- "nodes": nodes,
72
- }
73
- )
74
- if description is not UNSET:
75
- field_dict["description"] = description
76
- if tenant is not UNSET:
77
- field_dict["tenant"] = tenant
78
- if ssh_public_key is not UNSET:
79
- field_dict["ssh_public_key"] = ssh_public_key
80
- if install_longhorn is not UNSET:
81
- field_dict["install_longhorn"] = install_longhorn
82
- if vm_project is not UNSET:
83
- field_dict["vm_project"] = vm_project
84
-
85
- return field_dict
86
-
87
- @classmethod
88
- def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
89
- from ..models.rancher_nested_node_request import RancherNestedNodeRequest
90
-
91
- d = dict(src_dict)
92
- name = d.pop("name")
93
-
94
- nodes = []
95
- _nodes = d.pop("nodes")
96
- for nodes_item_data in _nodes:
97
- nodes_item = RancherNestedNodeRequest.from_dict(nodes_item_data)
98
-
99
- nodes.append(nodes_item)
100
-
101
- description = d.pop("description", UNSET)
102
-
103
- tenant = d.pop("tenant", UNSET)
104
-
105
- ssh_public_key = d.pop("ssh_public_key", UNSET)
106
-
107
- install_longhorn = d.pop("install_longhorn", UNSET)
108
-
109
- def _parse_vm_project(data: object) -> Union[None, Unset, str]:
110
- if data is None:
111
- return data
112
- if isinstance(data, Unset):
113
- return data
114
- return cast(Union[None, Unset, str], data)
115
-
116
- vm_project = _parse_vm_project(d.pop("vm_project", UNSET))
117
-
118
- marketplace_rancher_create_order_attributes = cls(
119
- name=name,
120
- nodes=nodes,
121
- description=description,
122
- tenant=tenant,
123
- ssh_public_key=ssh_public_key,
124
- install_longhorn=install_longhorn,
125
- vm_project=vm_project,
126
- )
127
-
128
- marketplace_rancher_create_order_attributes.additional_properties = d
129
- return marketplace_rancher_create_order_attributes
130
-
131
- @property
132
- def additional_keys(self) -> list[str]:
133
- return list(self.additional_properties.keys())
134
-
135
- def __getitem__(self, key: str) -> Any:
136
- return self.additional_properties[key]
137
-
138
- def __setitem__(self, key: str, value: Any) -> None:
139
- self.additional_properties[key] = value
140
-
141
- def __delitem__(self, key: str) -> None:
142
- del self.additional_properties[key]
143
-
144
- def __contains__(self, key: str) -> bool:
145
- return key in self.additional_properties
@@ -1,398 +0,0 @@
1
- from collections.abc import Mapping
2
- from io import BytesIO
3
- from typing import TYPE_CHECKING, Any, TypeVar, Union, cast
4
-
5
- from attrs import define as _attrs_define
6
- from attrs import field as _attrs_field
7
-
8
- from .. import types
9
- from ..models.blank_enum import BlankEnum
10
- from ..models.country_enum import CountryEnum
11
- from ..types import UNSET, File, Unset
12
-
13
- if TYPE_CHECKING:
14
- from ..models.base_provider_plan_request import BaseProviderPlanRequest
15
- from ..models.offering_component_request import OfferingComponentRequest
16
-
17
-
18
- T = TypeVar("T", bound="ProviderOfferingDetailsRequest")
19
-
20
-
21
- @_attrs_define
22
- class ProviderOfferingDetailsRequest:
23
- """
24
- Attributes:
25
- name (str):
26
- category (str):
27
- type_ (str):
28
- description (Union[Unset, str]):
29
- full_description (Union[Unset, str]):
30
- privacy_policy_link (Union[Unset, str]):
31
- access_url (Union[Unset, str]): Publicly accessible offering access URL
32
- customer (Union[None, Unset, str]):
33
- attributes (Union[Unset, Any]):
34
- components (Union[Unset, list['OfferingComponentRequest']]):
35
- vendor_details (Union[Unset, str]):
36
- getting_started (Union[Unset, str]):
37
- integration_guide (Union[Unset, str]):
38
- thumbnail (Union[File, None, Unset]):
39
- plans (Union[Unset, list['BaseProviderPlanRequest']]):
40
- shared (Union[Unset, bool]): Accessible to all customers.
41
- billable (Union[Unset, bool]): Purchase and usage is invoiced.
42
- datacite_doi (Union[Unset, str]):
43
- latitude (Union[None, Unset, float]):
44
- longitude (Union[None, Unset, float]):
45
- country (Union[BlankEnum, CountryEnum, Unset]):
46
- backend_id (Union[Unset, str]):
47
- image (Union[File, None, Unset]):
48
- backend_metadata (Union[Unset, Any]):
49
- """
50
-
51
- name: str
52
- category: str
53
- type_: str
54
- description: Union[Unset, str] = UNSET
55
- full_description: Union[Unset, str] = UNSET
56
- privacy_policy_link: Union[Unset, str] = UNSET
57
- access_url: Union[Unset, str] = UNSET
58
- customer: Union[None, Unset, str] = UNSET
59
- attributes: Union[Unset, Any] = UNSET
60
- components: Union[Unset, list["OfferingComponentRequest"]] = UNSET
61
- vendor_details: Union[Unset, str] = UNSET
62
- getting_started: Union[Unset, str] = UNSET
63
- integration_guide: Union[Unset, str] = UNSET
64
- thumbnail: Union[File, None, Unset] = UNSET
65
- plans: Union[Unset, list["BaseProviderPlanRequest"]] = UNSET
66
- shared: Union[Unset, bool] = UNSET
67
- billable: Union[Unset, bool] = UNSET
68
- datacite_doi: Union[Unset, str] = UNSET
69
- latitude: Union[None, Unset, float] = UNSET
70
- longitude: Union[None, Unset, float] = UNSET
71
- country: Union[BlankEnum, CountryEnum, Unset] = UNSET
72
- backend_id: Union[Unset, str] = UNSET
73
- image: Union[File, None, Unset] = UNSET
74
- backend_metadata: Union[Unset, Any] = UNSET
75
- additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
76
-
77
- def to_dict(self) -> dict[str, Any]:
78
- name = self.name
79
-
80
- category = self.category
81
-
82
- type_ = self.type_
83
-
84
- description = self.description
85
-
86
- full_description = self.full_description
87
-
88
- privacy_policy_link = self.privacy_policy_link
89
-
90
- access_url = self.access_url
91
-
92
- customer: Union[None, Unset, str]
93
- if isinstance(self.customer, Unset):
94
- customer = UNSET
95
- else:
96
- customer = self.customer
97
-
98
- attributes = self.attributes
99
-
100
- components: Union[Unset, list[dict[str, Any]]] = UNSET
101
- if not isinstance(self.components, Unset):
102
- components = []
103
- for components_item_data in self.components:
104
- components_item = components_item_data.to_dict()
105
- components.append(components_item)
106
-
107
- vendor_details = self.vendor_details
108
-
109
- getting_started = self.getting_started
110
-
111
- integration_guide = self.integration_guide
112
-
113
- thumbnail: Union[None, Unset, types.FileTypes]
114
- if isinstance(self.thumbnail, Unset):
115
- thumbnail = UNSET
116
- elif isinstance(self.thumbnail, File):
117
- thumbnail = self.thumbnail.to_tuple()
118
-
119
- else:
120
- thumbnail = self.thumbnail
121
-
122
- plans: Union[Unset, list[dict[str, Any]]] = UNSET
123
- if not isinstance(self.plans, Unset):
124
- plans = []
125
- for plans_item_data in self.plans:
126
- plans_item = plans_item_data.to_dict()
127
- plans.append(plans_item)
128
-
129
- shared = self.shared
130
-
131
- billable = self.billable
132
-
133
- datacite_doi = self.datacite_doi
134
-
135
- latitude: Union[None, Unset, float]
136
- if isinstance(self.latitude, Unset):
137
- latitude = UNSET
138
- else:
139
- latitude = self.latitude
140
-
141
- longitude: Union[None, Unset, float]
142
- if isinstance(self.longitude, Unset):
143
- longitude = UNSET
144
- else:
145
- longitude = self.longitude
146
-
147
- country: Union[Unset, str]
148
- if isinstance(self.country, Unset):
149
- country = UNSET
150
- elif isinstance(self.country, CountryEnum):
151
- country = self.country.value
152
- else:
153
- country = self.country.value
154
-
155
- backend_id = self.backend_id
156
-
157
- image: Union[None, Unset, types.FileTypes]
158
- if isinstance(self.image, Unset):
159
- image = UNSET
160
- elif isinstance(self.image, File):
161
- image = self.image.to_tuple()
162
-
163
- else:
164
- image = self.image
165
-
166
- backend_metadata = self.backend_metadata
167
-
168
- field_dict: dict[str, Any] = {}
169
- field_dict.update(self.additional_properties)
170
- field_dict.update(
171
- {
172
- "name": name,
173
- "category": category,
174
- "type": type_,
175
- }
176
- )
177
- if description is not UNSET:
178
- field_dict["description"] = description
179
- if full_description is not UNSET:
180
- field_dict["full_description"] = full_description
181
- if privacy_policy_link is not UNSET:
182
- field_dict["privacy_policy_link"] = privacy_policy_link
183
- if access_url is not UNSET:
184
- field_dict["access_url"] = access_url
185
- if customer is not UNSET:
186
- field_dict["customer"] = customer
187
- if attributes is not UNSET:
188
- field_dict["attributes"] = attributes
189
- if components is not UNSET:
190
- field_dict["components"] = components
191
- if vendor_details is not UNSET:
192
- field_dict["vendor_details"] = vendor_details
193
- if getting_started is not UNSET:
194
- field_dict["getting_started"] = getting_started
195
- if integration_guide is not UNSET:
196
- field_dict["integration_guide"] = integration_guide
197
- if thumbnail is not UNSET:
198
- field_dict["thumbnail"] = thumbnail
199
- if plans is not UNSET:
200
- field_dict["plans"] = plans
201
- if shared is not UNSET:
202
- field_dict["shared"] = shared
203
- if billable is not UNSET:
204
- field_dict["billable"] = billable
205
- if datacite_doi is not UNSET:
206
- field_dict["datacite_doi"] = datacite_doi
207
- if latitude is not UNSET:
208
- field_dict["latitude"] = latitude
209
- if longitude is not UNSET:
210
- field_dict["longitude"] = longitude
211
- if country is not UNSET:
212
- field_dict["country"] = country
213
- if backend_id is not UNSET:
214
- field_dict["backend_id"] = backend_id
215
- if image is not UNSET:
216
- field_dict["image"] = image
217
- if backend_metadata is not UNSET:
218
- field_dict["backend_metadata"] = backend_metadata
219
-
220
- return field_dict
221
-
222
- @classmethod
223
- def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
224
- from ..models.base_provider_plan_request import BaseProviderPlanRequest
225
- from ..models.offering_component_request import OfferingComponentRequest
226
-
227
- d = dict(src_dict)
228
- name = d.pop("name")
229
-
230
- category = d.pop("category")
231
-
232
- type_ = d.pop("type")
233
-
234
- description = d.pop("description", UNSET)
235
-
236
- full_description = d.pop("full_description", UNSET)
237
-
238
- privacy_policy_link = d.pop("privacy_policy_link", UNSET)
239
-
240
- access_url = d.pop("access_url", UNSET)
241
-
242
- def _parse_customer(data: object) -> Union[None, Unset, str]:
243
- if data is None:
244
- return data
245
- if isinstance(data, Unset):
246
- return data
247
- return cast(Union[None, Unset, str], data)
248
-
249
- customer = _parse_customer(d.pop("customer", UNSET))
250
-
251
- attributes = d.pop("attributes", UNSET)
252
-
253
- components = []
254
- _components = d.pop("components", UNSET)
255
- for components_item_data in _components or []:
256
- components_item = OfferingComponentRequest.from_dict(components_item_data)
257
-
258
- components.append(components_item)
259
-
260
- vendor_details = d.pop("vendor_details", UNSET)
261
-
262
- getting_started = d.pop("getting_started", UNSET)
263
-
264
- integration_guide = d.pop("integration_guide", UNSET)
265
-
266
- def _parse_thumbnail(data: object) -> Union[File, None, Unset]:
267
- if data is None:
268
- return data
269
- if isinstance(data, Unset):
270
- return data
271
- try:
272
- if not isinstance(data, bytes):
273
- raise TypeError()
274
- thumbnail_type_0 = File(payload=BytesIO(data))
275
-
276
- return thumbnail_type_0
277
- except: # noqa: E722
278
- pass
279
- return cast(Union[File, None, Unset], data)
280
-
281
- thumbnail = _parse_thumbnail(d.pop("thumbnail", UNSET))
282
-
283
- plans = []
284
- _plans = d.pop("plans", UNSET)
285
- for plans_item_data in _plans or []:
286
- plans_item = BaseProviderPlanRequest.from_dict(plans_item_data)
287
-
288
- plans.append(plans_item)
289
-
290
- shared = d.pop("shared", UNSET)
291
-
292
- billable = d.pop("billable", UNSET)
293
-
294
- datacite_doi = d.pop("datacite_doi", UNSET)
295
-
296
- def _parse_latitude(data: object) -> Union[None, Unset, float]:
297
- if data is None:
298
- return data
299
- if isinstance(data, Unset):
300
- return data
301
- return cast(Union[None, Unset, float], data)
302
-
303
- latitude = _parse_latitude(d.pop("latitude", UNSET))
304
-
305
- def _parse_longitude(data: object) -> Union[None, Unset, float]:
306
- if data is None:
307
- return data
308
- if isinstance(data, Unset):
309
- return data
310
- return cast(Union[None, Unset, float], data)
311
-
312
- longitude = _parse_longitude(d.pop("longitude", UNSET))
313
-
314
- def _parse_country(data: object) -> Union[BlankEnum, CountryEnum, Unset]:
315
- if isinstance(data, Unset):
316
- return data
317
- try:
318
- if not isinstance(data, str):
319
- raise TypeError()
320
- country_type_0 = CountryEnum(data)
321
-
322
- return country_type_0
323
- except: # noqa: E722
324
- pass
325
- if not isinstance(data, str):
326
- raise TypeError()
327
- country_type_1 = BlankEnum(data)
328
-
329
- return country_type_1
330
-
331
- country = _parse_country(d.pop("country", UNSET))
332
-
333
- backend_id = d.pop("backend_id", UNSET)
334
-
335
- def _parse_image(data: object) -> Union[File, None, Unset]:
336
- if data is None:
337
- return data
338
- if isinstance(data, Unset):
339
- return data
340
- try:
341
- if not isinstance(data, bytes):
342
- raise TypeError()
343
- image_type_0 = File(payload=BytesIO(data))
344
-
345
- return image_type_0
346
- except: # noqa: E722
347
- pass
348
- return cast(Union[File, None, Unset], data)
349
-
350
- image = _parse_image(d.pop("image", UNSET))
351
-
352
- backend_metadata = d.pop("backend_metadata", UNSET)
353
-
354
- provider_offering_details_request = cls(
355
- name=name,
356
- category=category,
357
- type_=type_,
358
- description=description,
359
- full_description=full_description,
360
- privacy_policy_link=privacy_policy_link,
361
- access_url=access_url,
362
- customer=customer,
363
- attributes=attributes,
364
- components=components,
365
- vendor_details=vendor_details,
366
- getting_started=getting_started,
367
- integration_guide=integration_guide,
368
- thumbnail=thumbnail,
369
- plans=plans,
370
- shared=shared,
371
- billable=billable,
372
- datacite_doi=datacite_doi,
373
- latitude=latitude,
374
- longitude=longitude,
375
- country=country,
376
- backend_id=backend_id,
377
- image=image,
378
- backend_metadata=backend_metadata,
379
- )
380
-
381
- provider_offering_details_request.additional_properties = d
382
- return provider_offering_details_request
383
-
384
- @property
385
- def additional_keys(self) -> list[str]:
386
- return list(self.additional_properties.keys())
387
-
388
- def __getitem__(self, key: str) -> Any:
389
- return self.additional_properties[key]
390
-
391
- def __setitem__(self, key: str, value: Any) -> None:
392
- self.additional_properties[key] = value
393
-
394
- def __delitem__(self, key: str) -> None:
395
- del self.additional_properties[key]
396
-
397
- def __contains__(self, key: str) -> bool:
398
- return key in self.additional_properties