waldur-api-client 7.8.4__py3-none-any.whl → 7.8.5__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 (257) hide show
  1. waldur_api_client/api/backend_resources/backend_resources_import_resource.py +3 -3
  2. waldur_api_client/api/booking_resources/booking_resources_count.py +90 -0
  3. waldur_api_client/api/booking_resources/booking_resources_list.py +90 -0
  4. waldur_api_client/api/call_managing_organisations/call_managing_organisations_add_user.py +17 -10
  5. waldur_api_client/api/customers/customers_add_user.py +17 -10
  6. waldur_api_client/api/marketplace_component_usages/marketplace_component_usages_count.py +30 -0
  7. waldur_api_client/api/marketplace_component_usages/marketplace_component_usages_list.py +30 -0
  8. waldur_api_client/api/marketplace_customer_component_usage_policies/__init__.py +1 -0
  9. waldur_api_client/api/marketplace_customer_component_usage_policies/marketplace_customer_component_usage_policies_actions_count.py +125 -0
  10. waldur_api_client/api/marketplace_customer_component_usage_policies/marketplace_customer_component_usage_policies_actions_retrieve.py +119 -0
  11. waldur_api_client/api/marketplace_customer_component_usage_policies/marketplace_customer_component_usage_policies_count.py +239 -0
  12. waldur_api_client/api/marketplace_customer_component_usage_policies/marketplace_customer_component_usage_policies_create.py +152 -0
  13. waldur_api_client/api/marketplace_customer_component_usage_policies/marketplace_customer_component_usage_policies_destroy.py +89 -0
  14. waldur_api_client/api/marketplace_customer_component_usage_policies/marketplace_customer_component_usage_policies_list.py +242 -0
  15. waldur_api_client/api/marketplace_customer_component_usage_policies/marketplace_customer_component_usage_policies_partial_update.py +166 -0
  16. waldur_api_client/api/marketplace_customer_component_usage_policies/marketplace_customer_component_usage_policies_retrieve.py +144 -0
  17. waldur_api_client/api/marketplace_customer_component_usage_policies/marketplace_customer_component_usage_policies_update.py +166 -0
  18. waldur_api_client/api/marketplace_orders/marketplace_orders_set_backend_id.py +105 -0
  19. waldur_api_client/api/marketplace_plans/marketplace_plans_update_discounts.py +123 -0
  20. waldur_api_client/api/marketplace_provider_offerings/marketplace_provider_offerings_add_partition.py +168 -0
  21. waldur_api_client/api/marketplace_provider_offerings/marketplace_provider_offerings_add_software_catalog.py +168 -0
  22. waldur_api_client/api/marketplace_provider_offerings/marketplace_provider_offerings_add_user.py +19 -10
  23. waldur_api_client/api/marketplace_provider_offerings/marketplace_provider_offerings_component_stats_list.py +15 -0
  24. waldur_api_client/api/marketplace_provider_offerings/marketplace_provider_offerings_costs_list.py +15 -0
  25. waldur_api_client/api/marketplace_provider_offerings/marketplace_provider_offerings_count.py +15 -0
  26. waldur_api_client/api/marketplace_provider_offerings/marketplace_provider_offerings_create_offering_component.py +1 -1
  27. waldur_api_client/api/marketplace_provider_offerings/marketplace_provider_offerings_customers_list.py +15 -0
  28. waldur_api_client/api/marketplace_provider_offerings/marketplace_provider_offerings_groups_count.py +15 -0
  29. waldur_api_client/api/marketplace_provider_offerings/marketplace_provider_offerings_groups_list.py +15 -0
  30. waldur_api_client/api/marketplace_provider_offerings/marketplace_provider_offerings_list.py +15 -0
  31. waldur_api_client/api/marketplace_provider_offerings/marketplace_provider_offerings_remove_partition.py +107 -0
  32. waldur_api_client/api/marketplace_provider_offerings/marketplace_provider_offerings_remove_software_catalog.py +107 -0
  33. waldur_api_client/api/marketplace_provider_offerings/marketplace_provider_offerings_update_partition_partial_update.py +168 -0
  34. waldur_api_client/api/marketplace_provider_offerings/marketplace_provider_offerings_update_software_catalog_partial_update.py +168 -0
  35. waldur_api_client/api/marketplace_provider_resources/marketplace_provider_resources_count.py +90 -0
  36. waldur_api_client/api/marketplace_provider_resources/marketplace_provider_resources_list.py +90 -0
  37. waldur_api_client/api/marketplace_provider_resources/marketplace_provider_resources_set_downscaled.py +107 -0
  38. waldur_api_client/api/marketplace_provider_resources/marketplace_provider_resources_set_paused.py +107 -0
  39. waldur_api_client/api/marketplace_provider_resources/marketplace_provider_resources_set_restrict_member_access.py +107 -0
  40. waldur_api_client/api/marketplace_public_offerings/marketplace_public_offerings_count.py +15 -0
  41. waldur_api_client/api/marketplace_public_offerings/marketplace_public_offerings_list.py +15 -0
  42. waldur_api_client/api/marketplace_resources/marketplace_resources_count.py +90 -0
  43. waldur_api_client/api/marketplace_resources/marketplace_resources_list.py +90 -0
  44. waldur_api_client/api/marketplace_resources/marketplace_resources_set_downscaled.py +107 -0
  45. waldur_api_client/api/marketplace_resources/marketplace_resources_set_paused.py +107 -0
  46. waldur_api_client/api/marketplace_resources/marketplace_resources_set_restrict_member_access.py +107 -0
  47. waldur_api_client/api/marketplace_service_providers/marketplace_service_providers_add_user.py +17 -10
  48. waldur_api_client/api/marketplace_service_providers/marketplace_service_providers_customer_projects_list.py +15 -0
  49. waldur_api_client/api/marketplace_service_providers/marketplace_service_providers_offerings_list.py +15 -0
  50. waldur_api_client/api/marketplace_service_providers/marketplace_service_providers_projects_list.py +14 -24
  51. waldur_api_client/api/marketplace_service_providers/marketplace_service_providers_set_offerings_username.py +8 -67
  52. waldur_api_client/api/marketplace_site_agent_identities/__init__.py +1 -0
  53. waldur_api_client/api/marketplace_site_agent_identities/marketplace_site_agent_identities_count.py +240 -0
  54. waldur_api_client/api/marketplace_site_agent_identities/marketplace_site_agent_identities_create.py +148 -0
  55. waldur_api_client/api/marketplace_site_agent_identities/marketplace_site_agent_identities_destroy.py +89 -0
  56. waldur_api_client/api/marketplace_site_agent_identities/marketplace_site_agent_identities_list.py +241 -0
  57. waldur_api_client/api/marketplace_site_agent_identities/marketplace_site_agent_identities_register_event_subscription.py +176 -0
  58. waldur_api_client/api/marketplace_site_agent_identities/marketplace_site_agent_identities_register_service.py +170 -0
  59. waldur_api_client/api/marketplace_site_agent_identities/marketplace_site_agent_identities_retrieve.py +140 -0
  60. waldur_api_client/api/marketplace_site_agent_identities/marketplace_site_agent_identities_update.py +162 -0
  61. waldur_api_client/api/marketplace_site_agent_processors/__init__.py +1 -0
  62. waldur_api_client/api/marketplace_site_agent_processors/marketplace_site_agent_processors_count.py +240 -0
  63. waldur_api_client/api/marketplace_site_agent_processors/marketplace_site_agent_processors_list.py +241 -0
  64. waldur_api_client/api/marketplace_site_agent_processors/marketplace_site_agent_processors_retrieve.py +142 -0
  65. waldur_api_client/api/marketplace_site_agent_services/__init__.py +1 -0
  66. waldur_api_client/api/marketplace_site_agent_services/marketplace_site_agent_services_count.py +229 -0
  67. waldur_api_client/api/marketplace_site_agent_services/marketplace_site_agent_services_list.py +230 -0
  68. waldur_api_client/api/marketplace_site_agent_services/marketplace_site_agent_services_register_processor.py +172 -0
  69. waldur_api_client/api/marketplace_site_agent_services/marketplace_site_agent_services_retrieve.py +140 -0
  70. waldur_api_client/api/marketplace_site_agent_services/marketplace_site_agent_services_set_statistics.py +166 -0
  71. waldur_api_client/api/marketplace_software_catalogs/__init__.py +1 -0
  72. waldur_api_client/api/marketplace_software_catalogs/marketplace_software_catalogs_count.py +225 -0
  73. waldur_api_client/api/marketplace_software_catalogs/marketplace_software_catalogs_create.py +150 -0
  74. waldur_api_client/api/marketplace_software_catalogs/marketplace_software_catalogs_destroy.py +89 -0
  75. waldur_api_client/api/marketplace_software_catalogs/marketplace_software_catalogs_list.py +226 -0
  76. waldur_api_client/api/marketplace_software_catalogs/marketplace_software_catalogs_partial_update.py +164 -0
  77. waldur_api_client/api/marketplace_software_catalogs/marketplace_software_catalogs_retrieve.py +142 -0
  78. waldur_api_client/api/marketplace_software_catalogs/marketplace_software_catalogs_update.py +164 -0
  79. waldur_api_client/api/marketplace_software_packages/__init__.py +1 -0
  80. waldur_api_client/api/marketplace_software_packages/marketplace_software_packages_count.py +352 -0
  81. waldur_api_client/api/marketplace_software_packages/marketplace_software_packages_create.py +150 -0
  82. waldur_api_client/api/marketplace_software_packages/marketplace_software_packages_destroy.py +89 -0
  83. waldur_api_client/api/marketplace_software_packages/marketplace_software_packages_list.py +353 -0
  84. waldur_api_client/api/marketplace_software_packages/marketplace_software_packages_partial_update.py +164 -0
  85. waldur_api_client/api/marketplace_software_packages/marketplace_software_packages_retrieve.py +142 -0
  86. waldur_api_client/api/marketplace_software_packages/marketplace_software_packages_update.py +164 -0
  87. waldur_api_client/api/marketplace_software_targets/__init__.py +1 -0
  88. waldur_api_client/api/marketplace_software_targets/marketplace_software_targets_count.py +313 -0
  89. waldur_api_client/api/marketplace_software_targets/marketplace_software_targets_create.py +117 -0
  90. waldur_api_client/api/marketplace_software_targets/marketplace_software_targets_destroy.py +89 -0
  91. waldur_api_client/api/marketplace_software_targets/marketplace_software_targets_list.py +314 -0
  92. waldur_api_client/api/marketplace_software_targets/marketplace_software_targets_partial_update.py +142 -0
  93. waldur_api_client/api/marketplace_software_targets/marketplace_software_targets_retrieve.py +142 -0
  94. waldur_api_client/api/marketplace_software_targets/marketplace_software_targets_update.py +142 -0
  95. waldur_api_client/api/marketplace_software_versions/__init__.py +1 -0
  96. waldur_api_client/api/marketplace_software_versions/marketplace_software_versions_count.py +310 -0
  97. waldur_api_client/api/marketplace_software_versions/marketplace_software_versions_create.py +117 -0
  98. waldur_api_client/api/marketplace_software_versions/marketplace_software_versions_destroy.py +89 -0
  99. waldur_api_client/api/marketplace_software_versions/marketplace_software_versions_list.py +311 -0
  100. waldur_api_client/api/marketplace_software_versions/marketplace_software_versions_partial_update.py +142 -0
  101. waldur_api_client/api/marketplace_software_versions/marketplace_software_versions_retrieve.py +142 -0
  102. waldur_api_client/api/marketplace_software_versions/marketplace_software_versions_update.py +142 -0
  103. waldur_api_client/api/onboarding_justifications/onboarding_justifications_approve.py +168 -0
  104. waldur_api_client/api/onboarding_justifications/onboarding_justifications_reject.py +168 -0
  105. waldur_api_client/api/projects/projects_add_user.py +17 -10
  106. waldur_api_client/api/projects/projects_count.py +30 -0
  107. waldur_api_client/api/projects/projects_list.py +30 -0
  108. waldur_api_client/api/projects/projects_move_project.py +19 -10
  109. waldur_api_client/api/projects/projects_recover.py +166 -0
  110. waldur_api_client/api/proposal_proposals/proposal_proposals_add_user.py +17 -10
  111. waldur_api_client/api/proposal_protected_calls/proposal_protected_calls_add_user.py +17 -10
  112. waldur_api_client/api/remote_waldur_api/remote_waldur_api_pull_resource_robot_accounts.py +88 -0
  113. waldur_api_client/models/__init__.py +152 -4
  114. waldur_api_client/models/agent_event_subscription_create_request.py +71 -0
  115. waldur_api_client/models/agent_identity.py +211 -0
  116. waldur_api_client/models/agent_identity_request.py +157 -0
  117. waldur_api_client/models/agent_processor.py +170 -0
  118. waldur_api_client/models/agent_processor_create_request.py +89 -0
  119. waldur_api_client/models/agent_service.py +172 -0
  120. waldur_api_client/models/agent_service_create_request.py +81 -0
  121. waldur_api_client/models/agent_service_state.py +10 -0
  122. waldur_api_client/models/agent_service_statistics_request.py +59 -0
  123. waldur_api_client/models/base_provider_plan.py +21 -0
  124. waldur_api_client/models/base_public_plan.py +21 -0
  125. waldur_api_client/models/booking_offerings_list_field_item.py +2 -0
  126. waldur_api_client/models/booking_offerings_retrieve_field_item.py +2 -0
  127. waldur_api_client/models/booking_resource.py +33 -0
  128. waldur_api_client/models/booking_resource_renewal_date_type_0.py +53 -0
  129. waldur_api_client/models/booking_resources_list_field_item.py +1 -0
  130. waldur_api_client/models/booking_resources_retrieve_field_item.py +1 -0
  131. waldur_api_client/models/call_managing_organisations_add_user_response_400.py +65 -0
  132. waldur_api_client/models/constance_settings.py +81 -45
  133. waldur_api_client/models/constance_settings_request.py +81 -45
  134. waldur_api_client/models/constance_settings_request_form.py +81 -45
  135. waldur_api_client/models/constance_settings_request_multipart.py +134 -71
  136. waldur_api_client/models/customer_component_usage_policy.py +175 -0
  137. waldur_api_client/models/customer_component_usage_policy_request.py +102 -0
  138. waldur_api_client/models/customers_add_user_response_400.py +65 -0
  139. waldur_api_client/models/discount_config_request.py +91 -0
  140. waldur_api_client/models/discounts_update_request.py +65 -0
  141. waldur_api_client/models/discounts_update_request_discounts.py +57 -0
  142. waldur_api_client/models/issue.py +0 -25
  143. waldur_api_client/models/managed_rancher_cluster_resources_list_field_item.py +1 -0
  144. waldur_api_client/models/managed_rancher_cluster_resources_retrieve_field_item.py +1 -0
  145. waldur_api_client/models/marketplace_orders_count_state_item.py +1 -0
  146. waldur_api_client/models/marketplace_orders_list_field_item.py +2 -0
  147. waldur_api_client/models/marketplace_orders_list_state_item.py +1 -0
  148. waldur_api_client/models/marketplace_orders_retrieve_field_item.py +2 -0
  149. waldur_api_client/models/marketplace_provider_offerings_add_user_response_400.py +65 -0
  150. waldur_api_client/models/marketplace_provider_offerings_list_course_accounts_retrieve_field_item.py +2 -0
  151. waldur_api_client/models/marketplace_provider_offerings_list_customer_service_accounts_retrieve_field_item.py +2 -0
  152. waldur_api_client/models/marketplace_provider_offerings_list_field_item.py +2 -0
  153. waldur_api_client/models/marketplace_provider_offerings_list_project_service_accounts_retrieve_field_item.py +2 -0
  154. waldur_api_client/models/marketplace_provider_offerings_retrieve_field_item.py +2 -0
  155. waldur_api_client/models/marketplace_provider_offerings_stats_retrieve_field_item.py +2 -0
  156. waldur_api_client/models/marketplace_provider_offerings_user_has_resource_access_retrieve_field_item.py +2 -0
  157. waldur_api_client/models/marketplace_provider_resources_details_retrieve_field_item.py +1 -0
  158. waldur_api_client/models/marketplace_provider_resources_list_field_item.py +1 -0
  159. waldur_api_client/models/marketplace_provider_resources_retrieve_field_item.py +1 -0
  160. waldur_api_client/models/marketplace_public_offerings_list_field_item.py +2 -0
  161. waldur_api_client/models/marketplace_public_offerings_retrieve_field_item.py +2 -0
  162. waldur_api_client/models/marketplace_resources_details_retrieve_field_item.py +1 -0
  163. waldur_api_client/models/marketplace_resources_list_field_item.py +1 -0
  164. waldur_api_client/models/marketplace_resources_retrieve_field_item.py +1 -0
  165. waldur_api_client/models/marketplace_service_providers_add_user_response_400.py +65 -0
  166. waldur_api_client/models/marketplace_site_agent_services_count_state_item.py +10 -0
  167. waldur_api_client/models/marketplace_site_agent_services_list_state_item.py +10 -0
  168. waldur_api_client/models/marketplace_software_catalogs_count_o_item.py +15 -0
  169. waldur_api_client/models/marketplace_software_catalogs_list_o_item.py +15 -0
  170. waldur_api_client/models/marketplace_software_packages_count_o_item.py +17 -0
  171. waldur_api_client/models/marketplace_software_packages_list_o_item.py +17 -0
  172. waldur_api_client/models/marketplace_software_targets_count_o_item.py +15 -0
  173. waldur_api_client/models/marketplace_software_targets_list_o_item.py +15 -0
  174. waldur_api_client/models/marketplace_software_versions_count_o_item.py +15 -0
  175. waldur_api_client/models/marketplace_software_versions_list_o_item.py +15 -0
  176. waldur_api_client/models/merged_plugin_options.py +47 -8
  177. waldur_api_client/models/merged_plugin_options_request.py +47 -8
  178. waldur_api_client/models/nested_agent_processor.py +154 -0
  179. waldur_api_client/models/nested_agent_service.py +134 -0
  180. waldur_api_client/models/nested_agent_service_request.py +90 -0
  181. waldur_api_client/models/nested_customer_usage_policy_component.py +103 -0
  182. waldur_api_client/models/nested_customer_usage_policy_component_request.py +87 -0
  183. waldur_api_client/models/nested_partition.py +412 -0
  184. waldur_api_client/models/nested_partition_request.py +397 -0
  185. waldur_api_client/models/nested_plan_component.py +155 -0
  186. waldur_api_client/models/nested_plan_component_request.py +128 -0
  187. waldur_api_client/models/nested_software_catalog.py +134 -0
  188. waldur_api_client/models/nested_software_catalog_catalog.py +86 -0
  189. waldur_api_client/models/nested_software_catalog_partition.py +86 -0
  190. waldur_api_client/models/nested_software_catalog_request.py +68 -0
  191. waldur_api_client/models/nested_software_target.py +84 -0
  192. waldur_api_client/models/nested_software_target_request.py +75 -0
  193. waldur_api_client/models/nested_software_version.py +124 -0
  194. waldur_api_client/models/nested_software_version_request.py +93 -0
  195. waldur_api_client/models/observable_object_type_enum.py +14 -0
  196. waldur_api_client/models/offering.py +42 -0
  197. waldur_api_client/models/offering_create.py +36 -0
  198. waldur_api_client/models/offering_partition.py +440 -0
  199. waldur_api_client/models/offering_partition_request.py +406 -0
  200. waldur_api_client/models/offering_software_catalog.py +176 -0
  201. waldur_api_client/models/offering_software_catalog_request.py +118 -0
  202. waldur_api_client/models/onboarding_justification.py +35 -6
  203. waldur_api_client/models/onboarding_justification_create_request.py +8 -5
  204. waldur_api_client/models/onboarding_justification_request.py +20 -6
  205. waldur_api_client/models/onboarding_justification_review_request.py +59 -0
  206. waldur_api_client/models/order_backend_id_request.py +59 -0
  207. waldur_api_client/models/order_details.py +39 -0
  208. waldur_api_client/models/order_state.py +1 -0
  209. waldur_api_client/models/patched_customer_component_usage_policy_request.py +104 -0
  210. waldur_api_client/models/patched_offering_partition_request.py +412 -0
  211. waldur_api_client/models/patched_offering_software_catalog_update_request.py +131 -0
  212. waldur_api_client/models/patched_onboarding_justification_request.py +16 -5
  213. waldur_api_client/models/patched_project_request.py +9 -0
  214. waldur_api_client/models/patched_project_request_form.py +9 -0
  215. waldur_api_client/models/patched_project_request_multipart.py +12 -0
  216. waldur_api_client/models/patched_software_catalog_request.py +86 -0
  217. waldur_api_client/models/patched_software_package_request.py +86 -0
  218. waldur_api_client/models/plan_component.py +40 -0
  219. waldur_api_client/models/project.py +27 -0
  220. waldur_api_client/models/project_recovery_request.py +70 -0
  221. waldur_api_client/models/project_request.py +9 -0
  222. waldur_api_client/models/project_request_form.py +9 -0
  223. waldur_api_client/models/project_request_multipart.py +12 -0
  224. waldur_api_client/models/project_user.py +21 -4
  225. waldur_api_client/models/projects_add_user_response_400.py +65 -0
  226. waldur_api_client/models/projects_list_field_item.py +3 -0
  227. waldur_api_client/models/projects_move_project_response_400.py +65 -0
  228. waldur_api_client/models/projects_retrieve_field_item.py +3 -0
  229. waldur_api_client/models/proposal_proposals_add_user_response_400.py +65 -0
  230. waldur_api_client/models/proposal_protected_calls_add_user_response_400.py +65 -0
  231. waldur_api_client/models/provider_offering_details.py +42 -0
  232. waldur_api_client/models/provider_plan_details.py +18 -0
  233. waldur_api_client/models/public_offering_details.py +42 -0
  234. waldur_api_client/models/remote_resource_order_remote_state_enum.py +1 -0
  235. waldur_api_client/models/{set_offerings_username.py → remove_partition_request.py} +11 -19
  236. waldur_api_client/models/remove_software_catalog_request.py +60 -0
  237. waldur_api_client/models/resource.py +33 -0
  238. waldur_api_client/models/resource_downscaled_request.py +59 -0
  239. waldur_api_client/models/resource_paused_request.py +59 -0
  240. waldur_api_client/models/resource_renewal_date_type_0.py +53 -0
  241. waldur_api_client/models/resource_restrict_member_access_request.py +59 -0
  242. waldur_api_client/models/software_catalog.py +130 -0
  243. waldur_api_client/models/software_catalog_request.py +87 -0
  244. waldur_api_client/models/software_catalog_uuid.py +60 -0
  245. waldur_api_client/models/software_package.py +168 -0
  246. waldur_api_client/models/software_package_request.py +87 -0
  247. waldur_api_client/models/software_target.py +110 -0
  248. waldur_api_client/models/software_version.py +135 -0
  249. waldur_api_client/models/user.py +20 -0
  250. waldur_api_client/models/users_list_field_item.py +1 -0
  251. waldur_api_client/models/users_me_retrieve_field_item.py +1 -0
  252. waldur_api_client/models/users_retrieve_field_item.py +1 -0
  253. {waldur_api_client-7.8.4.dist-info → waldur_api_client-7.8.5.dist-info}/METADATA +1 -1
  254. {waldur_api_client-7.8.4.dist-info → waldur_api_client-7.8.5.dist-info}/RECORD +256 -103
  255. waldur_api_client/models/marketplace_service_providers_projects_list_field_item.py +0 -37
  256. {waldur_api_client-7.8.4.dist-info → waldur_api_client-7.8.5.dist-info}/WHEEL +0 -0
  257. {waldur_api_client-7.8.4.dist-info → waldur_api_client-7.8.5.dist-info}/licenses/LICENSE +0 -0
