frameio 0.0.23__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 frameio might be problematic. Click here for more details.

Files changed (363) hide show
  1. frameio/__init__.py +1115 -0
  2. frameio/account_permissions/__init__.py +4 -0
  3. frameio/account_permissions/client.py +182 -0
  4. frameio/account_permissions/raw_client.py +301 -0
  5. frameio/accounts/__init__.py +4 -0
  6. frameio/accounts/client.py +151 -0
  7. frameio/accounts/raw_client.py +281 -0
  8. frameio/client.py +439 -0
  9. frameio/comments/__init__.py +34 -0
  10. frameio/comments/client.py +596 -0
  11. frameio/comments/raw_client.py +1252 -0
  12. frameio/comments/types/__init__.py +38 -0
  13. frameio/comments/types/create_comment_params_data.py +25 -0
  14. frameio/comments/types/update_comment_params_data.py +25 -0
  15. frameio/core/__init__.py +110 -0
  16. frameio/core/api_error.py +23 -0
  17. frameio/core/client_wrapper.py +87 -0
  18. frameio/core/datetime_utils.py +28 -0
  19. frameio/core/file.py +67 -0
  20. frameio/core/force_multipart.py +18 -0
  21. frameio/core/http_client.py +543 -0
  22. frameio/core/http_response.py +55 -0
  23. frameio/core/jsonable_encoder.py +100 -0
  24. frameio/core/pagination.py +82 -0
  25. frameio/core/pydantic_utilities.py +258 -0
  26. frameio/core/query_encoder.py +58 -0
  27. frameio/core/remove_none_from_dict.py +11 -0
  28. frameio/core/request_options.py +35 -0
  29. frameio/core/serialization.py +276 -0
  30. frameio/environment.py +7 -0
  31. frameio/errors/__init__.py +53 -0
  32. frameio/errors/bad_request_error.py +11 -0
  33. frameio/errors/forbidden_error.py +11 -0
  34. frameio/errors/not_found_error.py +11 -0
  35. frameio/errors/too_many_requests_error.py +11 -0
  36. frameio/errors/unauthorized_error.py +11 -0
  37. frameio/errors/unprocessable_entity_error.py +10 -0
  38. frameio/files/__init__.py +55 -0
  39. frameio/files/client.py +1136 -0
  40. frameio/files/raw_client.py +2492 -0
  41. frameio/files/types/__init__.py +53 -0
  42. frameio/files/types/file_copy_params_data.py +15 -0
  43. frameio/files/types/file_create_local_upload_params_data.py +20 -0
  44. frameio/files/types/file_create_params_data.py +31 -0
  45. frameio/files/types/file_create_remote_upload_params_data.py +20 -0
  46. frameio/files/types/file_move_params_data.py +15 -0
  47. frameio/files/types/file_update_params_data.py +15 -0
  48. frameio/folders/__init__.py +39 -0
  49. frameio/folders/client.py +988 -0
  50. frameio/folders/raw_client.py +2058 -0
  51. frameio/folders/types/__init__.py +42 -0
  52. frameio/folders/types/folder_copy_params_data.py +15 -0
  53. frameio/folders/types/folder_create_params_data.py +15 -0
  54. frameio/folders/types/folder_move_params_data.py +15 -0
  55. frameio/folders/types/folder_update_params_data.py +15 -0
  56. frameio/metadata/__init__.py +37 -0
  57. frameio/metadata/client.py +291 -0
  58. frameio/metadata/raw_client.py +509 -0
  59. frameio/metadata/types/__init__.py +38 -0
  60. frameio/metadata/types/bulk_update_metadata_params_data.py +23 -0
  61. frameio/metadata/types/bulk_update_metadata_params_data_values_item.py +13 -0
  62. frameio/metadata_fields/__init__.py +103 -0
  63. frameio/metadata_fields/client.py +536 -0
  64. frameio/metadata_fields/raw_client.py +996 -0
  65. frameio/metadata_fields/types/__init__.py +105 -0
  66. frameio/metadata_fields/types/create_field_definition_params_data.py +108 -0
  67. frameio/metadata_fields/types/update_field_definition_params_data.py +114 -0
  68. frameio/project_permissions/__init__.py +4 -0
  69. frameio/project_permissions/client.py +415 -0
  70. frameio/project_permissions/raw_client.py +789 -0
  71. frameio/projects/__init__.py +4 -0
  72. frameio/projects/client.py +582 -0
  73. frameio/projects/raw_client.py +1250 -0
  74. frameio/py.typed +0 -0
  75. frameio/shares/__init__.py +64 -0
  76. frameio/shares/client.py +1192 -0
  77. frameio/shares/raw_client.py +2446 -0
  78. frameio/shares/types/__init__.py +61 -0
  79. frameio/shares/types/add_asset_params_data.py +15 -0
  80. frameio/shares/types/add_reviewers_to_share_params_data.py +18 -0
  81. frameio/shares/types/add_reviewers_to_share_params_data_reviewers.py +27 -0
  82. frameio/shares/types/create_share_params_data.py +25 -0
  83. frameio/shares/types/remove_reviewer_params_data.py +13 -0
  84. frameio/shares/types/remove_reviewer_params_data_reviewers.py +27 -0
  85. frameio/shares/types/update_share_params_data.py +33 -0
  86. frameio/shares/types/update_share_params_data_access.py +5 -0
  87. frameio/types/__init__.py +959 -0
  88. frameio/types/account.py +65 -0
  89. frameio/types/account_roles_item.py +5 -0
  90. frameio/types/account_user_role.py +23 -0
  91. frameio/types/account_user_role_role.py +5 -0
  92. frameio/types/account_user_roles_response.py +27 -0
  93. frameio/types/accounts_response.py +23 -0
  94. frameio/types/add_asset_response.py +13 -0
  95. frameio/types/add_asset_response_data.py +15 -0
  96. frameio/types/asset_common.py +48 -0
  97. frameio/types/asset_common_type.py +5 -0
  98. frameio/types/asset_common_with_includes.py +56 -0
  99. frameio/types/asset_include.py +5 -0
  100. frameio/types/asset_share_params.py +38 -0
  101. frameio/types/asset_share_params_access.py +5 -0
  102. frameio/types/asset_with_includes.py +72 -0
  103. frameio/types/assets_with_includes_response.py +23 -0
  104. frameio/types/bad_request.py +13 -0
  105. frameio/types/bad_request_errors_item.py +15 -0
  106. frameio/types/bad_request_errors_item_source.py +12 -0
  107. frameio/types/boolean_value.py +12 -0
  108. frameio/types/children_type.py +3 -0
  109. frameio/types/comment.py +52 -0
  110. frameio/types/comment_include.py +5 -0
  111. frameio/types/comment_response.py +13 -0
  112. frameio/types/comment_with_includes.py +17 -0
  113. frameio/types/comment_with_includes_response.py +13 -0
  114. frameio/types/comments_with_includes_response.py +23 -0
  115. frameio/types/date_definition.py +43 -0
  116. frameio/types/date_definition_field_configuration.py +21 -0
  117. frameio/types/date_definition_field_configuration_display_format.py +7 -0
  118. frameio/types/date_definition_field_configuration_time_format.py +5 -0
  119. frameio/types/date_definition_params.py +17 -0
  120. frameio/types/date_definition_params_field_configuration.py +23 -0
  121. frameio/types/date_definition_params_field_configuration_display_format.py +7 -0
  122. frameio/types/date_definition_params_field_configuration_time_format.py +7 -0
  123. frameio/types/date_definition_with_includes.py +13 -0
  124. frameio/types/date_value.py +12 -0
  125. frameio/types/email.py +3 -0
  126. frameio/types/field_definition.py +163 -0
  127. frameio/types/field_definition_include.py +5 -0
  128. frameio/types/field_definition_response.py +13 -0
  129. frameio/types/field_definition_with_includes.py +174 -0
  130. frameio/types/field_definitions_with_includes_response.py +27 -0
  131. frameio/types/field_value_common.py +29 -0
  132. frameio/types/file.py +60 -0
  133. frameio/types/file_copy_response.py +13 -0
  134. frameio/types/file_remote_upload_response.py +17 -0
  135. frameio/types/file_response.py +13 -0
  136. frameio/types/file_status.py +5 -0
  137. frameio/types/file_upload_status.py +41 -0
  138. frameio/types/file_upload_status_response.py +13 -0
  139. frameio/types/file_with_includes.py +25 -0
  140. frameio/types/file_with_includes_response.py +13 -0
  141. frameio/types/file_with_includes_status.py +5 -0
  142. frameio/types/file_with_media_links_include.py +19 -0
  143. frameio/types/file_with_upload_urls.py +16 -0
  144. frameio/types/file_with_upload_urls_response.py +13 -0
  145. frameio/types/folder.py +15 -0
  146. frameio/types/folder_copy_response.py +13 -0
  147. frameio/types/folder_response.py +13 -0
  148. frameio/types/folder_with_includes.py +61 -0
  149. frameio/types/folder_with_includes_response.py +13 -0
  150. frameio/types/folders_with_includes_response.py +23 -0
  151. frameio/types/forbidden.py +13 -0
  152. frameio/types/forbidden_errors_item.py +15 -0
  153. frameio/types/forbidden_errors_item_source.py +12 -0
  154. frameio/types/include.py +5 -0
  155. frameio/types/include_total_count.py +3 -0
  156. frameio/types/integer_value.py +12 -0
  157. frameio/types/json_error_response.py +13 -0
  158. frameio/types/json_error_response_errors_item.py +15 -0
  159. frameio/types/json_error_response_errors_item_source.py +12 -0
  160. frameio/types/links.py +22 -0
  161. frameio/types/long_text_definition.py +43 -0
  162. frameio/types/long_text_definition_field_configuration.py +10 -0
  163. frameio/types/long_text_definition_params.py +15 -0
  164. frameio/types/long_text_definition_with_includes.py +13 -0
  165. frameio/types/media_link_common.py +17 -0
  166. frameio/types/media_links_collection.py +23 -0
  167. frameio/types/metadata_field.py +145 -0
  168. frameio/types/metadata_response.py +13 -0
  169. frameio/types/metadata_with_definition.py +21 -0
  170. frameio/types/multi_select_value.py +14 -0
  171. frameio/types/multi_user_value.py +20 -0
  172. frameio/types/multi_user_value_member_options_type.py +5 -0
  173. frameio/types/no_content.py +3 -0
  174. frameio/types/not_found.py +13 -0
  175. frameio/types/not_found_errors_item.py +15 -0
  176. frameio/types/not_found_errors_item_source.py +12 -0
  177. frameio/types/number_definition.py +43 -0
  178. frameio/types/number_definition_field_configuration.py +21 -0
  179. frameio/types/number_definition_field_configuration_number_format.py +7 -0
  180. frameio/types/number_definition_params.py +17 -0
  181. frameio/types/number_definition_params_field_configuration.py +23 -0
  182. frameio/types/number_definition_params_field_configuration_number_format.py +7 -0
  183. frameio/types/number_definition_with_includes.py +13 -0
  184. frameio/types/number_value.py +12 -0
  185. frameio/types/original_media_link.py +16 -0
  186. frameio/types/profile.py +34 -0
  187. frameio/types/profile_response.py +17 -0
  188. frameio/types/project.py +55 -0
  189. frameio/types/project_include.py +5 -0
  190. frameio/types/project_params.py +17 -0
  191. frameio/types/project_params_data.py +15 -0
  192. frameio/types/project_response.py +17 -0
  193. frameio/types/project_with_includes.py +18 -0
  194. frameio/types/project_with_includes_response.py +17 -0
  195. frameio/types/projects_with_includes_response.py +27 -0
  196. frameio/types/rating_definition.py +43 -0
  197. frameio/types/rating_definition_field_configuration.py +22 -0
  198. frameio/types/rating_definition_field_configuration_style.py +5 -0
  199. frameio/types/rating_definition_params.py +17 -0
  200. frameio/types/rating_definition_params_field_configuration.py +22 -0
  201. frameio/types/rating_definition_params_field_configuration_style.py +5 -0
  202. frameio/types/rating_definition_with_includes.py +13 -0
  203. frameio/types/remove_asset_response.py +13 -0
  204. frameio/types/remove_asset_response_data.py +15 -0
  205. frameio/types/rendition_media_link.py +19 -0
  206. frameio/types/request_after_opaque_cursor.py +5 -0
  207. frameio/types/request_page_size.py +3 -0
  208. frameio/types/select_definition.py +43 -0
  209. frameio/types/select_definition_field_configuration.py +18 -0
  210. frameio/types/select_definition_field_configuration_options_item.py +22 -0
  211. frameio/types/select_definition_params.py +17 -0
  212. frameio/types/select_definition_params_field_configuration.py +20 -0
  213. frameio/types/select_definition_params_field_configuration_options_item.py +20 -0
  214. frameio/types/select_definition_with_includes.py +13 -0
  215. frameio/types/select_multi_definition.py +43 -0
  216. frameio/types/select_multi_definition_field_configuration.py +18 -0
  217. frameio/types/select_multi_definition_field_configuration_options_item.py +22 -0
  218. frameio/types/select_multi_definition_params.py +17 -0
  219. frameio/types/select_multi_definition_params_field_configuration.py +20 -0
  220. frameio/types/select_multi_definition_params_field_configuration_options_item.py +20 -0
  221. frameio/types/select_multi_definition_with_includes.py +13 -0
  222. frameio/types/select_option.py +20 -0
  223. frameio/types/select_value.py +14 -0
  224. frameio/types/share.py +66 -0
  225. frameio/types/share_access.py +5 -0
  226. frameio/types/share_response.py +13 -0
  227. frameio/types/share_reviewers_response.py +27 -0
  228. frameio/types/shares_response.py +27 -0
  229. frameio/types/single_user_value.py +20 -0
  230. frameio/types/single_user_value_member_options_type.py +5 -0
  231. frameio/types/text_definition.py +43 -0
  232. frameio/types/text_definition_field_configuration.py +10 -0
  233. frameio/types/text_definition_params.py +15 -0
  234. frameio/types/text_definition_with_includes.py +13 -0
  235. frameio/types/text_value.py +12 -0
  236. frameio/types/toggle_definition.py +43 -0
  237. frameio/types/toggle_definition_field_configuration.py +15 -0
  238. frameio/types/toggle_definition_params.py +17 -0
  239. frameio/types/toggle_definition_params_field_configuration.py +15 -0
  240. frameio/types/toggle_definition_with_includes.py +13 -0
  241. frameio/types/too_many_requests.py +13 -0
  242. frameio/types/too_many_requests_errors_item.py +15 -0
  243. frameio/types/too_many_requests_errors_item_source.py +12 -0
  244. frameio/types/unauthorized.py +13 -0
  245. frameio/types/unauthorized_errors_item.py +15 -0
  246. frameio/types/unauthorized_errors_item_source.py +12 -0
  247. frameio/types/unprocessable_entity.py +13 -0
  248. frameio/types/unprocessable_entity_errors_item.py +15 -0
  249. frameio/types/unprocessable_entity_errors_item_source.py +12 -0
  250. frameio/types/update_date_definition_params.py +17 -0
  251. frameio/types/update_date_definition_params_field_configuration.py +25 -0
  252. frameio/types/update_date_definition_params_field_configuration_display_format.py +7 -0
  253. frameio/types/update_date_definition_params_field_configuration_time_format.py +7 -0
  254. frameio/types/update_long_text_definition_params.py +15 -0
  255. frameio/types/update_number_definition_params.py +17 -0
  256. frameio/types/update_number_definition_params_field_configuration.py +25 -0
  257. frameio/types/update_number_definition_params_field_configuration_number_format.py +7 -0
  258. frameio/types/update_rating_definition_params.py +17 -0
  259. frameio/types/update_rating_definition_params_field_configuration.py +24 -0
  260. frameio/types/update_rating_definition_params_field_configuration_style.py +7 -0
  261. frameio/types/update_select_definition_params.py +17 -0
  262. frameio/types/update_select_definition_params_field_configuration.py +20 -0
  263. frameio/types/update_select_definition_params_field_configuration_options_item.py +20 -0
  264. frameio/types/update_select_multi_definition_params.py +19 -0
  265. frameio/types/update_select_multi_definition_params_field_configuration.py +20 -0
  266. frameio/types/update_select_multi_definition_params_field_configuration_options_item.py +20 -0
  267. frameio/types/update_text_definition_params.py +15 -0
  268. frameio/types/update_toggle_definition_params.py +17 -0
  269. frameio/types/update_toggle_definition_params_field_configuration.py +15 -0
  270. frameio/types/update_user_multi_definition_params.py +17 -0
  271. frameio/types/update_user_multi_definition_params_field_configuration.py +25 -0
  272. frameio/types/update_user_multi_definition_params_field_configuration_custom_members_item.py +20 -0
  273. frameio/types/update_user_multi_definition_params_field_configuration_custom_members_item_type.py +7 -0
  274. frameio/types/update_user_multi_definition_params_field_configuration_member_options_type.py +7 -0
  275. frameio/types/update_user_roles_params.py +17 -0
  276. frameio/types/update_user_roles_params_data.py +13 -0
  277. frameio/types/update_user_roles_params_data_role.py +7 -0
  278. frameio/types/update_user_roles_response.py +13 -0
  279. frameio/types/update_user_roles_response_data.py +13 -0
  280. frameio/types/update_user_roles_response_data_role.py +7 -0
  281. frameio/types/update_user_single_definition_params.py +17 -0
  282. frameio/types/update_user_single_definition_params_field_configuration.py +25 -0
  283. frameio/types/update_user_single_definition_params_field_configuration_custom_members_item.py +20 -0
  284. frameio/types/update_user_single_definition_params_field_configuration_custom_members_item_type.py +7 -0
  285. frameio/types/update_user_single_definition_params_field_configuration_member_options_type.py +7 -0
  286. frameio/types/upload_url.py +20 -0
  287. frameio/types/user.py +44 -0
  288. frameio/types/user_multi_definition.py +43 -0
  289. frameio/types/user_multi_definition_field_configuration.py +23 -0
  290. frameio/types/user_multi_definition_field_configuration_custom_members_item.py +20 -0
  291. frameio/types/user_multi_definition_field_configuration_custom_members_item_type.py +7 -0
  292. frameio/types/user_multi_definition_field_configuration_member_options_type.py +7 -0
  293. frameio/types/user_multi_definition_params.py +17 -0
  294. frameio/types/user_multi_definition_params_field_configuration.py +23 -0
  295. frameio/types/user_multi_definition_params_field_configuration_custom_members_item.py +20 -0
  296. frameio/types/user_multi_definition_params_field_configuration_custom_members_item_type.py +7 -0
  297. frameio/types/user_multi_definition_params_field_configuration_member_options_type.py +7 -0
  298. frameio/types/user_multi_definition_with_includes.py +13 -0
  299. frameio/types/user_role.py +19 -0
  300. frameio/types/user_role_role.py +7 -0
  301. frameio/types/user_roles_response.py +27 -0
  302. frameio/types/user_single_definition.py +43 -0
  303. frameio/types/user_single_definition_field_configuration.py +23 -0
  304. frameio/types/user_single_definition_field_configuration_custom_members_item.py +20 -0
  305. frameio/types/user_single_definition_field_configuration_custom_members_item_type.py +7 -0
  306. frameio/types/user_single_definition_field_configuration_member_options_type.py +7 -0
  307. frameio/types/user_single_definition_params.py +17 -0
  308. frameio/types/user_single_definition_params_field_configuration.py +23 -0
  309. frameio/types/user_single_definition_params_field_configuration_custom_members_item.py +20 -0
  310. frameio/types/user_single_definition_params_field_configuration_custom_members_item_type.py +7 -0
  311. frameio/types/user_single_definition_params_field_configuration_member_options_type.py +7 -0
  312. frameio/types/user_single_definition_with_includes.py +13 -0
  313. frameio/types/user_value.py +18 -0
  314. frameio/types/user_value_type.py +5 -0
  315. frameio/types/uuid_.py +3 -0
  316. frameio/types/version_stack.py +50 -0
  317. frameio/types/version_stack_copy_response.py +13 -0
  318. frameio/types/version_stack_response.py +13 -0
  319. frameio/types/version_stack_with_includes.py +58 -0
  320. frameio/types/version_stack_with_includes_response.py +13 -0
  321. frameio/types/version_stacks_with_includes_response.py +19 -0
  322. frameio/types/webhook.py +36 -0
  323. frameio/types/webhook_create_response.py +17 -0
  324. frameio/types/webhook_create_response_data.py +15 -0
  325. frameio/types/webhook_events.py +5 -0
  326. frameio/types/webhook_response.py +13 -0
  327. frameio/types/webhook_with_includes.py +13 -0
  328. frameio/types/webhook_with_includes_response.py +13 -0
  329. frameio/types/webhooks_with_includes_response.py +23 -0
  330. frameio/types/workspace.py +40 -0
  331. frameio/types/workspace_include.py +5 -0
  332. frameio/types/workspace_params.py +17 -0
  333. frameio/types/workspace_params_data.py +15 -0
  334. frameio/types/workspace_response.py +17 -0
  335. frameio/types/workspace_with_includes.py +13 -0
  336. frameio/types/workspace_with_includes_response.py +17 -0
  337. frameio/types/workspaces_with_includes_response.py +27 -0
  338. frameio/users/__init__.py +4 -0
  339. frameio/users/client.py +100 -0
  340. frameio/users/raw_client.py +234 -0
  341. frameio/version.py +3 -0
  342. frameio/version_stacks/__init__.py +38 -0
  343. frameio/version_stacks/client.py +699 -0
  344. frameio/version_stacks/raw_client.py +1359 -0
  345. frameio/version_stacks/types/__init__.py +40 -0
  346. frameio/version_stacks/types/version_stack_copy_params_data.py +15 -0
  347. frameio/version_stacks/types/version_stack_create_params_data.py +19 -0
  348. frameio/version_stacks/types/version_stack_move_params_data.py +15 -0
  349. frameio/webhooks/__init__.py +34 -0
  350. frameio/webhooks/client.py +782 -0
  351. frameio/webhooks/raw_client.py +1312 -0
  352. frameio/webhooks/types/__init__.py +38 -0
  353. frameio/webhooks/types/webhook_create_params_data.py +18 -0
  354. frameio/webhooks/types/webhook_update_params_data.py +23 -0
  355. frameio/workspace_permissions/__init__.py +4 -0
  356. frameio/workspace_permissions/client.py +419 -0
  357. frameio/workspace_permissions/raw_client.py +789 -0
  358. frameio/workspaces/__init__.py +4 -0
  359. frameio/workspaces/client.py +552 -0
  360. frameio/workspaces/raw_client.py +1226 -0
  361. frameio-0.0.23.dist-info/METADATA +255 -0
  362. frameio-0.0.23.dist-info/RECORD +363 -0
  363. frameio-0.0.23.dist-info/WHEEL +4 -0
