waldur-api-client 7.8.1__py3-none-any.whl → 7.8.2__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 (169) hide show
  1. waldur_api_client/api/booking_resources/booking_resources_count.py +10 -13
  2. waldur_api_client/api/booking_resources/booking_resources_list.py +10 -13
  3. waldur_api_client/api/call_managing_organisations/call_managing_organisations_create.py +44 -7
  4. waldur_api_client/api/call_managing_organisations/call_managing_organisations_partial_update.py +46 -7
  5. waldur_api_client/api/call_managing_organisations/call_managing_organisations_update.py +44 -7
  6. waldur_api_client/api/checklists_admin/checklists_admin_checklist_questions.py +49 -0
  7. waldur_api_client/api/checklists_admin/checklists_admin_count.py +43 -0
  8. waldur_api_client/api/checklists_admin/checklists_admin_list.py +43 -0
  9. waldur_api_client/api/checklists_admin_categories/checklists_admin_categories_create.py +44 -7
  10. waldur_api_client/api/checklists_admin_categories/checklists_admin_categories_partial_update.py +44 -7
  11. waldur_api_client/api/checklists_admin_categories/checklists_admin_categories_update.py +44 -7
  12. waldur_api_client/api/customers/customers_create.py +44 -7
  13. waldur_api_client/api/customers/customers_partial_update.py +44 -7
  14. waldur_api_client/api/customers/customers_update.py +44 -7
  15. waldur_api_client/api/external_links/external_links_create.py +44 -7
  16. waldur_api_client/api/external_links/external_links_partial_update.py +44 -7
  17. waldur_api_client/api/external_links/external_links_update.py +44 -7
  18. waldur_api_client/api/invoices/invoices_paid.py +44 -7
  19. waldur_api_client/api/marketplace_categories/marketplace_categories_create.py +44 -7
  20. waldur_api_client/api/marketplace_categories/marketplace_categories_partial_update.py +44 -7
  21. waldur_api_client/api/marketplace_categories/marketplace_categories_update.py +44 -7
  22. waldur_api_client/api/marketplace_category_groups/marketplace_category_groups_create.py +44 -7
  23. waldur_api_client/api/marketplace_category_groups/marketplace_category_groups_partial_update.py +44 -7
  24. waldur_api_client/api/marketplace_category_groups/marketplace_category_groups_update.py +44 -7
  25. waldur_api_client/api/marketplace_offering_files/marketplace_offering_files_create.py +44 -7
  26. waldur_api_client/api/marketplace_orders/marketplace_orders_update_attachment.py +44 -7
  27. waldur_api_client/api/marketplace_provider_offerings/marketplace_provider_offerings_create.py +44 -7
  28. waldur_api_client/api/marketplace_provider_offerings/marketplace_provider_offerings_update_image.py +44 -7
  29. waldur_api_client/api/marketplace_provider_offerings/marketplace_provider_offerings_update_thumbnail.py +30 -5
  30. waldur_api_client/api/marketplace_provider_resources/marketplace_provider_resources_count.py +10 -13
  31. waldur_api_client/api/marketplace_provider_resources/marketplace_provider_resources_list.py +10 -13
  32. waldur_api_client/api/marketplace_resources/marketplace_resources_count.py +10 -13
  33. waldur_api_client/api/marketplace_resources/marketplace_resources_list.py +10 -13
  34. waldur_api_client/api/marketplace_screenshots/marketplace_screenshots_create.py +44 -7
  35. waldur_api_client/api/marketplace_screenshots/marketplace_screenshots_update.py +44 -7
  36. waldur_api_client/api/marketplace_service_providers/marketplace_service_providers_create.py +44 -7
  37. waldur_api_client/api/marketplace_service_providers/marketplace_service_providers_partial_update.py +44 -7
  38. waldur_api_client/api/marketplace_service_providers/marketplace_service_providers_update.py +44 -7
  39. waldur_api_client/api/override_settings/override_settings.py +30 -5
  40. waldur_api_client/api/payments/payments_create.py +44 -7
  41. waldur_api_client/api/payments/payments_partial_update.py +44 -7
  42. waldur_api_client/api/payments/payments_update.py +44 -7
  43. waldur_api_client/api/projects/projects_create.py +44 -7
  44. waldur_api_client/api/projects/projects_partial_update.py +44 -7
  45. waldur_api_client/api/projects/projects_update.py +44 -7
  46. waldur_api_client/api/proposal_proposals/proposal_proposals_attach_document.py +30 -5
  47. waldur_api_client/api/slurm_jobs/slurm_jobs_create.py +44 -7
  48. waldur_api_client/api/slurm_jobs/slurm_jobs_update.py +44 -7
  49. waldur_api_client/api/support_attachments/support_attachments_create.py +44 -7
  50. waldur_api_client/api/user_group_invitations/user_group_invitations_count.py +15 -0
  51. waldur_api_client/api/user_group_invitations/user_group_invitations_list.py +15 -0
  52. waldur_api_client/api/users/users_create.py +44 -7
  53. waldur_api_client/api/users/users_partial_update.py +44 -7
  54. waldur_api_client/api/users/users_update.py +44 -7
  55. waldur_api_client/models/__init__.py +146 -2
  56. waldur_api_client/models/agent_type_enum.py +13 -0
  57. waldur_api_client/models/attachment_request_form.py +70 -0
  58. waldur_api_client/models/attachment_request_multipart.py +83 -0
  59. waldur_api_client/models/booking_offerings_list_field_item.py +1 -0
  60. waldur_api_client/models/booking_offerings_retrieve_field_item.py +1 -0
  61. waldur_api_client/models/call_managing_organisation_request_form.py +103 -0
  62. waldur_api_client/models/call_managing_organisation_request_multipart.py +122 -0
  63. waldur_api_client/models/call_round.py +11 -1
  64. waldur_api_client/models/category_group_request_form.py +103 -0
  65. waldur_api_client/models/category_group_request_multipart.py +122 -0
  66. waldur_api_client/models/checklist_category_request_form.py +103 -0
  67. waldur_api_client/models/checklist_category_request_multipart.py +122 -0
  68. waldur_api_client/models/checklists_admin_checklist_questions_checklist_type.py +11 -0
  69. waldur_api_client/models/checklists_admin_checklist_questions_checklist_type_in_item.py +11 -0
  70. waldur_api_client/models/checklists_admin_count_checklist_type.py +11 -0
  71. waldur_api_client/models/checklists_admin_count_checklist_type_in_item.py +11 -0
  72. waldur_api_client/models/checklists_admin_list_checklist_type.py +11 -0
  73. waldur_api_client/models/checklists_admin_list_checklist_type_in_item.py +11 -0
  74. waldur_api_client/models/constance_settings.py +9 -0
  75. waldur_api_client/models/constance_settings_request.py +9 -0
  76. waldur_api_client/models/constance_settings_request_form.py +1547 -0
  77. waldur_api_client/models/constance_settings_request_multipart.py +2173 -0
  78. waldur_api_client/models/customer.py +9 -0
  79. waldur_api_client/models/customer_request.py +9 -0
  80. waldur_api_client/models/customer_request_form.py +312 -0
  81. waldur_api_client/models/customer_request_multipart.py +394 -0
  82. waldur_api_client/models/customers_list_field_item.py +1 -0
  83. waldur_api_client/models/customers_retrieve_field_item.py +1 -0
  84. waldur_api_client/models/external_link_request_form.py +111 -0
  85. waldur_api_client/models/external_link_request_multipart.py +132 -0
  86. waldur_api_client/models/firecrest_job_request_form.py +104 -0
  87. waldur_api_client/models/firecrest_job_request_multipart.py +127 -0
  88. waldur_api_client/models/integration_status.py +21 -4
  89. waldur_api_client/models/marketplace_category_request_form.py +153 -0
  90. waldur_api_client/models/marketplace_category_request_multipart.py +187 -0
  91. waldur_api_client/models/marketplace_provider_offerings_list_course_accounts_retrieve_field_item.py +1 -0
  92. waldur_api_client/models/marketplace_provider_offerings_list_customer_service_accounts_retrieve_field_item.py +1 -0
  93. waldur_api_client/models/marketplace_provider_offerings_list_field_item.py +1 -0
  94. waldur_api_client/models/marketplace_provider_offerings_list_project_service_accounts_retrieve_field_item.py +1 -0
  95. waldur_api_client/models/marketplace_provider_offerings_retrieve_field_item.py +1 -0
  96. waldur_api_client/models/marketplace_provider_offerings_stats_retrieve_field_item.py +1 -0
  97. waldur_api_client/models/marketplace_provider_offerings_user_has_resource_access_retrieve_field_item.py +1 -0
  98. waldur_api_client/models/marketplace_public_offerings_list_field_item.py +1 -0
  99. waldur_api_client/models/marketplace_public_offerings_retrieve_field_item.py +1 -0
  100. waldur_api_client/models/marketplace_service_providers_offerings_list_field_item.py +1 -0
  101. waldur_api_client/models/nested_round.py +9 -0
  102. waldur_api_client/models/nested_round_request.py +9 -0
  103. waldur_api_client/models/offering.py +20 -0
  104. waldur_api_client/models/offering_create.py +20 -0
  105. waldur_api_client/models/offering_create_request.py +20 -0
  106. waldur_api_client/models/offering_create_request_form.py +479 -0
  107. waldur_api_client/models/offering_create_request_form_limits.py +57 -0
  108. waldur_api_client/models/offering_create_request_multipart.py +599 -0
  109. waldur_api_client/models/offering_create_request_multipart_limits.py +57 -0
  110. waldur_api_client/models/offering_file_request_form.py +78 -0
  111. waldur_api_client/models/offering_file_request_multipart.py +93 -0
  112. waldur_api_client/models/offering_image_request_form.py +62 -0
  113. waldur_api_client/models/offering_image_request_multipart.py +73 -0
  114. waldur_api_client/models/offering_thumbnail_request_form.py +62 -0
  115. waldur_api_client/models/offering_thumbnail_request_multipart.py +73 -0
  116. waldur_api_client/models/offering_user.py +5 -5
  117. waldur_api_client/models/{offering_user_state_enum.py → offering_user_state.py} +1 -1
  118. waldur_api_client/models/order_attachment_request_form.py +84 -0
  119. waldur_api_client/models/order_attachment_request_multipart.py +98 -0
  120. waldur_api_client/models/paid_request_form.py +81 -0
  121. waldur_api_client/models/paid_request_multipart.py +94 -0
  122. waldur_api_client/models/patched_call_managing_organisation_request_form.py +92 -0
  123. waldur_api_client/models/patched_call_managing_organisation_request_multipart.py +109 -0
  124. waldur_api_client/models/patched_category_group_request_form.py +101 -0
  125. waldur_api_client/models/patched_category_group_request_multipart.py +121 -0
  126. waldur_api_client/models/patched_checklist_category_request_form.py +102 -0
  127. waldur_api_client/models/patched_checklist_category_request_multipart.py +122 -0
  128. waldur_api_client/models/patched_customer_request.py +9 -0
  129. waldur_api_client/models/patched_customer_request_form.py +310 -0
  130. waldur_api_client/models/patched_customer_request_multipart.py +393 -0
  131. waldur_api_client/models/patched_external_link_request_form.py +110 -0
  132. waldur_api_client/models/patched_external_link_request_multipart.py +133 -0
  133. waldur_api_client/models/patched_marketplace_category_request_form.py +151 -0
  134. waldur_api_client/models/patched_marketplace_category_request_multipart.py +186 -0
  135. waldur_api_client/models/patched_payment_request_form.py +119 -0
  136. waldur_api_client/models/patched_payment_request_multipart.py +142 -0
  137. waldur_api_client/models/patched_project_request_form.py +279 -0
  138. waldur_api_client/models/patched_project_request_multipart.py +342 -0
  139. waldur_api_client/models/patched_service_provider_request_form.py +101 -0
  140. waldur_api_client/models/patched_service_provider_request_multipart.py +121 -0
  141. waldur_api_client/models/patched_user_request_form.py +241 -0
  142. waldur_api_client/models/patched_user_request_multipart.py +306 -0
  143. waldur_api_client/models/payment_request_form.py +113 -0
  144. waldur_api_client/models/payment_request_multipart.py +134 -0
  145. waldur_api_client/models/project_request_form.py +280 -0
  146. waldur_api_client/models/project_request_multipart.py +341 -0
  147. waldur_api_client/models/project_user.py +9 -0
  148. waldur_api_client/models/proposal.py +8 -0
  149. waldur_api_client/models/proposal_documentation_request_form.py +84 -0
  150. waldur_api_client/models/proposal_documentation_request_multipart.py +98 -0
  151. waldur_api_client/models/proposal_proposals_count_o_item.py +3 -1
  152. waldur_api_client/models/proposal_proposals_list_o_item.py +3 -1
  153. waldur_api_client/models/proposal_review.py +40 -0
  154. waldur_api_client/models/protected_proposal_list.py +8 -0
  155. waldur_api_client/models/protected_proposal_list_request.py +8 -0
  156. waldur_api_client/models/protected_round.py +8 -0
  157. waldur_api_client/models/provider_offering.py +21 -1
  158. waldur_api_client/models/provider_offering_details.py +20 -0
  159. waldur_api_client/models/public_offering_details.py +20 -0
  160. waldur_api_client/models/screenshot_request_form.py +87 -0
  161. waldur_api_client/models/screenshot_request_multipart.py +105 -0
  162. waldur_api_client/models/service_provider_request_form.py +112 -0
  163. waldur_api_client/models/service_provider_request_multipart.py +134 -0
  164. waldur_api_client/models/user_request_form.py +250 -0
  165. waldur_api_client/models/user_request_multipart.py +316 -0
  166. {waldur_api_client-7.8.1.dist-info → waldur_api_client-7.8.2.dist-info}/METADATA +1 -1
  167. {waldur_api_client-7.8.1.dist-info → waldur_api_client-7.8.2.dist-info}/RECORD +169 -98
  168. {waldur_api_client-7.8.1.dist-info → waldur_api_client-7.8.2.dist-info}/WHEEL +0 -0
  169. {waldur_api_client-7.8.1.dist-info → waldur_api_client-7.8.2.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,599 @@
1
+ import json
2
+ from collections.abc import Mapping
3
+ from io import BytesIO
4
+ from typing import TYPE_CHECKING, Any, TypeVar, Union, cast
5
+
6
+ from attrs import define as _attrs_define
7
+ from attrs import field as _attrs_field
8
+
9
+ from .. import types
10
+ from ..models.blank_enum import BlankEnum
11
+ from ..models.country_enum import CountryEnum
12
+ from ..types import UNSET, File, Unset
13
+
14
+ if TYPE_CHECKING:
15
+ from ..models.base_provider_plan_request import BaseProviderPlanRequest
16
+ from ..models.offering_component_request import OfferingComponentRequest
17
+ from ..models.offering_create_request_multipart_limits import OfferingCreateRequestMultipartLimits
18
+ from ..models.offering_options_request import OfferingOptionsRequest
19
+
20
+
21
+ T = TypeVar("T", bound="OfferingCreateRequestMultipart")
22
+
23
+
24
+ @_attrs_define
25
+ class OfferingCreateRequestMultipart:
26
+ """
27
+ Attributes:
28
+ name (str):
29
+ category (str):
30
+ type_ (str):
31
+ slug (Union[Unset, str]):
32
+ description (Union[Unset, str]):
33
+ full_description (Union[Unset, str]):
34
+ privacy_policy_link (Union[Unset, str]):
35
+ access_url (Union[Unset, str]): Publicly accessible offering access URL
36
+ customer (Union[None, Unset, str]):
37
+ attributes (Union[Unset, Any]):
38
+ options (Union[Unset, OfferingOptionsRequest]):
39
+ resource_options (Union[Unset, OfferingOptionsRequest]):
40
+ components (Union[Unset, list['OfferingComponentRequest']]):
41
+ vendor_details (Union[Unset, str]):
42
+ getting_started (Union[Unset, str]):
43
+ integration_guide (Union[Unset, str]):
44
+ thumbnail (Union[File, None, Unset]):
45
+ plans (Union[Unset, list['BaseProviderPlanRequest']]):
46
+ shared (Union[Unset, bool]): Accessible to all customers.
47
+ billable (Union[Unset, bool]): Purchase and usage is invoiced.
48
+ datacite_doi (Union[Unset, str]):
49
+ latitude (Union[None, Unset, float]):
50
+ longitude (Union[None, Unset, float]):
51
+ country (Union[BlankEnum, CountryEnum, Unset]):
52
+ backend_id (Union[Unset, str]):
53
+ image (Union[File, None, Unset]):
54
+ backend_metadata (Union[Unset, Any]):
55
+ compliance_checklist (Union[None, Unset, str]):
56
+ limits (Union[Unset, OfferingCreateRequestMultipartLimits]):
57
+ """
58
+
59
+ name: str
60
+ category: str
61
+ type_: str
62
+ slug: Union[Unset, str] = UNSET
63
+ description: Union[Unset, str] = UNSET
64
+ full_description: Union[Unset, str] = UNSET
65
+ privacy_policy_link: Union[Unset, str] = UNSET
66
+ access_url: Union[Unset, str] = UNSET
67
+ customer: Union[None, Unset, str] = UNSET
68
+ attributes: Union[Unset, Any] = UNSET
69
+ options: Union[Unset, "OfferingOptionsRequest"] = UNSET
70
+ resource_options: Union[Unset, "OfferingOptionsRequest"] = UNSET
71
+ components: Union[Unset, list["OfferingComponentRequest"]] = UNSET
72
+ vendor_details: Union[Unset, str] = UNSET
73
+ getting_started: Union[Unset, str] = UNSET
74
+ integration_guide: Union[Unset, str] = UNSET
75
+ thumbnail: Union[File, None, Unset] = UNSET
76
+ plans: Union[Unset, list["BaseProviderPlanRequest"]] = UNSET
77
+ shared: Union[Unset, bool] = UNSET
78
+ billable: Union[Unset, bool] = UNSET
79
+ datacite_doi: Union[Unset, str] = UNSET
80
+ latitude: Union[None, Unset, float] = UNSET
81
+ longitude: Union[None, Unset, float] = UNSET
82
+ country: Union[BlankEnum, CountryEnum, Unset] = UNSET
83
+ backend_id: Union[Unset, str] = UNSET
84
+ image: Union[File, None, Unset] = UNSET
85
+ backend_metadata: Union[Unset, Any] = UNSET
86
+ compliance_checklist: Union[None, Unset, str] = UNSET
87
+ limits: Union[Unset, "OfferingCreateRequestMultipartLimits"] = UNSET
88
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
89
+
90
+ def to_dict(self) -> dict[str, Any]:
91
+ name = self.name
92
+
93
+ category = self.category
94
+
95
+ type_ = self.type_
96
+
97
+ slug = self.slug
98
+
99
+ description = self.description
100
+
101
+ full_description = self.full_description
102
+
103
+ privacy_policy_link = self.privacy_policy_link
104
+
105
+ access_url = self.access_url
106
+
107
+ customer: Union[None, Unset, str]
108
+ if isinstance(self.customer, Unset):
109
+ customer = UNSET
110
+ else:
111
+ customer = self.customer
112
+
113
+ attributes = self.attributes
114
+
115
+ options: Union[Unset, dict[str, Any]] = UNSET
116
+ if not isinstance(self.options, Unset):
117
+ options = self.options.to_dict()
118
+
119
+ resource_options: Union[Unset, dict[str, Any]] = UNSET
120
+ if not isinstance(self.resource_options, Unset):
121
+ resource_options = self.resource_options.to_dict()
122
+
123
+ components: Union[Unset, list[dict[str, Any]]] = UNSET
124
+ if not isinstance(self.components, Unset):
125
+ components = []
126
+ for components_item_data in self.components:
127
+ components_item = components_item_data.to_dict()
128
+ components.append(components_item)
129
+
130
+ vendor_details = self.vendor_details
131
+
132
+ getting_started = self.getting_started
133
+
134
+ integration_guide = self.integration_guide
135
+
136
+ thumbnail: Union[None, Unset, types.FileTypes]
137
+ if isinstance(self.thumbnail, Unset):
138
+ thumbnail = UNSET
139
+ elif isinstance(self.thumbnail, File):
140
+ thumbnail = self.thumbnail.to_tuple()
141
+
142
+ else:
143
+ thumbnail = self.thumbnail
144
+
145
+ plans: Union[Unset, list[dict[str, Any]]] = UNSET
146
+ if not isinstance(self.plans, Unset):
147
+ plans = []
148
+ for plans_item_data in self.plans:
149
+ plans_item = plans_item_data.to_dict()
150
+ plans.append(plans_item)
151
+
152
+ shared = self.shared
153
+
154
+ billable = self.billable
155
+
156
+ datacite_doi = self.datacite_doi
157
+
158
+ latitude: Union[None, Unset, float]
159
+ if isinstance(self.latitude, Unset):
160
+ latitude = UNSET
161
+ else:
162
+ latitude = self.latitude
163
+
164
+ longitude: Union[None, Unset, float]
165
+ if isinstance(self.longitude, Unset):
166
+ longitude = UNSET
167
+ else:
168
+ longitude = self.longitude
169
+
170
+ country: Union[Unset, str]
171
+ if isinstance(self.country, Unset):
172
+ country = UNSET
173
+ elif isinstance(self.country, CountryEnum):
174
+ country = self.country.value
175
+ else:
176
+ country = self.country.value
177
+
178
+ backend_id = self.backend_id
179
+
180
+ image: Union[None, Unset, types.FileTypes]
181
+ if isinstance(self.image, Unset):
182
+ image = UNSET
183
+ elif isinstance(self.image, File):
184
+ image = self.image.to_tuple()
185
+
186
+ else:
187
+ image = self.image
188
+
189
+ backend_metadata = self.backend_metadata
190
+
191
+ compliance_checklist: Union[None, Unset, str]
192
+ if isinstance(self.compliance_checklist, Unset):
193
+ compliance_checklist = UNSET
194
+ else:
195
+ compliance_checklist = self.compliance_checklist
196
+
197
+ limits: Union[Unset, dict[str, Any]] = UNSET
198
+ if not isinstance(self.limits, Unset):
199
+ limits = self.limits.to_dict()
200
+
201
+ field_dict: dict[str, Any] = {}
202
+ field_dict.update(self.additional_properties)
203
+ field_dict.update(
204
+ {
205
+ "name": name,
206
+ "category": category,
207
+ "type": type_,
208
+ }
209
+ )
210
+ if slug is not UNSET:
211
+ field_dict["slug"] = slug
212
+ if description is not UNSET:
213
+ field_dict["description"] = description
214
+ if full_description is not UNSET:
215
+ field_dict["full_description"] = full_description
216
+ if privacy_policy_link is not UNSET:
217
+ field_dict["privacy_policy_link"] = privacy_policy_link
218
+ if access_url is not UNSET:
219
+ field_dict["access_url"] = access_url
220
+ if customer is not UNSET:
221
+ field_dict["customer"] = customer
222
+ if attributes is not UNSET:
223
+ field_dict["attributes"] = attributes
224
+ if options is not UNSET:
225
+ field_dict["options"] = options
226
+ if resource_options is not UNSET:
227
+ field_dict["resource_options"] = resource_options
228
+ if components is not UNSET:
229
+ field_dict["components"] = components
230
+ if vendor_details is not UNSET:
231
+ field_dict["vendor_details"] = vendor_details
232
+ if getting_started is not UNSET:
233
+ field_dict["getting_started"] = getting_started
234
+ if integration_guide is not UNSET:
235
+ field_dict["integration_guide"] = integration_guide
236
+ if thumbnail is not UNSET:
237
+ field_dict["thumbnail"] = thumbnail
238
+ if plans is not UNSET:
239
+ field_dict["plans"] = plans
240
+ if shared is not UNSET:
241
+ field_dict["shared"] = shared
242
+ if billable is not UNSET:
243
+ field_dict["billable"] = billable
244
+ if datacite_doi is not UNSET:
245
+ field_dict["datacite_doi"] = datacite_doi
246
+ if latitude is not UNSET:
247
+ field_dict["latitude"] = latitude
248
+ if longitude is not UNSET:
249
+ field_dict["longitude"] = longitude
250
+ if country is not UNSET:
251
+ field_dict["country"] = country
252
+ if backend_id is not UNSET:
253
+ field_dict["backend_id"] = backend_id
254
+ if image is not UNSET:
255
+ field_dict["image"] = image
256
+ if backend_metadata is not UNSET:
257
+ field_dict["backend_metadata"] = backend_metadata
258
+ if compliance_checklist is not UNSET:
259
+ field_dict["compliance_checklist"] = compliance_checklist
260
+ if limits is not UNSET:
261
+ field_dict["limits"] = limits
262
+
263
+ return field_dict
264
+
265
+ def to_multipart(self) -> types.RequestFiles:
266
+ files: types.RequestFiles = []
267
+
268
+ files.append(("name", (None, str(self.name).encode(), "text/plain")))
269
+
270
+ files.append(("category", (None, str(self.category).encode(), "text/plain")))
271
+
272
+ files.append(("type", (None, str(self.type_).encode(), "text/plain")))
273
+
274
+ if not isinstance(self.slug, Unset):
275
+ files.append(("slug", (None, str(self.slug).encode(), "text/plain")))
276
+
277
+ if not isinstance(self.description, Unset):
278
+ files.append(("description", (None, str(self.description).encode(), "text/plain")))
279
+
280
+ if not isinstance(self.full_description, Unset):
281
+ files.append(("full_description", (None, str(self.full_description).encode(), "text/plain")))
282
+
283
+ if not isinstance(self.privacy_policy_link, Unset):
284
+ files.append(("privacy_policy_link", (None, str(self.privacy_policy_link).encode(), "text/plain")))
285
+
286
+ if not isinstance(self.access_url, Unset):
287
+ files.append(("access_url", (None, str(self.access_url).encode(), "text/plain")))
288
+
289
+ if not isinstance(self.customer, Unset):
290
+ if isinstance(self.customer, str):
291
+ files.append(("customer", (None, str(self.customer).encode(), "text/plain")))
292
+ else:
293
+ files.append(("customer", (None, str(self.customer).encode(), "text/plain")))
294
+
295
+ if not isinstance(self.attributes, Unset):
296
+ files.append(("attributes", (None, str(self.attributes).encode(), "text/plain")))
297
+
298
+ if not isinstance(self.options, Unset):
299
+ files.append(("options", (None, json.dumps(self.options.to_dict()).encode(), "application/json")))
300
+
301
+ if not isinstance(self.resource_options, Unset):
302
+ files.append(
303
+ ("resource_options", (None, json.dumps(self.resource_options.to_dict()).encode(), "application/json"))
304
+ )
305
+
306
+ if not isinstance(self.components, Unset):
307
+ for components_item_element in self.components:
308
+ files.append(
309
+ ("components", (None, json.dumps(components_item_element.to_dict()).encode(), "application/json"))
310
+ )
311
+
312
+ if not isinstance(self.vendor_details, Unset):
313
+ files.append(("vendor_details", (None, str(self.vendor_details).encode(), "text/plain")))
314
+
315
+ if not isinstance(self.getting_started, Unset):
316
+ files.append(("getting_started", (None, str(self.getting_started).encode(), "text/plain")))
317
+
318
+ if not isinstance(self.integration_guide, Unset):
319
+ files.append(("integration_guide", (None, str(self.integration_guide).encode(), "text/plain")))
320
+
321
+ if not isinstance(self.thumbnail, Unset):
322
+ if isinstance(self.thumbnail, File):
323
+ files.append(("thumbnail", self.thumbnail.to_tuple()))
324
+ else:
325
+ files.append(("thumbnail", (None, str(self.thumbnail).encode(), "text/plain")))
326
+
327
+ if not isinstance(self.plans, Unset):
328
+ for plans_item_element in self.plans:
329
+ files.append(("plans", (None, json.dumps(plans_item_element.to_dict()).encode(), "application/json")))
330
+
331
+ if not isinstance(self.shared, Unset):
332
+ files.append(("shared", (None, str(self.shared).encode(), "text/plain")))
333
+
334
+ if not isinstance(self.billable, Unset):
335
+ files.append(("billable", (None, str(self.billable).encode(), "text/plain")))
336
+
337
+ if not isinstance(self.datacite_doi, Unset):
338
+ files.append(("datacite_doi", (None, str(self.datacite_doi).encode(), "text/plain")))
339
+
340
+ if not isinstance(self.latitude, Unset):
341
+ if isinstance(self.latitude, float):
342
+ files.append(("latitude", (None, str(self.latitude).encode(), "text/plain")))
343
+ else:
344
+ files.append(("latitude", (None, str(self.latitude).encode(), "text/plain")))
345
+
346
+ if not isinstance(self.longitude, Unset):
347
+ if isinstance(self.longitude, float):
348
+ files.append(("longitude", (None, str(self.longitude).encode(), "text/plain")))
349
+ else:
350
+ files.append(("longitude", (None, str(self.longitude).encode(), "text/plain")))
351
+
352
+ if not isinstance(self.country, Unset):
353
+ if isinstance(self.country, CountryEnum):
354
+ files.append(("country", (None, str(self.country.value).encode(), "text/plain")))
355
+ else:
356
+ files.append(("country", (None, str(self.country.value).encode(), "text/plain")))
357
+
358
+ if not isinstance(self.backend_id, Unset):
359
+ files.append(("backend_id", (None, str(self.backend_id).encode(), "text/plain")))
360
+
361
+ if not isinstance(self.image, Unset):
362
+ if isinstance(self.image, File):
363
+ files.append(("image", self.image.to_tuple()))
364
+ else:
365
+ files.append(("image", (None, str(self.image).encode(), "text/plain")))
366
+
367
+ if not isinstance(self.backend_metadata, Unset):
368
+ files.append(("backend_metadata", (None, str(self.backend_metadata).encode(), "text/plain")))
369
+
370
+ if not isinstance(self.compliance_checklist, Unset):
371
+ if isinstance(self.compliance_checklist, str):
372
+ files.append(("compliance_checklist", (None, str(self.compliance_checklist).encode(), "text/plain")))
373
+ else:
374
+ files.append(("compliance_checklist", (None, str(self.compliance_checklist).encode(), "text/plain")))
375
+
376
+ if not isinstance(self.limits, Unset):
377
+ files.append(("limits", (None, json.dumps(self.limits.to_dict()).encode(), "application/json")))
378
+
379
+ for prop_name, prop in self.additional_properties.items():
380
+ files.append((prop_name, (None, str(prop).encode(), "text/plain")))
381
+
382
+ return files
383
+
384
+ @classmethod
385
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
386
+ from ..models.base_provider_plan_request import BaseProviderPlanRequest
387
+ from ..models.offering_component_request import OfferingComponentRequest
388
+ from ..models.offering_create_request_multipart_limits import OfferingCreateRequestMultipartLimits
389
+ from ..models.offering_options_request import OfferingOptionsRequest
390
+
391
+ d = dict(src_dict)
392
+ name = d.pop("name")
393
+
394
+ category = d.pop("category")
395
+
396
+ type_ = d.pop("type")
397
+
398
+ slug = d.pop("slug", UNSET)
399
+
400
+ description = d.pop("description", UNSET)
401
+
402
+ full_description = d.pop("full_description", UNSET)
403
+
404
+ privacy_policy_link = d.pop("privacy_policy_link", UNSET)
405
+
406
+ access_url = d.pop("access_url", UNSET)
407
+
408
+ def _parse_customer(data: object) -> Union[None, Unset, str]:
409
+ if data is None:
410
+ return data
411
+ if isinstance(data, Unset):
412
+ return data
413
+ return cast(Union[None, Unset, str], data)
414
+
415
+ customer = _parse_customer(d.pop("customer", UNSET))
416
+
417
+ attributes = d.pop("attributes", UNSET)
418
+
419
+ _options = d.pop("options", UNSET)
420
+ options: Union[Unset, OfferingOptionsRequest]
421
+ if isinstance(_options, Unset):
422
+ options = UNSET
423
+ else:
424
+ options = OfferingOptionsRequest.from_dict(_options)
425
+
426
+ _resource_options = d.pop("resource_options", UNSET)
427
+ resource_options: Union[Unset, OfferingOptionsRequest]
428
+ if isinstance(_resource_options, Unset):
429
+ resource_options = UNSET
430
+ else:
431
+ resource_options = OfferingOptionsRequest.from_dict(_resource_options)
432
+
433
+ components = []
434
+ _components = d.pop("components", UNSET)
435
+ for components_item_data in _components or []:
436
+ components_item = OfferingComponentRequest.from_dict(components_item_data)
437
+
438
+ components.append(components_item)
439
+
440
+ vendor_details = d.pop("vendor_details", UNSET)
441
+
442
+ getting_started = d.pop("getting_started", UNSET)
443
+
444
+ integration_guide = d.pop("integration_guide", UNSET)
445
+
446
+ def _parse_thumbnail(data: object) -> Union[File, None, Unset]:
447
+ if data is None:
448
+ return data
449
+ if isinstance(data, Unset):
450
+ return data
451
+ try:
452
+ if not isinstance(data, bytes):
453
+ raise TypeError()
454
+ thumbnail_type_0 = File(payload=BytesIO(data))
455
+
456
+ return thumbnail_type_0
457
+ except: # noqa: E722
458
+ pass
459
+ return cast(Union[File, None, Unset], data)
460
+
461
+ thumbnail = _parse_thumbnail(d.pop("thumbnail", UNSET))
462
+
463
+ plans = []
464
+ _plans = d.pop("plans", UNSET)
465
+ for plans_item_data in _plans or []:
466
+ plans_item = BaseProviderPlanRequest.from_dict(plans_item_data)
467
+
468
+ plans.append(plans_item)
469
+
470
+ shared = d.pop("shared", UNSET)
471
+
472
+ billable = d.pop("billable", UNSET)
473
+
474
+ datacite_doi = d.pop("datacite_doi", UNSET)
475
+
476
+ def _parse_latitude(data: object) -> Union[None, Unset, float]:
477
+ if data is None:
478
+ return data
479
+ if isinstance(data, Unset):
480
+ return data
481
+ return cast(Union[None, Unset, float], data)
482
+
483
+ latitude = _parse_latitude(d.pop("latitude", UNSET))
484
+
485
+ def _parse_longitude(data: object) -> Union[None, Unset, float]:
486
+ if data is None:
487
+ return data
488
+ if isinstance(data, Unset):
489
+ return data
490
+ return cast(Union[None, Unset, float], data)
491
+
492
+ longitude = _parse_longitude(d.pop("longitude", UNSET))
493
+
494
+ def _parse_country(data: object) -> Union[BlankEnum, CountryEnum, Unset]:
495
+ if isinstance(data, Unset):
496
+ return data
497
+ try:
498
+ if not isinstance(data, str):
499
+ raise TypeError()
500
+ country_type_0 = CountryEnum(data)
501
+
502
+ return country_type_0
503
+ except: # noqa: E722
504
+ pass
505
+ if not isinstance(data, str):
506
+ raise TypeError()
507
+ country_type_1 = BlankEnum(data)
508
+
509
+ return country_type_1
510
+
511
+ country = _parse_country(d.pop("country", UNSET))
512
+
513
+ backend_id = d.pop("backend_id", UNSET)
514
+
515
+ def _parse_image(data: object) -> Union[File, None, Unset]:
516
+ if data is None:
517
+ return data
518
+ if isinstance(data, Unset):
519
+ return data
520
+ try:
521
+ if not isinstance(data, bytes):
522
+ raise TypeError()
523
+ image_type_0 = File(payload=BytesIO(data))
524
+
525
+ return image_type_0
526
+ except: # noqa: E722
527
+ pass
528
+ return cast(Union[File, None, Unset], data)
529
+
530
+ image = _parse_image(d.pop("image", UNSET))
531
+
532
+ backend_metadata = d.pop("backend_metadata", UNSET)
533
+
534
+ def _parse_compliance_checklist(data: object) -> Union[None, Unset, str]:
535
+ if data is None:
536
+ return data
537
+ if isinstance(data, Unset):
538
+ return data
539
+ return cast(Union[None, Unset, str], data)
540
+
541
+ compliance_checklist = _parse_compliance_checklist(d.pop("compliance_checklist", UNSET))
542
+
543
+ _limits = d.pop("limits", UNSET)
544
+ limits: Union[Unset, OfferingCreateRequestMultipartLimits]
545
+ if isinstance(_limits, Unset):
546
+ limits = UNSET
547
+ else:
548
+ limits = OfferingCreateRequestMultipartLimits.from_dict(_limits)
549
+
550
+ offering_create_request_multipart = cls(
551
+ name=name,
552
+ category=category,
553
+ type_=type_,
554
+ slug=slug,
555
+ description=description,
556
+ full_description=full_description,
557
+ privacy_policy_link=privacy_policy_link,
558
+ access_url=access_url,
559
+ customer=customer,
560
+ attributes=attributes,
561
+ options=options,
562
+ resource_options=resource_options,
563
+ components=components,
564
+ vendor_details=vendor_details,
565
+ getting_started=getting_started,
566
+ integration_guide=integration_guide,
567
+ thumbnail=thumbnail,
568
+ plans=plans,
569
+ shared=shared,
570
+ billable=billable,
571
+ datacite_doi=datacite_doi,
572
+ latitude=latitude,
573
+ longitude=longitude,
574
+ country=country,
575
+ backend_id=backend_id,
576
+ image=image,
577
+ backend_metadata=backend_metadata,
578
+ compliance_checklist=compliance_checklist,
579
+ limits=limits,
580
+ )
581
+
582
+ offering_create_request_multipart.additional_properties = d
583
+ return offering_create_request_multipart
584
+
585
+ @property
586
+ def additional_keys(self) -> list[str]:
587
+ return list(self.additional_properties.keys())
588
+
589
+ def __getitem__(self, key: str) -> Any:
590
+ return self.additional_properties[key]
591
+
592
+ def __setitem__(self, key: str, value: Any) -> None:
593
+ self.additional_properties[key] = value
594
+
595
+ def __delitem__(self, key: str) -> None:
596
+ del self.additional_properties[key]
597
+
598
+ def __contains__(self, key: str) -> bool:
599
+ return key in self.additional_properties
@@ -0,0 +1,57 @@
1
+ from collections.abc import Mapping
2
+ from typing import TYPE_CHECKING, Any, TypeVar
3
+
4
+ from attrs import define as _attrs_define
5
+ from attrs import field as _attrs_field
6
+
7
+ if TYPE_CHECKING:
8
+ from ..models.offering_component_limit_request import OfferingComponentLimitRequest
9
+
10
+
11
+ T = TypeVar("T", bound="OfferingCreateRequestMultipartLimits")
12
+
13
+
14
+ @_attrs_define
15
+ class OfferingCreateRequestMultipartLimits:
16
+ """ """
17
+
18
+ additional_properties: dict[str, "OfferingComponentLimitRequest"] = _attrs_field(init=False, factory=dict)
19
+
20
+ def to_dict(self) -> dict[str, Any]:
21
+ field_dict: dict[str, Any] = {}
22
+ for prop_name, prop in self.additional_properties.items():
23
+ field_dict[prop_name] = prop.to_dict()
24
+
25
+ return field_dict
26
+
27
+ @classmethod
28
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
29
+ from ..models.offering_component_limit_request import OfferingComponentLimitRequest
30
+
31
+ d = dict(src_dict)
32
+ offering_create_request_multipart_limits = cls()
33
+
34
+ additional_properties = {}
35
+ for prop_name, prop_dict in d.items():
36
+ additional_property = OfferingComponentLimitRequest.from_dict(prop_dict)
37
+
38
+ additional_properties[prop_name] = additional_property
39
+
40
+ offering_create_request_multipart_limits.additional_properties = additional_properties
41
+ return offering_create_request_multipart_limits
42
+
43
+ @property
44
+ def additional_keys(self) -> list[str]:
45
+ return list(self.additional_properties.keys())
46
+
47
+ def __getitem__(self, key: str) -> "OfferingComponentLimitRequest":
48
+ return self.additional_properties[key]
49
+
50
+ def __setitem__(self, key: str, value: "OfferingComponentLimitRequest") -> None:
51
+ self.additional_properties[key] = value
52
+
53
+ def __delitem__(self, key: str) -> None:
54
+ del self.additional_properties[key]
55
+
56
+ def __contains__(self, key: str) -> bool:
57
+ return key in self.additional_properties