@@ -32,6 +32,7 @@ class PatchedProjectRequestMultipart:
32
32
  is_industry (Union[Unset, bool]):
33
33
  image (Union[File, None, Unset]):
34
34
  kind (Union[Unset, KindEnum]):
35
+ staff_notes (Union[Unset, str]):
35
36
  """
36
37
 
37
38
  name: Union[Unset, str] = UNSET
@@ -46,6 +47,7 @@ class PatchedProjectRequestMultipart:
46
47
  is_industry: Union[Unset, bool] = UNSET
47
48
  image: Union[File, None, Unset] = UNSET
48
49
  kind: Union[Unset, KindEnum] = UNSET
50
+ staff_notes: Union[Unset, str] = UNSET
49
51
  additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
50
52
 
51
53
  def to_dict(self) -> dict[str, Any]:
@@ -106,6 +108,8 @@ class PatchedProjectRequestMultipart:
106
108
  if not isinstance(self.kind, Unset):
107
109
  kind = self.kind.value
108
110
 
111
+ staff_notes = self.staff_notes
112
+
109
113
  field_dict: dict[str, Any] = {}
110
114
  field_dict.update(self.additional_properties)
111
115
  field_dict.update({})
@@ -133,6 +137,8 @@ class PatchedProjectRequestMultipart:
133
137
  field_dict["image"] = image
134
138
  if kind is not UNSET:
135
139
  field_dict["kind"] = kind
140
+ if staff_notes is not UNSET:
141
+ field_dict["staff_notes"] = staff_notes
136
142
 
137
143
  return field_dict
138
144
 
@@ -194,6 +200,9 @@ class PatchedProjectRequestMultipart:
194
200
  if not isinstance(self.kind, Unset):
195
201
  files.append(("kind", (None, str(self.kind.value).encode(), "text/plain")))
196
202
 
203
+ if not isinstance(self.staff_notes, Unset):
204
+ files.append(("staff_notes", (None, str(self.staff_notes).encode(), "text/plain")))
205
+
197
206
  for prop_name, prop in self.additional_properties.items():
198
207
  files.append((prop_name, (None, str(prop).encode(), "text/plain")))
199
208
 
@@ -306,6 +315,8 @@ class PatchedProjectRequestMultipart:
306
315
  else:
307
316
  kind = KindEnum(_kind)
308
317
 
318
+ staff_notes = d.pop("staff_notes", UNSET)
319
+
309
320
  patched_project_request_multipart = cls(
310
321
  name=name,
311
322
  slug=slug,
@@ -319,6 +330,7 @@ class PatchedProjectRequestMultipart:
319
330
  is_industry=is_industry,
320
331
  image=image,
321
332
  kind=kind,
333
+ staff_notes=staff_notes,
322
334
  )
323
335
 
324
336
  patched_project_request_multipart.additional_properties = d
@@ -0,0 +1,86 @@
1
+ from collections.abc import Mapping
2
+ from typing import Any, TypeVar, Union
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
+ T = TypeVar("T", bound="PatchedSoftwareCatalogRequest")
10
+
11
+
12
+ @_attrs_define
13
+ class PatchedSoftwareCatalogRequest:
14
+ """
15
+ Attributes:
16
+ name (Union[Unset, str]): Catalog name (e.g., EESSI)
17
+ version (Union[Unset, str]): Catalog version (e.g., 2023.06)
18
+ source_url (Union[Unset, str]): Catalog source URL
19
+ description (Union[Unset, str]):
20
+ """
21
+
22
+ name: Union[Unset, str] = UNSET
23
+ version: Union[Unset, str] = UNSET
24
+ source_url: Union[Unset, str] = UNSET
25
+ description: Union[Unset, str] = UNSET
26
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
27
+
28
+ def to_dict(self) -> dict[str, Any]:
29
+ name = self.name
30
+
31
+ version = self.version
32
+
33
+ source_url = self.source_url
34
+
35
+ description = self.description
36
+
37
+ field_dict: dict[str, Any] = {}
38
+ field_dict.update(self.additional_properties)
39
+ field_dict.update({})
40
+ if name is not UNSET:
41
+ field_dict["name"] = name
42
+ if version is not UNSET:
43
+ field_dict["version"] = version
44
+ if source_url is not UNSET:
45
+ field_dict["source_url"] = source_url
46
+ if description is not UNSET:
47
+ field_dict["description"] = description
48
+
49
+ return field_dict
50
+
51
+ @classmethod
52
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
53
+ d = dict(src_dict)
54
+ name = d.pop("name", UNSET)
55
+
56
+ version = d.pop("version", UNSET)
57
+
58
+ source_url = d.pop("source_url", UNSET)
59
+
60
+ description = d.pop("description", UNSET)
61
+
62
+ patched_software_catalog_request = cls(
63
+ name=name,
64
+ version=version,
65
+ source_url=source_url,
66
+ description=description,
67
+ )
68
+
69
+ patched_software_catalog_request.additional_properties = d
70
+ return patched_software_catalog_request
71
+
72
+ @property
73
+ def additional_keys(self) -> list[str]:
74
+ return list(self.additional_properties.keys())
75
+
76
+ def __getitem__(self, key: str) -> Any:
77
+ return self.additional_properties[key]
78
+
79
+ def __setitem__(self, key: str, value: Any) -> None:
80
+ self.additional_properties[key] = value
81
+
82
+ def __delitem__(self, key: str) -> None:
83
+ del self.additional_properties[key]
84
+
85
+ def __contains__(self, key: str) -> bool:
86
+ return key in self.additional_properties
@@ -0,0 +1,86 @@
1
+ from collections.abc import Mapping
2
+ from typing import Any, TypeVar, Union
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
+ T = TypeVar("T", bound="PatchedSoftwarePackageRequest")
10
+
11
+
12
+ @_attrs_define
13
+ class PatchedSoftwarePackageRequest:
14
+ """
15
+ Attributes:
16
+ catalog (Union[Unset, str]):
17
+ name (Union[Unset, str]):
18
+ description (Union[Unset, str]):
19
+ homepage (Union[Unset, str]):
20
+ """
21
+
22
+ catalog: Union[Unset, str] = UNSET
23
+ name: Union[Unset, str] = UNSET
24
+ description: Union[Unset, str] = UNSET
25
+ homepage: Union[Unset, str] = UNSET
26
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
27
+
28
+ def to_dict(self) -> dict[str, Any]:
29
+ catalog = self.catalog
30
+
31
+ name = self.name
32
+
33
+ description = self.description
34
+
35
+ homepage = self.homepage
36
+
37
+ field_dict: dict[str, Any] = {}
38
+ field_dict.update(self.additional_properties)
39
+ field_dict.update({})
40
+ if catalog is not UNSET:
41
+ field_dict["catalog"] = catalog
42
+ if name is not UNSET:
43
+ field_dict["name"] = name
44
+ if description is not UNSET:
45
+ field_dict["description"] = description
46
+ if homepage is not UNSET:
47
+ field_dict["homepage"] = homepage
48
+
49
+ return field_dict
50
+
51
+ @classmethod
52
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
53
+ d = dict(src_dict)
54
+ catalog = d.pop("catalog", UNSET)
55
+
56
+ name = d.pop("name", UNSET)
57
+
58
+ description = d.pop("description", UNSET)
59
+
60
+ homepage = d.pop("homepage", UNSET)
61
+
62
+ patched_software_package_request = cls(
63
+ catalog=catalog,
64
+ name=name,
65
+ description=description,
66
+ homepage=homepage,
67
+ )
68
+
69
+ patched_software_package_request.additional_properties = d
70
+ return patched_software_package_request
71
+
72
+ @property
73
+ def additional_keys(self) -> list[str]:
74
+ return list(self.additional_properties.keys())
75
+
76
+ def __getitem__(self, key: str) -> Any:
77
+ return self.additional_properties[key]
78
+
79
+ def __setitem__(self, key: str, value: Any) -> None:
80
+ self.additional_properties[key] = value
81
+
82
+ def __delitem__(self, key: str) -> None:
83
+ del self.additional_properties[key]
84
+
85
+ def __contains__(self, key: str) -> bool:
86
+ return key in self.additional_properties
@@ -24,6 +24,8 @@ class PlanComponent:
24
24
  amount (Union[Unset, int]):
25
25
  price (Union[Unset, str]):
26
26
  future_price (Union[None, Unset, str]):
27
+ discount_threshold (Union[None, Unset, int]): Minimum amount to be eligible for discount.
28
+ discount_rate (Union[None, Unset, int]): Discount rate in percentage.
27
29
  """