@@ -0,0 +1,789 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+ from json.decoder import JSONDecodeError
5
+
6
+ from ..core.api_error import ApiError
7
+ from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
8
+ from ..core.http_response import AsyncHttpResponse, HttpResponse
9
+ from ..core.jsonable_encoder import jsonable_encoder
10
+ from ..core.pydantic_utilities import parse_obj_as
11
+ from ..core.request_options import RequestOptions
12
+ from ..core.serialization import convert_and_respect_annotation_metadata
13
+ from ..errors.bad_request_error import BadRequestError
14
+ from ..errors.forbidden_error import ForbiddenError
15
+ from ..errors.not_found_error import NotFoundError
16
+ from ..errors.too_many_requests_error import TooManyRequestsError
17
+ from ..errors.unauthorized_error import UnauthorizedError
18
+ from ..errors.unprocessable_entity_error import UnprocessableEntityError
19
+ from ..types.bad_request import BadRequest
20
+ from ..types.forbidden import Forbidden
21
+ from ..types.include_total_count import IncludeTotalCount
22
+ from ..types.not_found import NotFound
23
+ from ..types.request_after_opaque_cursor import RequestAfterOpaqueCursor
24
+ from ..types.request_page_size import RequestPageSize
25
+ from ..types.too_many_requests import TooManyRequests
26
+ from ..types.unauthorized import Unauthorized
27
+ from ..types.update_user_roles_params_data import UpdateUserRolesParamsData
28
+ from ..types.update_user_roles_response import UpdateUserRolesResponse
29
+ from ..types.user_roles_response import UserRolesResponse
30
+ from ..types.uuid_ import Uuid
31
+
32
+ # this is used as the default value for optional parameters
33
+ OMIT = typing.cast(typing.Any, ...)
34
+
35
+
36
+ class RawProjectPermissionsClient:
37
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
38
+ self._client_wrapper = client_wrapper
39
+
40
+ def index(
41
+ self,
42
+ account_id: Uuid,
43
+ project_id: Uuid,
44
+ *,
45
+ include_deactivated: typing.Optional[bool] = None,
46
+ after: typing.Optional[RequestAfterOpaqueCursor] = None,
47
+ page_size: typing.Optional[RequestPageSize] = None,
48
+ include_total_count: typing.Optional[IncludeTotalCount] = None,
49
+ request_options: typing.Optional[RequestOptions] = None,
50
+ ) -> HttpResponse[UserRolesResponse]:
51
+ """
52
+ List user roles for a given project. <br><br>Rate Limits: 100 calls per 1.00 minute(s) per account
53
+
54
+ Parameters
55
+ ----------
56
+ account_id : Uuid
57
+
58
+
59
+ project_id : Uuid
60
+
61
+
62
+ include_deactivated : typing.Optional[bool]
63
+ Supports including deactivated users in the response. Default is false.
64
+
65
+ after : typing.Optional[RequestAfterOpaqueCursor]
66
+ Opaque Cursor query param for requests returning paginated results.
67
+ <br/>
68
+ NOTE: this value is auto-generated and included as part of links from a previous response. It is not intended to be human readable.
69
+
70
+ page_size : typing.Optional[RequestPageSize]
71
+
72
+
73
+ include_total_count : typing.Optional[IncludeTotalCount]
74
+
75
+
76
+ request_options : typing.Optional[RequestOptions]
77
+ Request-specific configuration.
78
+
79
+ Returns
80
+ -------
81
+ HttpResponse[UserRolesResponse]
82
+ OK
83
+ """
84
+ _response = self._client_wrapper.httpx_client.request(
85
+ f"v4/accounts/{jsonable_encoder(account_id)}/projects/{jsonable_encoder(project_id)}/users",
86
+ method="GET",
87
+ params={
88
+ "include_deactivated": include_deactivated,
89
+ "after": after,
90
+ "page_size": page_size,
91
+ "include_total_count": include_total_count,
92
+ },
93
+ request_options=request_options,
94
+ )
95
+ try:
96
+ if 200 <= _response.status_code < 300:
97
+ _data = typing.cast(
98
+ UserRolesResponse,
99
+ parse_obj_as(
100
+ type_=UserRolesResponse, # type: ignore
101
+ object_=_response.json(),
102
+ ),
103
+ )
104
+ return HttpResponse(response=_response, data=_data)
105
+ if _response.status_code == 400:
106
+ raise BadRequestError(
107
+ headers=dict(_response.headers),
108
+ body=typing.cast(
109
+ BadRequest,
110
+ parse_obj_as(
111
+ type_=BadRequest, # type: ignore
112
+ object_=_response.json(),
113
+ ),
114
+ ),
115
+ )
116
+ if _response.status_code == 401:
117
+ raise UnauthorizedError(
118
+ headers=dict(_response.headers),
119
+ body=typing.cast(
120
+ Unauthorized,
121
+ parse_obj_as(
122
+ type_=Unauthorized, # type: ignore
123
+ object_=_response.json(),
124
+ ),
125
+ ),
126
+ )
127
+ if _response.status_code == 403:
128
+ raise ForbiddenError(
129
+ headers=dict(_response.headers),
130
+ body=typing.cast(
131
+ Forbidden,
132
+ parse_obj_as(
133
+ type_=Forbidden, # type: ignore
134
+ object_=_response.json(),
135
+ ),
136
+ ),
137
+ )
138
+ if _response.status_code == 404:
139
+ raise NotFoundError(
140
+ headers=dict(_response.headers),
141
+ body=typing.cast(
142
+ NotFound,
143
+ parse_obj_as(
144
+ type_=NotFound, # type: ignore
145
+ object_=_response.json(),
146
+ ),
147
+ ),
148
+ )
149
+ if _response.status_code == 422:
150
+ raise UnprocessableEntityError(
151
+ headers=dict(_response.headers),
152
+ body=typing.cast(
153
+ typing.Optional[typing.Any],
154
+ parse_obj_as(
155
+ type_=typing.Optional[typing.Any], # type: ignore
156
+ object_=_response.json(),
157
+ ),
158
+ ),
159
+ )
160
+ if _response.status_code == 429:
161
+ raise TooManyRequestsError(
162
+ headers=dict(_response.headers),
163
+ body=typing.cast(
164
+ TooManyRequests,
165
+ parse_obj_as(
166
+ type_=TooManyRequests, # type: ignore
167
+ object_=_response.json(),
168
+ ),
169
+ ),
170
+ )
171
+ _response_json = _response.json()
172
+ except JSONDecodeError:
173
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
174
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
175
+
176
+ def delete(
177
+ self,
178
+ account_id: Uuid,
179
+ project_id: Uuid,
180
+ user_id: Uuid,
181
+ *,
182
+ request_options: typing.Optional[RequestOptions] = None,
183
+ ) -> HttpResponse[None]:
184
+ """
185
+ Remove a user from a given project. <br><br>Rate Limits: 60 calls per 1.00 minute(s) per account
186
+
187
+ Parameters
188
+ ----------
189
+ account_id : Uuid
190
+
191
+
192
+ project_id : Uuid
193
+
194
+
195
+ user_id : Uuid
196
+
197
+
198
+ request_options : typing.Optional[RequestOptions]
199
+ Request-specific configuration.
200
+
201
+ Returns
202
+ -------
203
+ HttpResponse[None]
204
+ """
205
+ _response = self._client_wrapper.httpx_client.request(
206
+ f"v4/accounts/{jsonable_encoder(account_id)}/projects/{jsonable_encoder(project_id)}/users/{jsonable_encoder(user_id)}",
207
+ method="DELETE",
208
+ request_options=request_options,
209
+ )
210
+ try:
211
+ if 200 <= _response.status_code < 300:
212
+ return HttpResponse(response=_response, data=None)
213
+ if _response.status_code == 400:
214
+ raise BadRequestError(
215
+ headers=dict(_response.headers),
216
+ body=typing.cast(
217
+ BadRequest,
218
+ parse_obj_as(
219
+ type_=BadRequest, # type: ignore
220
+ object_=_response.json(),
221
+ ),
222
+ ),
223
+ )
224
+ if _response.status_code == 401:
225
+ raise UnauthorizedError(
226
+ headers=dict(_response.headers),
227
+ body=typing.cast(
228
+ Unauthorized,
229
+ parse_obj_as(
230
+ type_=Unauthorized, # type: ignore
231
+ object_=_response.json(),
232
+ ),
233
+ ),
234
+ )
235
+ if _response.status_code == 403:
236
+ raise ForbiddenError(
237
+ headers=dict(_response.headers),
238
+ body=typing.cast(
239
+ Forbidden,
240
+ parse_obj_as(
241
+ type_=Forbidden, # type: ignore
242
+ object_=_response.json(),
243
+ ),
244
+ ),
245
+ )
246
+ if _response.status_code == 404:
247
+ raise NotFoundError(
248
+ headers=dict(_response.headers),
249
+ body=typing.cast(
250
+ NotFound,
251
+ parse_obj_as(
252
+ type_=NotFound, # type: ignore
253
+ object_=_response.json(),
254
+ ),
255
+ ),
256
+ )
257
+ if _response.status_code == 422:
258
+ raise UnprocessableEntityError(
259
+ headers=dict(_response.headers),
260
+ body=typing.cast(
261
+ typing.Optional[typing.Any],
262
+ parse_obj_as(
263
+ type_=typing.Optional[typing.Any], # type: ignore
264
+ object_=_response.json(),
265
+ ),
266
+ ),
267
+ )
268
+ if _response.status_code == 429:
269
+ raise TooManyRequestsError(
270
+ headers=dict(_response.headers),
271
+ body=typing.cast(
272
+ TooManyRequests,
273
+ parse_obj_as(
274
+ type_=TooManyRequests, # type: ignore
275
+ object_=_response.json(),
276
+ ),
277
+ ),
278
+ )
279
+ _response_json = _response.json()
280
+ except JSONDecodeError:
281
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
282
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
283
+
284
+ def project_user_roles_update(
285
+ self,
286
+ account_id: Uuid,
287
+ project_id: Uuid,
288
+ user_id: Uuid,
289
+ *,
290
+ data: UpdateUserRolesParamsData,
291
+ request_options: typing.Optional[RequestOptions] = None,
292
+ ) -> HttpResponse[UpdateUserRolesResponse]:
293
+ """
294
+ Update user roles for the given project if the user is already added to the project. If the user is
295
+ not added to the project, the user will be added with the given role. <br><br>Rate Limits: 10 calls per 1.00 minute(s) per account
296
+
297
+ Parameters
298
+ ----------
299
+ account_id : Uuid
300
+
301
+
302
+ project_id : Uuid
303
+
304
+
305
+ user_id : Uuid
306
+
307
+
308
+ data : UpdateUserRolesParamsData
309
+
310
+ request_options : typing.Optional[RequestOptions]
311
+ Request-specific configuration.
312
+
313
+ Returns
314
+ -------
315
+ HttpResponse[UpdateUserRolesResponse]
316
+ OK
317
+ """
318
+ _response = self._client_wrapper.httpx_client.request(
319
+ f"v4/accounts/{jsonable_encoder(account_id)}/projects/{jsonable_encoder(project_id)}/users/{jsonable_encoder(user_id)}",
320
+ method="PATCH",
321
+ json={
322
+ "data": convert_and_respect_annotation_metadata(
323
+ object_=data, annotation=UpdateUserRolesParamsData, direction="write"
324
+ ),
325
+ },
326
+ headers={
327
+ "content-type": "application/json",
328
+ },
329
+ request_options=request_options,
330
+ omit=OMIT,
331
+ )
332
+ try:
333
+ if 200 <= _response.status_code < 300:
334
+ _data = typing.cast(
335
+ UpdateUserRolesResponse,
336
+ parse_obj_as(
337
+ type_=UpdateUserRolesResponse, # type: ignore
338
+ object_=_response.json(),
339
+ ),
340
+ )
341
+ return HttpResponse(response=_response, data=_data)
342
+ if _response.status_code == 400:
343
+ raise BadRequestError(
344
+ headers=dict(_response.headers),
345
+ body=typing.cast(
346
+ BadRequest,
347
+ parse_obj_as(
348
+ type_=BadRequest, # type: ignore
349
+ object_=_response.json(),
350
+ ),
351
+ ),
352
+ )
353
+ if _response.status_code == 401:
354
+ raise UnauthorizedError(
355
+ headers=dict(_response.headers),
356
+ body=typing.cast(
357
+ Unauthorized,
358
+ parse_obj_as(
359
+ type_=Unauthorized, # type: ignore
360
+ object_=_response.json(),
361
+ ),
362
+ ),
363
+ )
364
+ if _response.status_code == 403:
365
+ raise ForbiddenError(
366
+ headers=dict(_response.headers),
367
+ body=typing.cast(
368
+ Forbidden,
369
+ parse_obj_as(
370
+ type_=Forbidden, # type: ignore
371
+ object_=_response.json(),
372
+ ),
373
+ ),
374
+ )
375
+ if _response.status_code == 404:
376
+ raise NotFoundError(
377
+ headers=dict(_response.headers),
378
+ body=typing.cast(
379
+ NotFound,
380
+ parse_obj_as(
381
+ type_=NotFound, # type: ignore
382
+ object_=_response.json(),
383
+ ),
384
+ ),
385
+ )
386
+ if _response.status_code == 422:
387
+ raise UnprocessableEntityError(
388
+ headers=dict(_response.headers),
389
+ body=typing.cast(
390
+ typing.Optional[typing.Any],
391
+ parse_obj_as(
392
+ type_=typing.Optional[typing.Any], # type: ignore
393
+ object_=_response.json(),
394
+ ),
395
+ ),
396
+ )
397
+ if _response.status_code == 429:
398
+ raise TooManyRequestsError(
399
+ headers=dict(_response.headers),
400
+ body=typing.cast(
401
+ TooManyRequests,
402
+ parse_obj_as(
403
+ type_=TooManyRequests, # type: ignore
404
+ object_=_response.json(),
405
+ ),
406
+ ),
407
+ )
408
+ _response_json = _response.json()
409
+ except JSONDecodeError:
410
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
411
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
412
+
413
+
414
+ class AsyncRawProjectPermissionsClient:
415
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
416
+ self._client_wrapper = client_wrapper
417
+
418
+ async def index(
419
+ self,
420
+ account_id: Uuid,
421
+ project_id: Uuid,
422
+ *,
423
+ include_deactivated: typing.Optional[bool] = None,
424
+ after: typing.Optional[RequestAfterOpaqueCursor] = None,
425
+ page_size: typing.Optional[RequestPageSize] = None,
426
+ include_total_count: typing.Optional[IncludeTotalCount] = None,
427
+ request_options: typing.Optional[RequestOptions] = None,
428
+ ) -> AsyncHttpResponse[UserRolesResponse]:
429
+ """
430
+ List user roles for a given project. <br><br>Rate Limits: 100 calls per 1.00 minute(s) per account
431
+
432
+ Parameters
433
+ ----------
434
+ account_id : Uuid
435
+
436
+
437
+ project_id : Uuid
438
+
439
+
440
+ include_deactivated : typing.Optional[bool]
441
+ Supports including deactivated users in the response. Default is false.
442
+
443
+ after : typing.Optional[RequestAfterOpaqueCursor]
444
+ Opaque Cursor query param for requests returning paginated results.
445
+ <br/>
446
+ NOTE: this value is auto-generated and included as part of links from a previous response. It is not intended to be human readable.
447
+
448
+ page_size : typing.Optional[RequestPageSize]
449
+
450
+
451
+ include_total_count : typing.Optional[IncludeTotalCount]
452
+
453
+
454
+ request_options : typing.Optional[RequestOptions]
455
+ Request-specific configuration.
456
+
457
+ Returns
458
+ -------
459
+ AsyncHttpResponse[UserRolesResponse]
460
+ OK
461
+ """
462
+ _response = await self._client_wrapper.httpx_client.request(
463
+ f"v4/accounts/{jsonable_encoder(account_id)}/projects/{jsonable_encoder(project_id)}/users",
464
+ method="GET",
465
+ params={
466
+ "include_deactivated": include_deactivated,
467
+ "after": after,
468
+ "page_size": page_size,
469
+ "include_total_count": include_total_count,
470
+ },
471
+ request_options=request_options,
472
+ )
473
+ try:
474
+ if 200 <= _response.status_code < 300:
475
+ _data = typing.cast(
476
+ UserRolesResponse,
477
+ parse_obj_as(
478
+ type_=UserRolesResponse, # type: ignore
479
+ object_=_response.json(),
480
+ ),
481
+ )
482
+ return AsyncHttpResponse(response=_response, data=_data)
483
+ if _response.status_code == 400:
484
+ raise BadRequestError(
485
+ headers=dict(_response.headers),
486
+ body=typing.cast(
487
+ BadRequest,
488
+ parse_obj_as(
489
+ type_=BadRequest, # type: ignore
490
+ object_=_response.json(),
491
+ ),
492
+ ),
493
+ )
494
+ if _response.status_code == 401:
495
+ raise UnauthorizedError(
496
+ headers=dict(_response.headers),
497
+ body=typing.cast(
498
+ Unauthorized,
499
+ parse_obj_as(
500
+ type_=Unauthorized, # type: ignore
501
+ object_=_response.json(),
502
+ ),
503
+ ),
504
+ )
505
+ if _response.status_code == 403:
506
+ raise ForbiddenError(
507
+ headers=dict(_response.headers),
508
+ body=typing.cast(
509
+ Forbidden,
510
+ parse_obj_as(
511
+ type_=Forbidden, # type: ignore
512
+ object_=_response.json(),
513
+ ),
514
+ ),
515
+ )
516
+ if _response.status_code == 404:
517
+ raise NotFoundError(
518
+ headers=dict(_response.headers),
519
+ body=typing.cast(
520
+ NotFound,
521
+ parse_obj_as(
522
+ type_=NotFound, # type: ignore
523
+ object_=_response.json(),
524
+ ),
525
+ ),
526
+ )
527
+ if _response.status_code == 422:
528
+ raise UnprocessableEntityError(
529
+ headers=dict(_response.headers),
530
+ body=typing.cast(
531
+ typing.Optional[typing.Any],
532
+ parse_obj_as(
533
+ type_=typing.Optional[typing.Any], # type: ignore
534
+ object_=_response.json(),
535
+ ),
536
+ ),
537
+ )
538
+ if _response.status_code == 429:
539
+ raise TooManyRequestsError(
540
+ headers=dict(_response.headers),
541
+ body=typing.cast(
542
+ TooManyRequests,
543
+ parse_obj_as(
544
+ type_=TooManyRequests, # type: ignore
545
+ object_=_response.json(),
546
+ ),
547
+ ),
548
+ )
549
+ _response_json = _response.json()
550
+ except JSONDecodeError:
551
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
552
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
553
+
554
+ async def delete(
555
+ self,
556
+ account_id: Uuid,
557
+ project_id: Uuid,
558
+ user_id: Uuid,
559
+ *,
560
+ request_options: typing.Optional[RequestOptions] = None,
561
+ ) -> AsyncHttpResponse[None]:
562
+ """
563
+ Remove a user from a given project. <br><br>Rate Limits: 60 calls per 1.00 minute(s) per account
564
+
565
+ Parameters
566
+ ----------
567
+ account_id : Uuid
568
+
569
+
570
+ project_id : Uuid
571
+
572
+
573
+ user_id : Uuid
574
+
575
+
576
+ request_options : typing.Optional[RequestOptions]
577
+ Request-specific configuration.
578
+
579
+ Returns
580
+ -------
581
+ AsyncHttpResponse[None]
582
+ """
583
+ _response = await self._client_wrapper.httpx_client.request(
584
+ f"v4/accounts/{jsonable_encoder(account_id)}/projects/{jsonable_encoder(project_id)}/users/{jsonable_encoder(user_id)}",
585
+ method="DELETE",
586
+ request_options=request_options,
587
+ )
588
+ try:
589
+ if 200 <= _response.status_code < 300:
590
+ return AsyncHttpResponse(response=_response, data=None)
591
+ if _response.status_code == 400:
592
+ raise BadRequestError(
593
+ headers=dict(_response.headers),
594
+ body=typing.cast(
595
+ BadRequest,
596
+ parse_obj_as(
597
+ type_=BadRequest, # type: ignore
598
+ object_=_response.json(),
599
+ ),
600
+ ),
601
+ )
602
+ if _response.status_code == 401:
603
+ raise UnauthorizedError(
604
+ headers=dict(_response.headers),
605
+ body=typing.cast(
606
+ Unauthorized,
607
+ parse_obj_as(
608
+ type_=Unauthorized, # type: ignore
609
+ object_=_response.json(),
610
+ ),
611
+ ),
612
+ )
613
+ if _response.status_code == 403:
614
+ raise ForbiddenError(
615
+ headers=dict(_response.headers),
616
+ body=typing.cast(
617
+ Forbidden,
618
+ parse_obj_as(
619
+ type_=Forbidden, # type: ignore
620
+ object_=_response.json(),
621
+ ),
622
+ ),
623
+ )
624
+ if _response.status_code == 404:
625
+ raise NotFoundError(
626
+ headers=dict(_response.headers),
627
+ body=typing.cast(
628
+ NotFound,
629
+ parse_obj_as(
630
+ type_=NotFound, # type: ignore
631
+ object_=_response.json(),
632
+ ),
633
+ ),
634
+ )
635
+ if _response.status_code == 422:
636
+ raise UnprocessableEntityError(
637
+ headers=dict(_response.headers),
638
+ body=typing.cast(
639
+ typing.Optional[typing.Any],
640
+ parse_obj_as(
641
+ type_=typing.Optional[typing.Any], # type: ignore
642
+ object_=_response.json(),
643
+ ),
644
+ ),
645
+ )
646
+ if _response.status_code == 429:
647
+ raise TooManyRequestsError(
648
+ headers=dict(_response.headers),
649
+ body=typing.cast(
650
+ TooManyRequests,
651
+ parse_obj_as(
652
+ type_=TooManyRequests, # type: ignore
653
+ object_=_response.json(),
654
+ ),
655
+ ),
656
+ )
657
+ _response_json = _response.json()
658
+ except JSONDecodeError:
659
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
660
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
661
+
662
+ async def project_user_roles_update(
663
+ self,
664
+ account_id: Uuid,
665
+ project_id: Uuid,
666
+ user_id: Uuid,
667
+ *,
668
+ data: UpdateUserRolesParamsData,
669
+ request_options: typing.Optional[RequestOptions] = None,
670
+ ) -> AsyncHttpResponse[UpdateUserRolesResponse]:
671
+ """
672
+ Update user roles for the given project if the user is already added to the project. If the user is
673
+ not added to the project, the user will be added with the given role. <br><br>Rate Limits: 10 calls per 1.00 minute(s) per account
674
+
675
+ Parameters
676
+ ----------
677
+ account_id : Uuid
678
+
679
+
680
+ project_id : Uuid
681
+
682
+
683
+ user_id : Uuid
684
+
685
+
686
+ data : UpdateUserRolesParamsData
687
+
688
+ request_options : typing.Optional[RequestOptions]
689
+ Request-specific configuration.
690
+
691
+ Returns
692
+ -------
693
+ AsyncHttpResponse[UpdateUserRolesResponse]
694
+ OK
695
+ """
696
+ _response = await self._client_wrapper.httpx_client.request(
697
+ f"v4/accounts/{jsonable_encoder(account_id)}/projects/{jsonable_encoder(project_id)}/users/{jsonable_encoder(user_id)}",
698
+ method="PATCH",
699
+ json={
700
+ "data": convert_and_respect_annotation_metadata(
701
+ object_=data, annotation=UpdateUserRolesParamsData, direction="write"
702
+ ),
703
+ },
704
+ headers={
705
+ "content-type": "application/json",
706
+ },
707
+ request_options=request_options,
708
+ omit=OMIT,
709
+ )
710
+ try:
711
+ if 200 <= _response.status_code < 300:
712
+ _data = typing.cast(
713
+ UpdateUserRolesResponse,
714
+ parse_obj_as(
715
+ type_=UpdateUserRolesResponse, # type: ignore
716
+ object_=_response.json(),
717
+ ),
718
+ )
719
+ return AsyncHttpResponse(response=_response, data=_data)
720
+ if _response.status_code == 400:
721
+ raise BadRequestError(
722
+ headers=dict(_response.headers),
723
+ body=typing.cast(
724
+ BadRequest,
725
+ parse_obj_as(
726
+ type_=BadRequest, # type: ignore
727
+ object_=_response.json(),
728
+ ),
729
+ ),
730
+ )
731
+ if _response.status_code == 401:
732
+ raise UnauthorizedError(
733
+ headers=dict(_response.headers),
734
+ body=typing.cast(
735
+ Unauthorized,
736
+ parse_obj_as(
737
+ type_=Unauthorized, # type: ignore
738
+ object_=_response.json(),
739
+ ),
740
+ ),
741
+ )
742
+ if _response.status_code == 403:
743
+ raise ForbiddenError(
744
+ headers=dict(_response.headers),
745
+ body=typing.cast(
746
+ Forbidden,
747
+ parse_obj_as(
748
+ type_=Forbidden, # type: ignore
749
+ object_=_response.json(),
750
+ ),
751
+ ),
752
+ )
753
+ if _response.status_code == 404:
754
+ raise NotFoundError(
755
+ headers=dict(_response.headers),
756
+ body=typing.cast(
757
+ NotFound,
758
+ parse_obj_as(
759
+ type_=NotFound, # type: ignore
760
+ object_=_response.json(),
761
+ ),
762
+ ),
763
+ )
764
+ if _response.status_code == 422:
765
+ raise UnprocessableEntityError(
766
+ headers=dict(_response.headers),
767
+ body=typing.cast(
768
+ typing.Optional[typing.Any],
769
+ parse_obj_as(
770
+ type_=typing.Optional[typing.Any], # type: ignore
771
+ object_=_response.json(),
772
+ ),
773
+ ),
774
+ )
775
+ if _response.status_code == 429:
776
+ raise TooManyRequestsError(
777
+ headers=dict(_response.headers),
778
+ body=typing.cast(
779
+ TooManyRequests,
780
+ parse_obj_as(
781
+ type_=TooManyRequests, # type: ignore
782
+ object_=_response.json(),
783
+ ),
784
+ ),
785
+ )
786
+ _response_json = _response.json()
787
+ except JSONDecodeError:
788
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
789
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)