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