28
30
 
29
31
  offering_name: str
@@ -35,6 +37,8 @@ class PlanComponent:
35
37
  amount: Union[Unset, int] = UNSET
36
38
  price: Union[Unset, str] = UNSET
37
39
  future_price: Union[None, Unset, str] = UNSET
40
+ discount_threshold: Union[None, Unset, int] = UNSET
41
+ discount_rate: Union[None, Unset, int] = UNSET
38
42
  additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
39
43
 
40
44
  def to_dict(self) -> dict[str, Any]:
@@ -60,6 +64,18 @@ class PlanComponent:
60
64
  else:
61
65
  future_price = self.future_price
62
66
 
67
+ discount_threshold: Union[None, Unset, int]
68
+ if isinstance(self.discount_threshold, Unset):
69
+ discount_threshold = UNSET
70
+ else:
71
+ discount_threshold = self.discount_threshold
72
+
73
+ discount_rate: Union[None, Unset, int]
74
+ if isinstance(self.discount_rate, Unset):
75
+ discount_rate = UNSET
76
+ else:
77
+ discount_rate = self.discount_rate
78
+
63
79
  field_dict: dict[str, Any] = {}
64
80
  field_dict.update(self.additional_properties)
65
81
  field_dict.update(
@@ -78,6 +94,10 @@ class PlanComponent:
78
94
  field_dict["price"] = price
79
95
  if future_price is not UNSET:
80
96
  field_dict["future_price"] = future_price
97
+ if discount_threshold is not UNSET:
98
+ field_dict["discount_threshold"] = discount_threshold
99
+ if discount_rate is not UNSET:
100
+ field_dict["discount_rate"] = discount_rate
81
101
 
82
102
  return field_dict
83
103
 
@@ -109,6 +129,24 @@ class PlanComponent:
109
129
 
110
130
  future_price = _parse_future_price(d.pop("future_price", UNSET))
111
131
 
132
+ def _parse_discount_threshold(data: object) -> Union[None, Unset, int]:
133
+ if data is None:
134
+ return data
135
+ if isinstance(data, Unset):
136
+ return data
137
+ return cast(Union[None, Unset, int], data)
138
+
139
+ discount_threshold = _parse_discount_threshold(d.pop("discount_threshold", UNSET))
140
+
141
+ def _parse_discount_rate(data: object) -> Union[None, Unset, int]:
142
+ if data is None:
143
+ return data
144
+ if isinstance(data, Unset):
145
+ return data
146
+ return cast(Union[None, Unset, int], data)
147
+
148
+ discount_rate = _parse_discount_rate(d.pop("discount_rate", UNSET))
149
+
112
150
  plan_component = cls(
113
151
  offering_name=offering_name,
114
152
  plan_name=plan_name,
@@ -119,6 +157,8 @@ class PlanComponent:
119
157
  amount=amount,
120
158
  price=price,
121
159
  future_price=future_price,
160
+ discount_threshold=discount_threshold,
161
+ discount_rate=discount_rate,
122
162
  )
123
163
 
124
164
  plan_component.additional_properties = d
@@ -51,6 +51,9 @@ class Project:
51
51
  resources_count (Union[Unset, int]):
52
52
  max_service_accounts (Union[None, Unset, int]): Maximum number of service accounts allowed
53
53
  kind (Union[Unset, KindEnum]):
54
+ is_removed (Union[Unset, bool]):
55
+ termination_metadata (Union[Unset, Any]):
56
+ staff_notes (Union[Unset, str]):
54
57
  project_credit (Union[None, Unset, float]):
55
58
  marketplace_resource_count (Union[Unset, ProjectMarketplaceResourceCount]):
56
59
  billing_price_estimate (Union[Unset, NestedPriceEstimate]):
@@ -83,6 +86,9 @@ class Project:
83
86
  resources_count: Union[Unset, int] = UNSET
84
87
  max_service_accounts: Union[None, Unset, int] = UNSET
85
88
  kind: Union[Unset, KindEnum] = UNSET
89
+ is_removed: Union[Unset, bool] = UNSET
90
+ termination_metadata: Union[Unset, Any] = UNSET
91
+ staff_notes: Union[Unset, str] = UNSET
86
92
  project_credit: Union[None, Unset, float] = UNSET
87
93
  marketplace_resource_count: Union[Unset, "ProjectMarketplaceResourceCount"] = UNSET
88
94
  billing_price_estimate: Union[Unset, "NestedPriceEstimate"] = UNSET
@@ -197,6 +203,12 @@ class Project:
197
203
  if not isinstance(self.kind, Unset):
198
204
  kind = self.kind.value
199
205
 
206
+ is_removed = self.is_removed
207
+
208
+ termination_metadata = self.termination_metadata
209
+
210
+ staff_notes = self.staff_notes
211
+
200
212
  project_credit: Union[None, Unset, float]
201
213
  if isinstance(self.project_credit, Unset):
202
214
  project_credit = UNSET
@@ -268,6 +280,12 @@ class Project:
268
280
  field_dict["max_service_accounts"] = max_service_accounts
269
281
  if kind is not UNSET:
270
282
  field_dict["kind"] = kind
283
+ if is_removed is not UNSET:
284
+ field_dict["is_removed"] = is_removed
285
+ if termination_metadata is not UNSET:
286
+ field_dict["termination_metadata"] = termination_metadata
287
+ if staff_notes is not UNSET:
288
+ field_dict["staff_notes"] = staff_notes
271
289
  if project_credit is not UNSET:
272
290
  field_dict["project_credit"] = project_credit
273
291
  if marketplace_resource_count is not UNSET:
@@ -460,6 +478,12 @@ class Project:
460
478
  else:
461
479
  kind = KindEnum(_kind)
462
480
 
481
+ is_removed = d.pop("is_removed", UNSET)
482
+
483
+ termination_metadata = d.pop("termination_metadata", UNSET)
484
+
485
+ staff_notes = d.pop("staff_notes", UNSET)
486
+
463
487
  def _parse_project_credit(data: object) -> Union[None, Unset, float]:
464
488
  if data is None:
465
489
  return data
@@ -511,6 +535,9 @@ class Project:
511
535
  resources_count=resources_count,
512
536
  max_service_accounts=max_service_accounts,
513
537
  kind=kind,
538
+ is_removed=is_removed,
539
+ termination_metadata=termination_metadata,
540
+ staff_notes=staff_notes,
514
541
  project_credit=project_credit,
515
542
  marketplace_resource_count=marketplace_resource_count,
516
543
  billing_price_estimate=billing_price_estimate,
@@ -0,0 +1,70 @@
1
+ from collections.abc import Mapping
2
+ from typing import Any, TypeVar, Union
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
+ T = TypeVar("T", bound="ProjectRecoveryRequest")
10
+
11
+
12
+ @_attrs_define
13
+ class ProjectRecoveryRequest:
14
+ """
15
+ Attributes:
16
+ restore_team_members (Union[Unset, bool]): Whether to automatically restore team members who had access before
17
+ project deletion (staff only) Default: False.
18
+ send_invitations_to_previous_members (Union[Unset, bool]): Whether to send invitations to users who had access
19
+ before project deletion Default: False.
20
+ """
21
+
22
+ restore_team_members: Union[Unset, bool] = False
23
+ send_invitations_to_previous_members: Union[Unset, bool] = False
24
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
25
+
26
+ def to_dict(self) -> dict[str, Any]:
27
+ restore_team_members = self.restore_team_members
28
+
29
+ send_invitations_to_previous_members = self.send_invitations_to_previous_members
30
+
31
+ field_dict: dict[str, Any] = {}
32
+ field_dict.update(self.additional_properties)
33
+ field_dict.update({})
34
+ if restore_team_members is not UNSET:
35
+ field_dict["restore_team_members"] = restore_team_members
36
+ if send_invitations_to_previous_members is not UNSET:
37
+ field_dict["send_invitations_to_previous_members"] = send_invitations_to_previous_members
38
+
39
+ return field_dict
40
+
41
+ @classmethod
42
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
43
+ d = dict(src_dict)
44
+ restore_team_members = d.pop("restore_team_members", UNSET)
45
+
46
+ send_invitations_to_previous_members = d.pop("send_invitations_to_previous_members", UNSET)
47
+
48
+ project_recovery_request = cls(
49
+ restore_team_members=restore_team_members,
50
+ send_invitations_to_previous_members=send_invitations_to_previous_members,
51
+ )
52
+
53
+ project_recovery_request.additional_properties = d
54
+ return project_recovery_request
55
+
56
+ @property
57
+ def additional_keys(self) -> list[str]:
58
+ return list(self.additional_properties.keys())
59
+
60
+ def __getitem__(self, key: str) -> Any:
61
+ return self.additional_properties[key]
62
+
63
+ def __setitem__(self, key: str, value: Any) -> None:
64
+ self.additional_properties[key] = value
65
+
66
+ def __delitem__(self, key: str) -> None:
67
+ del self.additional_properties[key]
68
+
69
+ def __contains__(self, key: str) -> bool:
70
+ return key in self.additional_properties
@@ -32,6 +32,7 @@ class ProjectRequest:
32
32
  is_industry (Union[Unset, bool]):
33
33
  image (Union[File, None, Unset]):
34
34
  kind (Union[Unset, KindEnum]):
35
+ staff_notes (Union[Unset, str]):
35
36
  """
36
37
 
37
38
  name: str
@@ -46,6 +47,7 @@ class ProjectRequest:
46
47
  is_industry: Union[Unset, bool] = UNSET
47
48
  image: Union[File, None, Unset] = UNSET
48
49
  kind: Union[Unset, KindEnum] = UNSET
50
+ staff_notes: Union[Unset, str] = UNSET
49
51
  additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
50
52
 
51
53
  def to_dict(self) -> dict[str, Any]:
@@ -106,6 +108,8 @@ class ProjectRequest:
106
108
  if not isinstance(self.kind, Unset):
107
109
  kind = self.kind.value
108
110
 
111
+ staff_notes = self.staff_notes
112
+
109
113
  field_dict: dict[str, Any] = {}
110
114
  field_dict.update(self.additional_properties)
111
115
  field_dict.update(
@@ -134,6 +138,8 @@ class ProjectRequest:
134
138
  field_dict["image"] = image
135
139
  if kind is not UNSET:
136
140
  field_dict["kind"] = kind
141
+ if staff_notes is not UNSET:
142
+ field_dict["staff_notes"] = staff_notes
137
143
 
138
144
  return field_dict
139
145
 
@@ -244,6 +250,8 @@ class ProjectRequest:
244
250
  else:
245
251
  kind = KindEnum(_kind)
246
252
 
253
+ staff_notes = d.pop("staff_notes", UNSET)
254
+
247
255
  project_request = cls(
248
256
  name=name,
249
257
  customer=customer,
@@ -257,6 +265,7 @@ class ProjectRequest:
257
265
  is_industry=is_industry,
258
266
  image=image,
259
267
  kind=kind,
268
+ staff_notes=staff_notes,
260
269
  )
261
270
 
262
271
  project_request.additional_properties = d
@@ -32,6 +32,7 @@ class ProjectRequestForm:
32
32
  is_industry (Union[Unset, bool]):
33
33
  image (Union[File, None, Unset]):
34
34
  kind (Union[Unset, KindEnum]):
35
+ staff_notes (Union[Unset, str]):
35
36
  """
36
37
 
37
38
  name: str
@@ -46,6 +47,7 @@ class ProjectRequestForm:
46
47
  is_industry: Union[Unset, bool] = UNSET
47
48
  image: Union[File, None, Unset] = UNSET
48
49
  kind: Union[Unset, KindEnum] = UNSET
50
+ staff_notes: Union[Unset, str] = UNSET
49
51
  additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
50
52
 
51
53
  def to_dict(self) -> dict[str, Any]:
@@ -106,6 +108,8 @@ class ProjectRequestForm:
106
108
  if not isinstance(self.kind, Unset):
107
109
  kind = self.kind.value
108
110
 
111
+ staff_notes = self.staff_notes
112
+
109
113
  field_dict: dict[str, Any] = {}
110
114
  field_dict.update(self.additional_properties)
111
115
  field_dict.update(
@@ -134,6 +138,8 @@ class ProjectRequestForm:
134
138
  field_dict["image"] = image
135
139
  if kind is not UNSET:
136
140
  field_dict["kind"] = kind
141
+ if staff_notes is not UNSET:
142
+ field_dict["staff_notes"] = staff_notes
137
143
 
138
144
  return field_dict
139
145
 
@@ -244,6 +250,8 @@ class ProjectRequestForm:
244
250
  else:
245
251
  kind = KindEnum(_kind)
246
252
 
253
+ staff_notes = d.pop("staff_notes", UNSET)
254
+
247
255
  project_request_form = cls(
248
256
  name=name,
249
257
  customer=customer,
@@ -257,6 +265,7 @@ class ProjectRequestForm:
257
265
  is_industry=is_industry,
258
266
  image=image,
259
267
  kind=kind,
268
+ staff_notes=staff_notes,
260
269
  )
261
270
 
262
271
  project_request_form.additional_properties = d
@@ -32,6 +32,7 @@ class ProjectRequestMultipart:
32
32
  is_industry (Union[Unset, bool]):
33
33
  image (Union[File, None, Unset]):
34
34
  kind (Union[Unset, KindEnum]):
35
+ staff_notes (Union[Unset, str]):
35
36
  """
36
37
 
37
38
  name: str
@@ -46,6 +47,7 @@ class ProjectRequestMultipart:
46
47
  is_industry: Union[Unset, bool] = UNSET
47
48
  image: Union[File, None, Unset] = UNSET
48
49
  kind: Union[Unset, KindEnum] = UNSET
50
+ staff_notes: Union[Unset, str] = UNSET
49
51
  additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
50
52
 
51
53
  def to_dict(self) -> dict[str, Any]:
@@ -106,6 +108,8 @@ class ProjectRequestMultipart:
106
108
  if not isinstance(self.kind, Unset):
107
109
  kind = self.kind.value
108
110
 
111
+ staff_notes = self.staff_notes
112
+
109
113
  field_dict: dict[str, Any] = {}
110
114
  field_dict.update(self.additional_properties)
111
115
  field_dict.update(
@@ -134,6 +138,8 @@ class ProjectRequestMultipart:
134
138
  field_dict["image"] = image
135
139
  if kind is not UNSET:
136
140
  field_dict["kind"] = kind
141
+ if staff_notes is not UNSET:
142
+ field_dict["staff_notes"] = staff_notes
137
143
 
138
144
  return field_dict
139
145
 
@@ -193,6 +199,9 @@ class ProjectRequestMultipart:
193
199
  if not isinstance(self.kind, Unset):
194
200
  files.append(("kind", (None, str(self.kind.value).encode(), "text/plain")))
195
201
 
202
+ if not isinstance(self.staff_notes, Unset):
203
+ files.append(("staff_notes", (None, str(self.staff_notes).encode(), "text/plain")))
204
+
196
205
  for prop_name, prop in self.additional_properties.items():
197
206
  files.append((prop_name, (None, str(prop).encode(), "text/plain")))
198
207
 
@@ -305,6 +314,8 @@ class ProjectRequestMultipart:
305
314
  else:
306
315
  kind = KindEnum(_kind)
307
316
 
317
+ staff_notes = d.pop("staff_notes", UNSET)
318
+
308
319
  project_request_multipart = cls(
309
320
  name=name,
310
321
  customer=customer,
@@ -318,6 +329,7 @@ class ProjectRequestMultipart:
318
329
  is_industry=is_industry,
319
330
  image=image,
320
331
  kind=kind,
332
+ staff_notes=staff_notes,
321
333
  )
322
334
 
323
335
  project_request_multipart.additional_properties = d
@@ -24,7 +24,7 @@ class ProjectUser:
24
24
  role (str):
25
25
  expiration_time (Union[None, datetime.datetime]):
26
26
  offering_user_username (Union[None, str]):
27
- offering_user_state (OfferingUserState):
27
+ offering_user_state (Union[None, OfferingUserState]):
28
28
  email (Union[Unset, str]):
29
29
  """
30
30
 
@@ -35,7 +35,7 @@ class ProjectUser:
35
35
  role: str
36
36
  expiration_time: Union[None, datetime.datetime]
37
37
  offering_user_username: Union[None, str]
38
- offering_user_state: OfferingUserState
38
+ offering_user_state: Union[None, OfferingUserState]
39
39
  email: Union[Unset, str] = UNSET
40
40
  additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
41
41
 
@@ -59,7 +59,11 @@ class ProjectUser:
59
59
  offering_user_username: Union[None, str]
60
60
  offering_user_username = self.offering_user_username
61
61
 
62
- offering_user_state = self.offering_user_state.value
62
+ offering_user_state: Union[None, str]
63
+ if isinstance(self.offering_user_state, OfferingUserState):
64
+ offering_user_state = self.offering_user_state.value
65
+ else:
66
+ offering_user_state = self.offering_user_state
63
67
 
64
68
  email = self.email
65
69
 
@@ -117,7 +121,20 @@ class ProjectUser:
117
121
 
118
122
  offering_user_username = _parse_offering_user_username(d.pop("offering_user_username"))
119
123
 
120
- offering_user_state = OfferingUserState(d.pop("offering_user_state"))
124
+ def _parse_offering_user_state(data: object) -> Union[None, OfferingUserState]:
125
+ if data is None:
126
+ return data
127
+ try:
128
+ if not isinstance(data, str):
129
+ raise TypeError()
130
+ offering_user_state_type_0 = OfferingUserState(data)
131
+
132
+ return offering_user_state_type_0
133
+ except: # noqa: E722
134
+ pass
135
+ return cast(Union[None, OfferingUserState], data)
136
+
137
+ offering_user_state = _parse_offering_user_state(d.pop("offering_user_state"))
121
138
 
122
139
  email = d.pop("email", UNSET)
123
140