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,2058 @@
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.asset_include import AssetInclude
20
+ from ..types.assets_with_includes_response import AssetsWithIncludesResponse
21
+ from ..types.bad_request import BadRequest
22
+ from ..types.children_type import ChildrenType
23
+ from ..types.file_with_media_links_include import FileWithMediaLinksInclude
24
+ from ..types.folder_copy_response import FolderCopyResponse
25
+ from ..types.folder_response import FolderResponse
26
+ from ..types.folder_with_includes_response import FolderWithIncludesResponse
27
+ from ..types.folders_with_includes_response import FoldersWithIncludesResponse
28
+ from ..types.forbidden import Forbidden
29
+ from ..types.include_total_count import IncludeTotalCount
30
+ from ..types.not_found import NotFound
31
+ from ..types.request_after_opaque_cursor import RequestAfterOpaqueCursor
32
+ from ..types.request_page_size import RequestPageSize
33
+ from ..types.too_many_requests import TooManyRequests
34
+ from ..types.unauthorized import Unauthorized
35
+ from ..types.uuid_ import Uuid
36
+ from .types.folder_copy_params_data import FolderCopyParamsData
37
+ from .types.folder_create_params_data import FolderCreateParamsData
38
+ from .types.folder_move_params_data import FolderMoveParamsData
39
+ from .types.folder_update_params_data import FolderUpdateParamsData
40
+
41
+ # this is used as the default value for optional parameters
42
+ OMIT = typing.cast(typing.Any, ...)
43
+
44
+
45
+ class RawFoldersClient:
46
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
47
+ self._client_wrapper = client_wrapper
48
+
49
+ def show(
50
+ self,
51
+ account_id: Uuid,
52
+ folder_id: Uuid,
53
+ *,
54
+ include: typing.Optional[AssetInclude] = None,
55
+ request_options: typing.Optional[RequestOptions] = None,
56
+ ) -> HttpResponse[FolderWithIncludesResponse]:
57
+ """
58
+ Show folder details. <br><br>Rate Limits: 100 calls per 1.00 minute(s) per account
59
+
60
+ Parameters
61
+ ----------
62
+ account_id : Uuid
63
+
64
+
65
+ folder_id : Uuid
66
+
67
+
68
+ include : typing.Optional[AssetInclude]
69
+
70
+
71
+ request_options : typing.Optional[RequestOptions]
72
+ Request-specific configuration.
73
+
74
+ Returns
75
+ -------
76
+ HttpResponse[FolderWithIncludesResponse]
77
+ OK
78
+ """
79
+ _response = self._client_wrapper.httpx_client.request(
80
+ f"v4/accounts/{jsonable_encoder(account_id)}/folders/{jsonable_encoder(folder_id)}",
81
+ method="GET",
82
+ params={
83
+ "include": include,
84
+ },
85
+ request_options=request_options,
86
+ )
87
+ try:
88
+ if 200 <= _response.status_code < 300:
89
+ _data = typing.cast(
90
+ FolderWithIncludesResponse,
91
+ parse_obj_as(
92
+ type_=FolderWithIncludesResponse, # type: ignore
93
+ object_=_response.json(),
94
+ ),
95
+ )
96
+ return HttpResponse(response=_response, data=_data)
97
+ if _response.status_code == 400:
98
+ raise BadRequestError(
99
+ headers=dict(_response.headers),
100
+ body=typing.cast(
101
+ BadRequest,
102
+ parse_obj_as(
103
+ type_=BadRequest, # type: ignore
104
+ object_=_response.json(),
105
+ ),
106
+ ),
107
+ )
108
+ if _response.status_code == 401:
109
+ raise UnauthorizedError(
110
+ headers=dict(_response.headers),
111
+ body=typing.cast(
112
+ Unauthorized,
113
+ parse_obj_as(
114
+ type_=Unauthorized, # type: ignore
115
+ object_=_response.json(),
116
+ ),
117
+ ),
118
+ )
119
+ if _response.status_code == 403:
120
+ raise ForbiddenError(
121
+ headers=dict(_response.headers),
122
+ body=typing.cast(
123
+ Forbidden,
124
+ parse_obj_as(
125
+ type_=Forbidden, # type: ignore
126
+ object_=_response.json(),
127
+ ),
128
+ ),
129
+ )
130
+ if _response.status_code == 404:
131
+ raise NotFoundError(
132
+ headers=dict(_response.headers),
133
+ body=typing.cast(
134
+ NotFound,
135
+ parse_obj_as(
136
+ type_=NotFound, # type: ignore
137
+ object_=_response.json(),
138
+ ),
139
+ ),
140
+ )
141
+ if _response.status_code == 422:
142
+ raise UnprocessableEntityError(
143
+ headers=dict(_response.headers),
144
+ body=typing.cast(
145
+ typing.Optional[typing.Any],
146
+ parse_obj_as(
147
+ type_=typing.Optional[typing.Any], # type: ignore
148
+ object_=_response.json(),
149
+ ),
150
+ ),
151
+ )
152
+ if _response.status_code == 429:
153
+ raise TooManyRequestsError(
154
+ headers=dict(_response.headers),
155
+ body=typing.cast(
156
+ TooManyRequests,
157
+ parse_obj_as(
158
+ type_=TooManyRequests, # type: ignore
159
+ object_=_response.json(),
160
+ ),
161
+ ),
162
+ )
163
+ _response_json = _response.json()
164
+ except JSONDecodeError:
165
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
166
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
167
+
168
+ def delete(
169
+ self, account_id: Uuid, folder_id: Uuid, *, request_options: typing.Optional[RequestOptions] = None
170
+ ) -> HttpResponse[None]:
171
+ """
172
+ Delete folder by id.
173
+
174
+ Parameters
175
+ ----------
176
+ account_id : Uuid
177
+
178
+
179
+ folder_id : Uuid
180
+
181
+
182
+ request_options : typing.Optional[RequestOptions]
183
+ Request-specific configuration.
184
+
185
+ Returns
186
+ -------
187
+ HttpResponse[None]
188
+ """
189
+ _response = self._client_wrapper.httpx_client.request(
190
+ f"v4/accounts/{jsonable_encoder(account_id)}/folders/{jsonable_encoder(folder_id)}",
191
+ method="DELETE",
192
+ request_options=request_options,
193
+ )
194
+ try:
195
+ if 200 <= _response.status_code < 300:
196
+ return HttpResponse(response=_response, data=None)
197
+ if _response.status_code == 400:
198
+ raise BadRequestError(
199
+ headers=dict(_response.headers),
200
+ body=typing.cast(
201
+ BadRequest,
202
+ parse_obj_as(
203
+ type_=BadRequest, # type: ignore
204
+ object_=_response.json(),
205
+ ),
206
+ ),
207
+ )
208
+ if _response.status_code == 401:
209
+ raise UnauthorizedError(
210
+ headers=dict(_response.headers),
211
+ body=typing.cast(
212
+ Unauthorized,
213
+ parse_obj_as(
214
+ type_=Unauthorized, # type: ignore
215
+ object_=_response.json(),
216
+ ),
217
+ ),
218
+ )
219
+ if _response.status_code == 403:
220
+ raise ForbiddenError(
221
+ headers=dict(_response.headers),
222
+ body=typing.cast(
223
+ Forbidden,
224
+ parse_obj_as(
225
+ type_=Forbidden, # type: ignore
226
+ object_=_response.json(),
227
+ ),
228
+ ),
229
+ )
230
+ if _response.status_code == 404:
231
+ raise NotFoundError(
232
+ headers=dict(_response.headers),
233
+ body=typing.cast(
234
+ NotFound,
235
+ parse_obj_as(
236
+ type_=NotFound, # type: ignore
237
+ object_=_response.json(),
238
+ ),
239
+ ),
240
+ )
241
+ if _response.status_code == 422:
242
+ raise UnprocessableEntityError(
243
+ headers=dict(_response.headers),
244
+ body=typing.cast(
245
+ typing.Optional[typing.Any],
246
+ parse_obj_as(
247
+ type_=typing.Optional[typing.Any], # type: ignore
248
+ object_=_response.json(),
249
+ ),
250
+ ),
251
+ )
252
+ if _response.status_code == 429:
253
+ raise TooManyRequestsError(
254
+ headers=dict(_response.headers),
255
+ body=typing.cast(
256
+ TooManyRequests,
257
+ parse_obj_as(
258
+ type_=TooManyRequests, # type: ignore
259
+ object_=_response.json(),
260
+ ),
261
+ ),
262
+ )
263
+ _response_json = _response.json()
264
+ except JSONDecodeError:
265
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
266
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
267
+
268
+ def update(
269
+ self,
270
+ account_id: Uuid,
271
+ folder_id: Uuid,
272
+ *,
273
+ data: FolderUpdateParamsData,
274
+ request_options: typing.Optional[RequestOptions] = None,
275
+ ) -> HttpResponse[FolderResponse]:
276
+ """
277
+ Update folder details.
278
+
279
+ Parameters
280
+ ----------
281
+ account_id : Uuid
282
+
283
+
284
+ folder_id : Uuid
285
+
286
+
287
+ data : FolderUpdateParamsData
288
+
289
+ request_options : typing.Optional[RequestOptions]
290
+ Request-specific configuration.
291
+
292
+ Returns
293
+ -------
294
+ HttpResponse[FolderResponse]
295
+ OK
296
+ """
297
+ _response = self._client_wrapper.httpx_client.request(
298
+ f"v4/accounts/{jsonable_encoder(account_id)}/folders/{jsonable_encoder(folder_id)}",
299
+ method="PATCH",
300
+ json={
301
+ "data": convert_and_respect_annotation_metadata(
302
+ object_=data, annotation=FolderUpdateParamsData, direction="write"
303
+ ),
304
+ },
305
+ headers={
306
+ "content-type": "application/json",
307
+ },
308
+ request_options=request_options,
309
+ omit=OMIT,
310
+ )
311
+ try:
312
+ if 200 <= _response.status_code < 300:
313
+ _data = typing.cast(
314
+ FolderResponse,
315
+ parse_obj_as(
316
+ type_=FolderResponse, # type: ignore
317
+ object_=_response.json(),
318
+ ),
319
+ )
320
+ return HttpResponse(response=_response, data=_data)
321
+ if _response.status_code == 400:
322
+ raise BadRequestError(
323
+ headers=dict(_response.headers),
324
+ body=typing.cast(
325
+ BadRequest,
326
+ parse_obj_as(
327
+ type_=BadRequest, # type: ignore
328
+ object_=_response.json(),
329
+ ),
330
+ ),
331
+ )
332
+ if _response.status_code == 401:
333
+ raise UnauthorizedError(
334
+ headers=dict(_response.headers),
335
+ body=typing.cast(
336
+ Unauthorized,
337
+ parse_obj_as(
338
+ type_=Unauthorized, # type: ignore
339
+ object_=_response.json(),
340
+ ),
341
+ ),
342
+ )
343
+ if _response.status_code == 403:
344
+ raise ForbiddenError(
345
+ headers=dict(_response.headers),
346
+ body=typing.cast(
347
+ Forbidden,
348
+ parse_obj_as(
349
+ type_=Forbidden, # type: ignore
350
+ object_=_response.json(),
351
+ ),
352
+ ),
353
+ )
354
+ if _response.status_code == 404:
355
+ raise NotFoundError(
356
+ headers=dict(_response.headers),
357
+ body=typing.cast(
358
+ NotFound,
359
+ parse_obj_as(
360
+ type_=NotFound, # type: ignore
361
+ object_=_response.json(),
362
+ ),
363
+ ),
364
+ )
365
+ if _response.status_code == 422:
366
+ raise UnprocessableEntityError(
367
+ headers=dict(_response.headers),
368
+ body=typing.cast(
369
+ typing.Optional[typing.Any],
370
+ parse_obj_as(
371
+ type_=typing.Optional[typing.Any], # type: ignore
372
+ object_=_response.json(),
373
+ ),
374
+ ),
375
+ )
376
+ if _response.status_code == 429:
377
+ raise TooManyRequestsError(
378
+ headers=dict(_response.headers),
379
+ body=typing.cast(
380
+ TooManyRequests,
381
+ parse_obj_as(
382
+ type_=TooManyRequests, # type: ignore
383
+ object_=_response.json(),
384
+ ),
385
+ ),
386
+ )
387
+ _response_json = _response.json()
388
+ except JSONDecodeError:
389
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
390
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
391
+
392
+ def index(
393
+ self,
394
+ account_id: Uuid,
395
+ folder_id: Uuid,
396
+ *,
397
+ include: typing.Optional[FileWithMediaLinksInclude] = None,
398
+ type: typing.Optional[ChildrenType] = None,
399
+ after: typing.Optional[RequestAfterOpaqueCursor] = None,
400
+ page_size: typing.Optional[RequestPageSize] = None,
401
+ include_total_count: typing.Optional[IncludeTotalCount] = None,
402
+ request_options: typing.Optional[RequestOptions] = None,
403
+ ) -> HttpResponse[AssetsWithIncludesResponse]:
404
+ """
405
+ List the children in the given folder.
406
+ <br><br>
407
+ Use the `include` query parameter to selectively include additional properties in the response.
408
+ <br><br>
409
+ Note: if you include `media_links.original` and the user does not have permission to download files
410
+ in the corresponding project, then this endpoint will respond with a `403 Forbidden` error.
411
+ If the content is inaccessible because watermarking is required for this user and isn't supported by
412
+ the requested media_links, then the request will succeed but the unsupported media links will be set to null.
413
+ Similarly, if a requested transcode link does not exist for a particular file (e.g. including
414
+ `media_links.video_h264_180` on a static image file) or transoding process hasn't finished
415
+ (i.e. the file's `status` is "uploaded" rather than "transcoded"), then the a media link will also be set to
416
+ null in the response payload. In short, the client must handle null media links gracefully.
417
+
418
+ Parameters
419
+ ----------
420
+ account_id : Uuid
421
+
422
+
423
+ folder_id : Uuid
424
+
425
+
426
+ include : typing.Optional[FileWithMediaLinksInclude]
427
+
428
+
429
+ type : typing.Optional[ChildrenType]
430
+
431
+
432
+ after : typing.Optional[RequestAfterOpaqueCursor]
433
+ Opaque Cursor query param for requests returning paginated results.
434
+ <br/>
435
+ NOTE: this value is auto-generated and included as part of links from a previous response. It is not intended to be human readable.
436
+
437
+ page_size : typing.Optional[RequestPageSize]
438
+
439
+
440
+ include_total_count : typing.Optional[IncludeTotalCount]
441
+
442
+
443
+ request_options : typing.Optional[RequestOptions]
444
+ Request-specific configuration.
445
+
446
+ Returns
447
+ -------
448
+ HttpResponse[AssetsWithIncludesResponse]
449
+ OK
450
+ """
451
+ _response = self._client_wrapper.httpx_client.request(
452
+ f"v4/accounts/{jsonable_encoder(account_id)}/folders/{jsonable_encoder(folder_id)}/children",
453
+ method="GET",
454
+ params={
455
+ "include": include,
456
+ "type": type,
457
+ "after": after,
458
+ "page_size": page_size,
459
+ "include_total_count": include_total_count,
460
+ },
461
+ request_options=request_options,
462
+ )
463
+ try:
464
+ if 200 <= _response.status_code < 300:
465
+ _data = typing.cast(
466
+ AssetsWithIncludesResponse,
467
+ parse_obj_as(
468
+ type_=AssetsWithIncludesResponse, # type: ignore
469
+ object_=_response.json(),
470
+ ),
471
+ )
472
+ return HttpResponse(response=_response, data=_data)
473
+ if _response.status_code == 400:
474
+ raise BadRequestError(
475
+ headers=dict(_response.headers),
476
+ body=typing.cast(
477
+ BadRequest,
478
+ parse_obj_as(
479
+ type_=BadRequest, # type: ignore
480
+ object_=_response.json(),
481
+ ),
482
+ ),
483
+ )
484
+ if _response.status_code == 401:
485
+ raise UnauthorizedError(
486
+ headers=dict(_response.headers),
487
+ body=typing.cast(
488
+ Unauthorized,
489
+ parse_obj_as(
490
+ type_=Unauthorized, # type: ignore
491
+ object_=_response.json(),
492
+ ),
493
+ ),
494
+ )
495
+ if _response.status_code == 403:
496
+ raise ForbiddenError(
497
+ headers=dict(_response.headers),
498
+ body=typing.cast(
499
+ Forbidden,
500
+ parse_obj_as(
501
+ type_=Forbidden, # type: ignore
502
+ object_=_response.json(),
503
+ ),
504
+ ),
505
+ )
506
+ if _response.status_code == 404:
507
+ raise NotFoundError(
508
+ headers=dict(_response.headers),
509
+ body=typing.cast(
510
+ NotFound,
511
+ parse_obj_as(
512
+ type_=NotFound, # type: ignore
513
+ object_=_response.json(),
514
+ ),
515
+ ),
516
+ )
517
+ if _response.status_code == 422:
518
+ raise UnprocessableEntityError(
519
+ headers=dict(_response.headers),
520
+ body=typing.cast(
521
+ typing.Optional[typing.Any],
522
+ parse_obj_as(
523
+ type_=typing.Optional[typing.Any], # type: ignore
524
+ object_=_response.json(),
525
+ ),
526
+ ),
527
+ )
528
+ if _response.status_code == 429:
529
+ raise TooManyRequestsError(
530
+ headers=dict(_response.headers),
531
+ body=typing.cast(
532
+ TooManyRequests,
533
+ parse_obj_as(
534
+ type_=TooManyRequests, # type: ignore
535
+ object_=_response.json(),
536
+ ),
537
+ ),
538
+ )
539
+ _response_json = _response.json()
540
+ except JSONDecodeError:
541
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
542
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
543
+
544
+ def copy(
545
+ self,
546
+ account_id: Uuid,
547
+ folder_id: Uuid,
548
+ *,
549
+ data: typing.Optional[FolderCopyParamsData] = OMIT,
550
+ request_options: typing.Optional[RequestOptions] = None,
551
+ ) -> HttpResponse[FolderCopyResponse]:
552
+ """
553
+ Copy folder. <br><br>Rate Limits: 10 calls per 1.00 minute(s) per account
554
+
555
+ Parameters
556
+ ----------
557
+ account_id : Uuid
558
+
559
+
560
+ folder_id : Uuid
561
+
562
+
563
+ data : typing.Optional[FolderCopyParamsData]
564
+
565
+ request_options : typing.Optional[RequestOptions]
566
+ Request-specific configuration.
567
+
568
+ Returns
569
+ -------
570
+ HttpResponse[FolderCopyResponse]
571
+ OK
572
+ """
573
+ _response = self._client_wrapper.httpx_client.request(
574
+ f"v4/accounts/{jsonable_encoder(account_id)}/folders/{jsonable_encoder(folder_id)}/copy",
575
+ method="POST",
576
+ json={
577
+ "data": convert_and_respect_annotation_metadata(
578
+ object_=data, annotation=FolderCopyParamsData, direction="write"
579
+ ),
580
+ },
581
+ headers={
582
+ "content-type": "application/json",
583
+ },
584
+ request_options=request_options,
585
+ omit=OMIT,
586
+ )
587
+ try:
588
+ if 200 <= _response.status_code < 300:
589
+ _data = typing.cast(
590
+ FolderCopyResponse,
591
+ parse_obj_as(
592
+ type_=FolderCopyResponse, # type: ignore
593
+ object_=_response.json(),
594
+ ),
595
+ )
596
+ return HttpResponse(response=_response, data=_data)
597
+ if _response.status_code == 400:
598
+ raise BadRequestError(
599
+ headers=dict(_response.headers),
600
+ body=typing.cast(
601
+ BadRequest,
602
+ parse_obj_as(
603
+ type_=BadRequest, # type: ignore
604
+ object_=_response.json(),
605
+ ),
606
+ ),
607
+ )
608
+ if _response.status_code == 401:
609
+ raise UnauthorizedError(
610
+ headers=dict(_response.headers),
611
+ body=typing.cast(
612
+ Unauthorized,
613
+ parse_obj_as(
614
+ type_=Unauthorized, # type: ignore
615
+ object_=_response.json(),
616
+ ),
617
+ ),
618
+ )
619
+ if _response.status_code == 403:
620
+ raise ForbiddenError(
621
+ headers=dict(_response.headers),
622
+ body=typing.cast(
623
+ Forbidden,
624
+ parse_obj_as(
625
+ type_=Forbidden, # type: ignore
626
+ object_=_response.json(),
627
+ ),
628
+ ),
629
+ )
630
+ if _response.status_code == 404:
631
+ raise NotFoundError(
632
+ headers=dict(_response.headers),
633
+ body=typing.cast(
634
+ NotFound,
635
+ parse_obj_as(
636
+ type_=NotFound, # type: ignore
637
+ object_=_response.json(),
638
+ ),
639
+ ),
640
+ )
641
+ if _response.status_code == 422:
642
+ raise UnprocessableEntityError(
643
+ headers=dict(_response.headers),
644
+ body=typing.cast(
645
+ typing.Optional[typing.Any],
646
+ parse_obj_as(
647
+ type_=typing.Optional[typing.Any], # type: ignore
648
+ object_=_response.json(),
649
+ ),
650
+ ),
651
+ )
652
+ if _response.status_code == 429:
653
+ raise TooManyRequestsError(
654
+ headers=dict(_response.headers),
655
+ body=typing.cast(
656
+ TooManyRequests,
657
+ parse_obj_as(
658
+ type_=TooManyRequests, # type: ignore
659
+ object_=_response.json(),
660
+ ),
661
+ ),
662
+ )
663
+ _response_json = _response.json()
664
+ except JSONDecodeError:
665
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
666
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
667
+
668
+ def list(
669
+ self,
670
+ account_id: Uuid,
671
+ folder_id: Uuid,
672
+ *,
673
+ include: typing.Optional[AssetInclude] = None,
674
+ after: typing.Optional[RequestAfterOpaqueCursor] = None,
675
+ page_size: typing.Optional[RequestPageSize] = None,
676
+ include_total_count: typing.Optional[IncludeTotalCount] = None,
677
+ request_options: typing.Optional[RequestOptions] = None,
678
+ ) -> HttpResponse[FoldersWithIncludesResponse]:
679
+ """
680
+ List folders in a given folder. <br><br>Rate Limits: 5 calls per 1 second(s) per account
681
+
682
+ Parameters
683
+ ----------
684
+ account_id : Uuid
685
+
686
+
687
+ folder_id : Uuid
688
+
689
+
690
+ include : typing.Optional[AssetInclude]
691
+
692
+
693
+ after : typing.Optional[RequestAfterOpaqueCursor]
694
+ Opaque Cursor query param for requests returning paginated results.
695
+ <br/>
696
+ NOTE: this value is auto-generated and included as part of links from a previous response. It is not intended to be human readable.
697
+
698
+ page_size : typing.Optional[RequestPageSize]
699
+
700
+
701
+ include_total_count : typing.Optional[IncludeTotalCount]
702
+
703
+
704
+ request_options : typing.Optional[RequestOptions]
705
+ Request-specific configuration.
706
+
707
+ Returns
708
+ -------
709
+ HttpResponse[FoldersWithIncludesResponse]
710
+ OK
711
+ """
712
+ _response = self._client_wrapper.httpx_client.request(
713
+ f"v4/accounts/{jsonable_encoder(account_id)}/folders/{jsonable_encoder(folder_id)}/folders",
714
+ method="GET",
715
+ params={
716
+ "include": include,
717
+ "after": after,
718
+ "page_size": page_size,
719
+ "include_total_count": include_total_count,
720
+ },
721
+ request_options=request_options,
722
+ )
723
+ try:
724
+ if 200 <= _response.status_code < 300:
725
+ _data = typing.cast(
726
+ FoldersWithIncludesResponse,
727
+ parse_obj_as(
728
+ type_=FoldersWithIncludesResponse, # type: ignore
729
+ object_=_response.json(),
730
+ ),
731
+ )
732
+ return HttpResponse(response=_response, data=_data)
733
+ if _response.status_code == 400:
734
+ raise BadRequestError(
735
+ headers=dict(_response.headers),
736
+ body=typing.cast(
737
+ BadRequest,
738
+ parse_obj_as(
739
+ type_=BadRequest, # type: ignore
740
+ object_=_response.json(),
741
+ ),
742
+ ),
743
+ )
744
+ if _response.status_code == 401:
745
+ raise UnauthorizedError(
746
+ headers=dict(_response.headers),
747
+ body=typing.cast(
748
+ Unauthorized,
749
+ parse_obj_as(
750
+ type_=Unauthorized, # type: ignore
751
+ object_=_response.json(),
752
+ ),
753
+ ),
754
+ )
755
+ if _response.status_code == 403:
756
+ raise ForbiddenError(
757
+ headers=dict(_response.headers),
758
+ body=typing.cast(
759
+ Forbidden,
760
+ parse_obj_as(
761
+ type_=Forbidden, # type: ignore
762
+ object_=_response.json(),
763
+ ),
764
+ ),
765
+ )
766
+ if _response.status_code == 404:
767
+ raise NotFoundError(
768
+ headers=dict(_response.headers),
769
+ body=typing.cast(
770
+ NotFound,
771
+ parse_obj_as(
772
+ type_=NotFound, # type: ignore
773
+ object_=_response.json(),
774
+ ),
775
+ ),
776
+ )
777
+ if _response.status_code == 422:
778
+ raise UnprocessableEntityError(
779
+ headers=dict(_response.headers),
780
+ body=typing.cast(
781
+ typing.Optional[typing.Any],
782
+ parse_obj_as(
783
+ type_=typing.Optional[typing.Any], # type: ignore
784
+ object_=_response.json(),
785
+ ),
786
+ ),
787
+ )
788
+ if _response.status_code == 429:
789
+ raise TooManyRequestsError(
790
+ headers=dict(_response.headers),
791
+ body=typing.cast(
792
+ TooManyRequests,
793
+ parse_obj_as(
794
+ type_=TooManyRequests, # type: ignore
795
+ object_=_response.json(),
796
+ ),
797
+ ),
798
+ )
799
+ _response_json = _response.json()
800
+ except JSONDecodeError:
801
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
802
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
803
+
804
+ def create(
805
+ self,
806
+ account_id: Uuid,
807
+ folder_id: Uuid,
808
+ *,
809
+ data: FolderCreateParamsData,
810
+ request_options: typing.Optional[RequestOptions] = None,
811
+ ) -> HttpResponse[FolderResponse]:
812
+ """
813
+ Create a new folder inside the given <i>folder_id</i> path param. <br><br>Rate Limits: 3 calls per 1 second(s) per account
814
+
815
+ Parameters
816
+ ----------
817
+ account_id : Uuid
818
+
819
+
820
+ folder_id : Uuid
821
+
822
+
823
+ data : FolderCreateParamsData
824
+
825
+ request_options : typing.Optional[RequestOptions]
826
+ Request-specific configuration.
827
+
828
+ Returns
829
+ -------
830
+ HttpResponse[FolderResponse]
831
+ Created
832
+ """
833
+ _response = self._client_wrapper.httpx_client.request(
834
+ f"v4/accounts/{jsonable_encoder(account_id)}/folders/{jsonable_encoder(folder_id)}/folders",
835
+ method="POST",
836
+ json={
837
+ "data": convert_and_respect_annotation_metadata(
838
+ object_=data, annotation=FolderCreateParamsData, direction="write"
839
+ ),
840
+ },
841
+ headers={
842
+ "content-type": "application/json",
843
+ },
844
+ request_options=request_options,
845
+ omit=OMIT,
846
+ )
847
+ try:
848
+ if 200 <= _response.status_code < 300:
849
+ _data = typing.cast(
850
+ FolderResponse,
851
+ parse_obj_as(
852
+ type_=FolderResponse, # type: ignore
853
+ object_=_response.json(),
854
+ ),
855
+ )
856
+ return HttpResponse(response=_response, data=_data)
857
+ if _response.status_code == 400:
858
+ raise BadRequestError(
859
+ headers=dict(_response.headers),
860
+ body=typing.cast(
861
+ BadRequest,
862
+ parse_obj_as(
863
+ type_=BadRequest, # type: ignore
864
+ object_=_response.json(),
865
+ ),
866
+ ),
867
+ )
868
+ if _response.status_code == 401:
869
+ raise UnauthorizedError(
870
+ headers=dict(_response.headers),
871
+ body=typing.cast(
872
+ Unauthorized,
873
+ parse_obj_as(
874
+ type_=Unauthorized, # type: ignore
875
+ object_=_response.json(),
876
+ ),
877
+ ),
878
+ )
879
+ if _response.status_code == 403:
880
+ raise ForbiddenError(
881
+ headers=dict(_response.headers),
882
+ body=typing.cast(
883
+ Forbidden,
884
+ parse_obj_as(
885
+ type_=Forbidden, # type: ignore
886
+ object_=_response.json(),
887
+ ),
888
+ ),
889
+ )
890
+ if _response.status_code == 404:
891
+ raise NotFoundError(
892
+ headers=dict(_response.headers),
893
+ body=typing.cast(
894
+ NotFound,
895
+ parse_obj_as(
896
+ type_=NotFound, # type: ignore
897
+ object_=_response.json(),
898
+ ),
899
+ ),
900
+ )
901
+ if _response.status_code == 422:
902
+ raise UnprocessableEntityError(
903
+ headers=dict(_response.headers),
904
+ body=typing.cast(
905
+ typing.Optional[typing.Any],
906
+ parse_obj_as(
907
+ type_=typing.Optional[typing.Any], # type: ignore
908
+ object_=_response.json(),
909
+ ),
910
+ ),
911
+ )
912
+ if _response.status_code == 429:
913
+ raise TooManyRequestsError(
914
+ headers=dict(_response.headers),
915
+ body=typing.cast(
916
+ TooManyRequests,
917
+ parse_obj_as(
918
+ type_=TooManyRequests, # type: ignore
919
+ object_=_response.json(),
920
+ ),
921
+ ),
922
+ )
923
+ _response_json = _response.json()
924
+ except JSONDecodeError:
925
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
926
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
927
+
928
+ def move(
929
+ self,
930
+ account_id: Uuid,
931
+ folder_id: Uuid,
932
+ *,
933
+ data: FolderMoveParamsData,
934
+ request_options: typing.Optional[RequestOptions] = None,
935
+ ) -> HttpResponse[FolderResponse]:
936
+ """
937
+ Move folder to a folder. <br><br>Rate Limits: 10 calls per 1.00 minute(s) per account
938
+
939
+ Parameters
940
+ ----------
941
+ account_id : Uuid
942
+
943
+
944
+ folder_id : Uuid
945
+
946
+
947
+ data : FolderMoveParamsData
948
+
949
+ request_options : typing.Optional[RequestOptions]
950
+ Request-specific configuration.
951
+
952
+ Returns
953
+ -------
954
+ HttpResponse[FolderResponse]
955
+ OK
956
+ """
957
+ _response = self._client_wrapper.httpx_client.request(
958
+ f"v4/accounts/{jsonable_encoder(account_id)}/folders/{jsonable_encoder(folder_id)}/move",
959
+ method="PATCH",
960
+ json={
961
+ "data": convert_and_respect_annotation_metadata(
962
+ object_=data, annotation=FolderMoveParamsData, direction="write"
963
+ ),
964
+ },
965
+ headers={
966
+ "content-type": "application/json",
967
+ },
968
+ request_options=request_options,
969
+ omit=OMIT,
970
+ )
971
+ try:
972
+ if 200 <= _response.status_code < 300:
973
+ _data = typing.cast(
974
+ FolderResponse,
975
+ parse_obj_as(
976
+ type_=FolderResponse, # type: ignore
977
+ object_=_response.json(),
978
+ ),
979
+ )
980
+ return HttpResponse(response=_response, data=_data)
981
+ if _response.status_code == 400:
982
+ raise BadRequestError(
983
+ headers=dict(_response.headers),
984
+ body=typing.cast(
985
+ BadRequest,
986
+ parse_obj_as(
987
+ type_=BadRequest, # type: ignore
988
+ object_=_response.json(),
989
+ ),
990
+ ),
991
+ )
992
+ if _response.status_code == 401:
993
+ raise UnauthorizedError(
994
+ headers=dict(_response.headers),
995
+ body=typing.cast(
996
+ Unauthorized,
997
+ parse_obj_as(
998
+ type_=Unauthorized, # type: ignore
999
+ object_=_response.json(),
1000
+ ),
1001
+ ),
1002
+ )
1003
+ if _response.status_code == 403:
1004
+ raise ForbiddenError(
1005
+ headers=dict(_response.headers),
1006
+ body=typing.cast(
1007
+ Forbidden,
1008
+ parse_obj_as(
1009
+ type_=Forbidden, # type: ignore
1010
+ object_=_response.json(),
1011
+ ),
1012
+ ),
1013
+ )
1014
+ if _response.status_code == 404:
1015
+ raise NotFoundError(
1016
+ headers=dict(_response.headers),
1017
+ body=typing.cast(
1018
+ NotFound,
1019
+ parse_obj_as(
1020
+ type_=NotFound, # type: ignore
1021
+ object_=_response.json(),
1022
+ ),
1023
+ ),
1024
+ )
1025
+ if _response.status_code == 422:
1026
+ raise UnprocessableEntityError(
1027
+ headers=dict(_response.headers),
1028
+ body=typing.cast(
1029
+ typing.Optional[typing.Any],
1030
+ parse_obj_as(
1031
+ type_=typing.Optional[typing.Any], # type: ignore
1032
+ object_=_response.json(),
1033
+ ),
1034
+ ),
1035
+ )
1036
+ if _response.status_code == 429:
1037
+ raise TooManyRequestsError(
1038
+ headers=dict(_response.headers),
1039
+ body=typing.cast(
1040
+ TooManyRequests,
1041
+ parse_obj_as(
1042
+ type_=TooManyRequests, # type: ignore
1043
+ object_=_response.json(),
1044
+ ),
1045
+ ),
1046
+ )
1047
+ _response_json = _response.json()
1048
+ except JSONDecodeError:
1049
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
1050
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
1051
+
1052
+
1053
+ class AsyncRawFoldersClient:
1054
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
1055
+ self._client_wrapper = client_wrapper
1056
+
1057
+ async def show(
1058
+ self,
1059
+ account_id: Uuid,
1060
+ folder_id: Uuid,
1061
+ *,
1062
+ include: typing.Optional[AssetInclude] = None,
1063
+ request_options: typing.Optional[RequestOptions] = None,
1064
+ ) -> AsyncHttpResponse[FolderWithIncludesResponse]:
1065
+ """
1066
+ Show folder details. <br><br>Rate Limits: 100 calls per 1.00 minute(s) per account
1067
+
1068
+ Parameters
1069
+ ----------
1070
+ account_id : Uuid
1071
+
1072
+
1073
+ folder_id : Uuid
1074
+
1075
+
1076
+ include : typing.Optional[AssetInclude]
1077
+
1078
+
1079
+ request_options : typing.Optional[RequestOptions]
1080
+ Request-specific configuration.
1081
+
1082
+ Returns
1083
+ -------
1084
+ AsyncHttpResponse[FolderWithIncludesResponse]
1085
+ OK
1086
+ """
1087
+ _response = await self._client_wrapper.httpx_client.request(
1088
+ f"v4/accounts/{jsonable_encoder(account_id)}/folders/{jsonable_encoder(folder_id)}",
1089
+ method="GET",
1090
+ params={
1091
+ "include": include,
1092
+ },
1093
+ request_options=request_options,
1094
+ )
1095
+ try:
1096
+ if 200 <= _response.status_code < 300:
1097
+ _data = typing.cast(
1098
+ FolderWithIncludesResponse,
1099
+ parse_obj_as(
1100
+ type_=FolderWithIncludesResponse, # type: ignore
1101
+ object_=_response.json(),
1102
+ ),
1103
+ )
1104
+ return AsyncHttpResponse(response=_response, data=_data)
1105
+ if _response.status_code == 400:
1106
+ raise BadRequestError(
1107
+ headers=dict(_response.headers),
1108
+ body=typing.cast(
1109
+ BadRequest,
1110
+ parse_obj_as(
1111
+ type_=BadRequest, # type: ignore
1112
+ object_=_response.json(),
1113
+ ),
1114
+ ),
1115
+ )
1116
+ if _response.status_code == 401:
1117
+ raise UnauthorizedError(
1118
+ headers=dict(_response.headers),
1119
+ body=typing.cast(
1120
+ Unauthorized,
1121
+ parse_obj_as(
1122
+ type_=Unauthorized, # type: ignore
1123
+ object_=_response.json(),
1124
+ ),
1125
+ ),
1126
+ )
1127
+ if _response.status_code == 403:
1128
+ raise ForbiddenError(
1129
+ headers=dict(_response.headers),
1130
+ body=typing.cast(
1131
+ Forbidden,
1132
+ parse_obj_as(
1133
+ type_=Forbidden, # type: ignore
1134
+ object_=_response.json(),
1135
+ ),
1136
+ ),
1137
+ )
1138
+ if _response.status_code == 404:
1139
+ raise NotFoundError(
1140
+ headers=dict(_response.headers),
1141
+ body=typing.cast(
1142
+ NotFound,
1143
+ parse_obj_as(
1144
+ type_=NotFound, # type: ignore
1145
+ object_=_response.json(),
1146
+ ),
1147
+ ),
1148
+ )
1149
+ if _response.status_code == 422:
1150
+ raise UnprocessableEntityError(
1151
+ headers=dict(_response.headers),
1152
+ body=typing.cast(
1153
+ typing.Optional[typing.Any],
1154
+ parse_obj_as(
1155
+ type_=typing.Optional[typing.Any], # type: ignore
1156
+ object_=_response.json(),
1157
+ ),
1158
+ ),
1159
+ )
1160
+ if _response.status_code == 429:
1161
+ raise TooManyRequestsError(
1162
+ headers=dict(_response.headers),
1163
+ body=typing.cast(
1164
+ TooManyRequests,
1165
+ parse_obj_as(
1166
+ type_=TooManyRequests, # type: ignore
1167
+ object_=_response.json(),
1168
+ ),
1169
+ ),
1170
+ )
1171
+ _response_json = _response.json()
1172
+ except JSONDecodeError:
1173
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
1174
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
1175
+
1176
+ async def delete(
1177
+ self, account_id: Uuid, folder_id: Uuid, *, request_options: typing.Optional[RequestOptions] = None
1178
+ ) -> AsyncHttpResponse[None]:
1179
+ """
1180
+ Delete folder by id.
1181
+
1182
+ Parameters
1183
+ ----------
1184
+ account_id : Uuid
1185
+
1186
+
1187
+ folder_id : Uuid
1188
+
1189
+
1190
+ request_options : typing.Optional[RequestOptions]
1191
+ Request-specific configuration.
1192
+
1193
+ Returns
1194
+ -------
1195
+ AsyncHttpResponse[None]
1196
+ """
1197
+ _response = await self._client_wrapper.httpx_client.request(
1198
+ f"v4/accounts/{jsonable_encoder(account_id)}/folders/{jsonable_encoder(folder_id)}",
1199
+ method="DELETE",
1200
+ request_options=request_options,
1201
+ )
1202
+ try:
1203
+ if 200 <= _response.status_code < 300:
1204
+ return AsyncHttpResponse(response=_response, data=None)
1205
+ if _response.status_code == 400:
1206
+ raise BadRequestError(
1207
+ headers=dict(_response.headers),
1208
+ body=typing.cast(
1209
+ BadRequest,
1210
+ parse_obj_as(
1211
+ type_=BadRequest, # type: ignore
1212
+ object_=_response.json(),
1213
+ ),
1214
+ ),
1215
+ )
1216
+ if _response.status_code == 401:
1217
+ raise UnauthorizedError(
1218
+ headers=dict(_response.headers),
1219
+ body=typing.cast(
1220
+ Unauthorized,
1221
+ parse_obj_as(
1222
+ type_=Unauthorized, # type: ignore
1223
+ object_=_response.json(),
1224
+ ),
1225
+ ),
1226
+ )
1227
+ if _response.status_code == 403:
1228
+ raise ForbiddenError(
1229
+ headers=dict(_response.headers),
1230
+ body=typing.cast(
1231
+ Forbidden,
1232
+ parse_obj_as(
1233
+ type_=Forbidden, # type: ignore
1234
+ object_=_response.json(),
1235
+ ),
1236
+ ),
1237
+ )
1238
+ if _response.status_code == 404:
1239
+ raise NotFoundError(
1240
+ headers=dict(_response.headers),
1241
+ body=typing.cast(
1242
+ NotFound,
1243
+ parse_obj_as(
1244
+ type_=NotFound, # type: ignore
1245
+ object_=_response.json(),
1246
+ ),
1247
+ ),
1248
+ )
1249
+ if _response.status_code == 422:
1250
+ raise UnprocessableEntityError(
1251
+ headers=dict(_response.headers),
1252
+ body=typing.cast(
1253
+ typing.Optional[typing.Any],
1254
+ parse_obj_as(
1255
+ type_=typing.Optional[typing.Any], # type: ignore
1256
+ object_=_response.json(),
1257
+ ),
1258
+ ),
1259
+ )
1260
+ if _response.status_code == 429:
1261
+ raise TooManyRequestsError(
1262
+ headers=dict(_response.headers),
1263
+ body=typing.cast(
1264
+ TooManyRequests,
1265
+ parse_obj_as(
1266
+ type_=TooManyRequests, # type: ignore
1267
+ object_=_response.json(),
1268
+ ),
1269
+ ),
1270
+ )
1271
+ _response_json = _response.json()
1272
+ except JSONDecodeError:
1273
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
1274
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
1275
+
1276
+ async def update(
1277
+ self,
1278
+ account_id: Uuid,
1279
+ folder_id: Uuid,
1280
+ *,
1281
+ data: FolderUpdateParamsData,
1282
+ request_options: typing.Optional[RequestOptions] = None,
1283
+ ) -> AsyncHttpResponse[FolderResponse]:
1284
+ """
1285
+ Update folder details.
1286
+
1287
+ Parameters
1288
+ ----------
1289
+ account_id : Uuid
1290
+
1291
+
1292
+ folder_id : Uuid
1293
+
1294
+
1295
+ data : FolderUpdateParamsData
1296
+
1297
+ request_options : typing.Optional[RequestOptions]
1298
+ Request-specific configuration.
1299
+
1300
+ Returns
1301
+ -------
1302
+ AsyncHttpResponse[FolderResponse]
1303
+ OK
1304
+ """
1305
+ _response = await self._client_wrapper.httpx_client.request(
1306
+ f"v4/accounts/{jsonable_encoder(account_id)}/folders/{jsonable_encoder(folder_id)}",
1307
+ method="PATCH",
1308
+ json={
1309
+ "data": convert_and_respect_annotation_metadata(
1310
+ object_=data, annotation=FolderUpdateParamsData, direction="write"
1311
+ ),
1312
+ },
1313
+ headers={
1314
+ "content-type": "application/json",
1315
+ },
1316
+ request_options=request_options,
1317
+ omit=OMIT,
1318
+ )
1319
+ try:
1320
+ if 200 <= _response.status_code < 300:
1321
+ _data = typing.cast(
1322
+ FolderResponse,
1323
+ parse_obj_as(
1324
+ type_=FolderResponse, # type: ignore
1325
+ object_=_response.json(),
1326
+ ),
1327
+ )
1328
+ return AsyncHttpResponse(response=_response, data=_data)
1329
+ if _response.status_code == 400:
1330
+ raise BadRequestError(
1331
+ headers=dict(_response.headers),
1332
+ body=typing.cast(
1333
+ BadRequest,
1334
+ parse_obj_as(
1335
+ type_=BadRequest, # type: ignore
1336
+ object_=_response.json(),
1337
+ ),
1338
+ ),
1339
+ )
1340
+ if _response.status_code == 401:
1341
+ raise UnauthorizedError(
1342
+ headers=dict(_response.headers),
1343
+ body=typing.cast(
1344
+ Unauthorized,
1345
+ parse_obj_as(
1346
+ type_=Unauthorized, # type: ignore
1347
+ object_=_response.json(),
1348
+ ),
1349
+ ),
1350
+ )
1351
+ if _response.status_code == 403:
1352
+ raise ForbiddenError(
1353
+ headers=dict(_response.headers),
1354
+ body=typing.cast(
1355
+ Forbidden,
1356
+ parse_obj_as(
1357
+ type_=Forbidden, # type: ignore
1358
+ object_=_response.json(),
1359
+ ),
1360
+ ),
1361
+ )
1362
+ if _response.status_code == 404:
1363
+ raise NotFoundError(
1364
+ headers=dict(_response.headers),
1365
+ body=typing.cast(
1366
+ NotFound,
1367
+ parse_obj_as(
1368
+ type_=NotFound, # type: ignore
1369
+ object_=_response.json(),
1370
+ ),
1371
+ ),
1372
+ )
1373
+ if _response.status_code == 422:
1374
+ raise UnprocessableEntityError(
1375
+ headers=dict(_response.headers),
1376
+ body=typing.cast(
1377
+ typing.Optional[typing.Any],
1378
+ parse_obj_as(
1379
+ type_=typing.Optional[typing.Any], # type: ignore
1380
+ object_=_response.json(),
1381
+ ),
1382
+ ),
1383
+ )
1384
+ if _response.status_code == 429:
1385
+ raise TooManyRequestsError(
1386
+ headers=dict(_response.headers),
1387
+ body=typing.cast(
1388
+ TooManyRequests,
1389
+ parse_obj_as(
1390
+ type_=TooManyRequests, # type: ignore
1391
+ object_=_response.json(),
1392
+ ),
1393
+ ),
1394
+ )
1395
+ _response_json = _response.json()
1396
+ except JSONDecodeError:
1397
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
1398
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
1399
+
1400
+ async def index(
1401
+ self,
1402
+ account_id: Uuid,
1403
+ folder_id: Uuid,
1404
+ *,
1405
+ include: typing.Optional[FileWithMediaLinksInclude] = None,
1406
+ type: typing.Optional[ChildrenType] = None,
1407
+ after: typing.Optional[RequestAfterOpaqueCursor] = None,
1408
+ page_size: typing.Optional[RequestPageSize] = None,
1409
+ include_total_count: typing.Optional[IncludeTotalCount] = None,
1410
+ request_options: typing.Optional[RequestOptions] = None,
1411
+ ) -> AsyncHttpResponse[AssetsWithIncludesResponse]:
1412
+ """
1413
+ List the children in the given folder.
1414
+ <br><br>
1415
+ Use the `include` query parameter to selectively include additional properties in the response.
1416
+ <br><br>
1417
+ Note: if you include `media_links.original` and the user does not have permission to download files
1418
+ in the corresponding project, then this endpoint will respond with a `403 Forbidden` error.
1419
+ If the content is inaccessible because watermarking is required for this user and isn't supported by
1420
+ the requested media_links, then the request will succeed but the unsupported media links will be set to null.
1421
+ Similarly, if a requested transcode link does not exist for a particular file (e.g. including
1422
+ `media_links.video_h264_180` on a static image file) or transoding process hasn't finished
1423
+ (i.e. the file's `status` is "uploaded" rather than "transcoded"), then the a media link will also be set to
1424
+ null in the response payload. In short, the client must handle null media links gracefully.
1425
+
1426
+ Parameters
1427
+ ----------
1428
+ account_id : Uuid
1429
+
1430
+
1431
+ folder_id : Uuid
1432
+
1433
+
1434
+ include : typing.Optional[FileWithMediaLinksInclude]
1435
+
1436
+
1437
+ type : typing.Optional[ChildrenType]
1438
+
1439
+
1440
+ after : typing.Optional[RequestAfterOpaqueCursor]
1441
+ Opaque Cursor query param for requests returning paginated results.
1442
+ <br/>
1443
+ NOTE: this value is auto-generated and included as part of links from a previous response. It is not intended to be human readable.
1444
+
1445
+ page_size : typing.Optional[RequestPageSize]
1446
+
1447
+
1448
+ include_total_count : typing.Optional[IncludeTotalCount]
1449
+
1450
+
1451
+ request_options : typing.Optional[RequestOptions]
1452
+ Request-specific configuration.
1453
+
1454
+ Returns
1455
+ -------
1456
+ AsyncHttpResponse[AssetsWithIncludesResponse]
1457
+ OK
1458
+ """
1459
+ _response = await self._client_wrapper.httpx_client.request(
1460
+ f"v4/accounts/{jsonable_encoder(account_id)}/folders/{jsonable_encoder(folder_id)}/children",
1461
+ method="GET",
1462
+ params={
1463
+ "include": include,
1464
+ "type": type,
1465
+ "after": after,
1466
+ "page_size": page_size,
1467
+ "include_total_count": include_total_count,
1468
+ },
1469
+ request_options=request_options,
1470
+ )
1471
+ try:
1472
+ if 200 <= _response.status_code < 300:
1473
+ _data = typing.cast(
1474
+ AssetsWithIncludesResponse,
1475
+ parse_obj_as(
1476
+ type_=AssetsWithIncludesResponse, # type: ignore
1477
+ object_=_response.json(),
1478
+ ),
1479
+ )
1480
+ return AsyncHttpResponse(response=_response, data=_data)
1481
+ if _response.status_code == 400:
1482
+ raise BadRequestError(
1483
+ headers=dict(_response.headers),
1484
+ body=typing.cast(
1485
+ BadRequest,
1486
+ parse_obj_as(
1487
+ type_=BadRequest, # type: ignore
1488
+ object_=_response.json(),
1489
+ ),
1490
+ ),
1491
+ )
1492
+ if _response.status_code == 401:
1493
+ raise UnauthorizedError(
1494
+ headers=dict(_response.headers),
1495
+ body=typing.cast(
1496
+ Unauthorized,
1497
+ parse_obj_as(
1498
+ type_=Unauthorized, # type: ignore
1499
+ object_=_response.json(),
1500
+ ),
1501
+ ),
1502
+ )
1503
+ if _response.status_code == 403:
1504
+ raise ForbiddenError(
1505
+ headers=dict(_response.headers),
1506
+ body=typing.cast(
1507
+ Forbidden,
1508
+ parse_obj_as(
1509
+ type_=Forbidden, # type: ignore
1510
+ object_=_response.json(),
1511
+ ),
1512
+ ),
1513
+ )
1514
+ if _response.status_code == 404:
1515
+ raise NotFoundError(
1516
+ headers=dict(_response.headers),
1517
+ body=typing.cast(
1518
+ NotFound,
1519
+ parse_obj_as(
1520
+ type_=NotFound, # type: ignore
1521
+ object_=_response.json(),
1522
+ ),
1523
+ ),
1524
+ )
1525
+ if _response.status_code == 422:
1526
+ raise UnprocessableEntityError(
1527
+ headers=dict(_response.headers),
1528
+ body=typing.cast(
1529
+ typing.Optional[typing.Any],
1530
+ parse_obj_as(
1531
+ type_=typing.Optional[typing.Any], # type: ignore
1532
+ object_=_response.json(),
1533
+ ),
1534
+ ),
1535
+ )
1536
+ if _response.status_code == 429:
1537
+ raise TooManyRequestsError(
1538
+ headers=dict(_response.headers),
1539
+ body=typing.cast(
1540
+ TooManyRequests,
1541
+ parse_obj_as(
1542
+ type_=TooManyRequests, # type: ignore
1543
+ object_=_response.json(),
1544
+ ),
1545
+ ),
1546
+ )
1547
+ _response_json = _response.json()
1548
+ except JSONDecodeError:
1549
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
1550
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
1551
+
1552
+ async def copy(
1553
+ self,
1554
+ account_id: Uuid,
1555
+ folder_id: Uuid,
1556
+ *,
1557
+ data: typing.Optional[FolderCopyParamsData] = OMIT,
1558
+ request_options: typing.Optional[RequestOptions] = None,
1559
+ ) -> AsyncHttpResponse[FolderCopyResponse]:
1560
+ """
1561
+ Copy folder. <br><br>Rate Limits: 10 calls per 1.00 minute(s) per account
1562
+
1563
+ Parameters
1564
+ ----------
1565
+ account_id : Uuid
1566
+
1567
+
1568
+ folder_id : Uuid
1569
+
1570
+
1571
+ data : typing.Optional[FolderCopyParamsData]
1572
+
1573
+ request_options : typing.Optional[RequestOptions]
1574
+ Request-specific configuration.
1575
+
1576
+ Returns
1577
+ -------
1578
+ AsyncHttpResponse[FolderCopyResponse]
1579
+ OK
1580
+ """
1581
+ _response = await self._client_wrapper.httpx_client.request(
1582
+ f"v4/accounts/{jsonable_encoder(account_id)}/folders/{jsonable_encoder(folder_id)}/copy",
1583
+ method="POST",
1584
+ json={
1585
+ "data": convert_and_respect_annotation_metadata(
1586
+ object_=data, annotation=FolderCopyParamsData, direction="write"
1587
+ ),
1588
+ },
1589
+ headers={
1590
+ "content-type": "application/json",
1591
+ },
1592
+ request_options=request_options,
1593
+ omit=OMIT,
1594
+ )
1595
+ try:
1596
+ if 200 <= _response.status_code < 300:
1597
+ _data = typing.cast(
1598
+ FolderCopyResponse,
1599
+ parse_obj_as(
1600
+ type_=FolderCopyResponse, # type: ignore
1601
+ object_=_response.json(),
1602
+ ),
1603
+ )
1604
+ return AsyncHttpResponse(response=_response, data=_data)
1605
+ if _response.status_code == 400:
1606
+ raise BadRequestError(
1607
+ headers=dict(_response.headers),
1608
+ body=typing.cast(
1609
+ BadRequest,
1610
+ parse_obj_as(
1611
+ type_=BadRequest, # type: ignore
1612
+ object_=_response.json(),
1613
+ ),
1614
+ ),
1615
+ )
1616
+ if _response.status_code == 401:
1617
+ raise UnauthorizedError(
1618
+ headers=dict(_response.headers),
1619
+ body=typing.cast(
1620
+ Unauthorized,
1621
+ parse_obj_as(
1622
+ type_=Unauthorized, # type: ignore
1623
+ object_=_response.json(),
1624
+ ),
1625
+ ),
1626
+ )
1627
+ if _response.status_code == 403:
1628
+ raise ForbiddenError(
1629
+ headers=dict(_response.headers),
1630
+ body=typing.cast(
1631
+ Forbidden,
1632
+ parse_obj_as(
1633
+ type_=Forbidden, # type: ignore
1634
+ object_=_response.json(),
1635
+ ),
1636
+ ),
1637
+ )
1638
+ if _response.status_code == 404:
1639
+ raise NotFoundError(
1640
+ headers=dict(_response.headers),
1641
+ body=typing.cast(
1642
+ NotFound,
1643
+ parse_obj_as(
1644
+ type_=NotFound, # type: ignore
1645
+ object_=_response.json(),
1646
+ ),
1647
+ ),
1648
+ )
1649
+ if _response.status_code == 422:
1650
+ raise UnprocessableEntityError(
1651
+ headers=dict(_response.headers),
1652
+ body=typing.cast(
1653
+ typing.Optional[typing.Any],
1654
+ parse_obj_as(
1655
+ type_=typing.Optional[typing.Any], # type: ignore
1656
+ object_=_response.json(),
1657
+ ),
1658
+ ),
1659
+ )
1660
+ if _response.status_code == 429:
1661
+ raise TooManyRequestsError(
1662
+ headers=dict(_response.headers),
1663
+ body=typing.cast(
1664
+ TooManyRequests,
1665
+ parse_obj_as(
1666
+ type_=TooManyRequests, # type: ignore
1667
+ object_=_response.json(),
1668
+ ),
1669
+ ),
1670
+ )
1671
+ _response_json = _response.json()
1672
+ except JSONDecodeError:
1673
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
1674
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
1675
+
1676
+ async def list(
1677
+ self,
1678
+ account_id: Uuid,
1679
+ folder_id: Uuid,
1680
+ *,
1681
+ include: typing.Optional[AssetInclude] = None,
1682
+ after: typing.Optional[RequestAfterOpaqueCursor] = None,
1683
+ page_size: typing.Optional[RequestPageSize] = None,
1684
+ include_total_count: typing.Optional[IncludeTotalCount] = None,
1685
+ request_options: typing.Optional[RequestOptions] = None,
1686
+ ) -> AsyncHttpResponse[FoldersWithIncludesResponse]:
1687
+ """
1688
+ List folders in a given folder. <br><br>Rate Limits: 5 calls per 1 second(s) per account
1689
+
1690
+ Parameters
1691
+ ----------
1692
+ account_id : Uuid
1693
+
1694
+
1695
+ folder_id : Uuid
1696
+
1697
+
1698
+ include : typing.Optional[AssetInclude]
1699
+
1700
+
1701
+ after : typing.Optional[RequestAfterOpaqueCursor]
1702
+ Opaque Cursor query param for requests returning paginated results.
1703
+ <br/>
1704
+ NOTE: this value is auto-generated and included as part of links from a previous response. It is not intended to be human readable.
1705
+
1706
+ page_size : typing.Optional[RequestPageSize]
1707
+
1708
+
1709
+ include_total_count : typing.Optional[IncludeTotalCount]
1710
+
1711
+
1712
+ request_options : typing.Optional[RequestOptions]
1713
+ Request-specific configuration.
1714
+
1715
+ Returns
1716
+ -------
1717
+ AsyncHttpResponse[FoldersWithIncludesResponse]
1718
+ OK
1719
+ """
1720
+ _response = await self._client_wrapper.httpx_client.request(
1721
+ f"v4/accounts/{jsonable_encoder(account_id)}/folders/{jsonable_encoder(folder_id)}/folders",
1722
+ method="GET",
1723
+ params={
1724
+ "include": include,
1725
+ "after": after,
1726
+ "page_size": page_size,
1727
+ "include_total_count": include_total_count,
1728
+ },
1729
+ request_options=request_options,
1730
+ )
1731
+ try:
1732
+ if 200 <= _response.status_code < 300:
1733
+ _data = typing.cast(
1734
+ FoldersWithIncludesResponse,
1735
+ parse_obj_as(
1736
+ type_=FoldersWithIncludesResponse, # type: ignore
1737
+ object_=_response.json(),
1738
+ ),
1739
+ )
1740
+ return AsyncHttpResponse(response=_response, data=_data)
1741
+ if _response.status_code == 400:
1742
+ raise BadRequestError(
1743
+ headers=dict(_response.headers),
1744
+ body=typing.cast(
1745
+ BadRequest,
1746
+ parse_obj_as(
1747
+ type_=BadRequest, # type: ignore
1748
+ object_=_response.json(),
1749
+ ),
1750
+ ),
1751
+ )
1752
+ if _response.status_code == 401:
1753
+ raise UnauthorizedError(
1754
+ headers=dict(_response.headers),
1755
+ body=typing.cast(
1756
+ Unauthorized,
1757
+ parse_obj_as(
1758
+ type_=Unauthorized, # type: ignore
1759
+ object_=_response.json(),
1760
+ ),
1761
+ ),
1762
+ )
1763
+ if _response.status_code == 403:
1764
+ raise ForbiddenError(
1765
+ headers=dict(_response.headers),
1766
+ body=typing.cast(
1767
+ Forbidden,
1768
+ parse_obj_as(
1769
+ type_=Forbidden, # type: ignore
1770
+ object_=_response.json(),
1771
+ ),
1772
+ ),
1773
+ )
1774
+ if _response.status_code == 404:
1775
+ raise NotFoundError(
1776
+ headers=dict(_response.headers),
1777
+ body=typing.cast(
1778
+ NotFound,
1779
+ parse_obj_as(
1780
+ type_=NotFound, # type: ignore
1781
+ object_=_response.json(),
1782
+ ),
1783
+ ),
1784
+ )
1785
+ if _response.status_code == 422:
1786
+ raise UnprocessableEntityError(
1787
+ headers=dict(_response.headers),
1788
+ body=typing.cast(
1789
+ typing.Optional[typing.Any],
1790
+ parse_obj_as(
1791
+ type_=typing.Optional[typing.Any], # type: ignore
1792
+ object_=_response.json(),
1793
+ ),
1794
+ ),
1795
+ )
1796
+ if _response.status_code == 429:
1797
+ raise TooManyRequestsError(
1798
+ headers=dict(_response.headers),
1799
+ body=typing.cast(
1800
+ TooManyRequests,
1801
+ parse_obj_as(
1802
+ type_=TooManyRequests, # type: ignore
1803
+ object_=_response.json(),
1804
+ ),
1805
+ ),
1806
+ )
1807
+ _response_json = _response.json()
1808
+ except JSONDecodeError:
1809
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
1810
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
1811
+
1812
+ async def create(
1813
+ self,
1814
+ account_id: Uuid,
1815
+ folder_id: Uuid,
1816
+ *,
1817
+ data: FolderCreateParamsData,
1818
+ request_options: typing.Optional[RequestOptions] = None,
1819
+ ) -> AsyncHttpResponse[FolderResponse]:
1820
+ """
1821
+ Create a new folder inside the given <i>folder_id</i> path param. <br><br>Rate Limits: 3 calls per 1 second(s) per account
1822
+
1823
+ Parameters
1824
+ ----------
1825
+ account_id : Uuid
1826
+
1827
+
1828
+ folder_id : Uuid
1829
+
1830
+
1831
+ data : FolderCreateParamsData
1832
+
1833
+ request_options : typing.Optional[RequestOptions]
1834
+ Request-specific configuration.
1835
+
1836
+ Returns
1837
+ -------
1838
+ AsyncHttpResponse[FolderResponse]
1839
+ Created
1840
+ """
1841
+ _response = await self._client_wrapper.httpx_client.request(
1842
+ f"v4/accounts/{jsonable_encoder(account_id)}/folders/{jsonable_encoder(folder_id)}/folders",
1843
+ method="POST",
1844
+ json={
1845
+ "data": convert_and_respect_annotation_metadata(
1846
+ object_=data, annotation=FolderCreateParamsData, direction="write"
1847
+ ),
1848
+ },
1849
+ headers={
1850
+ "content-type": "application/json",
1851
+ },
1852
+ request_options=request_options,
1853
+ omit=OMIT,
1854
+ )
1855
+ try:
1856
+ if 200 <= _response.status_code < 300:
1857
+ _data = typing.cast(
1858
+ FolderResponse,
1859
+ parse_obj_as(
1860
+ type_=FolderResponse, # type: ignore
1861
+ object_=_response.json(),
1862
+ ),
1863
+ )
1864
+ return AsyncHttpResponse(response=_response, data=_data)
1865
+ if _response.status_code == 400:
1866
+ raise BadRequestError(
1867
+ headers=dict(_response.headers),
1868
+ body=typing.cast(
1869
+ BadRequest,
1870
+ parse_obj_as(
1871
+ type_=BadRequest, # type: ignore
1872
+ object_=_response.json(),
1873
+ ),
1874
+ ),
1875
+ )
1876
+ if _response.status_code == 401:
1877
+ raise UnauthorizedError(
1878
+ headers=dict(_response.headers),
1879
+ body=typing.cast(
1880
+ Unauthorized,
1881
+ parse_obj_as(
1882
+ type_=Unauthorized, # type: ignore
1883
+ object_=_response.json(),
1884
+ ),
1885
+ ),
1886
+ )
1887
+ if _response.status_code == 403:
1888
+ raise ForbiddenError(
1889
+ headers=dict(_response.headers),
1890
+ body=typing.cast(
1891
+ Forbidden,
1892
+ parse_obj_as(
1893
+ type_=Forbidden, # type: ignore
1894
+ object_=_response.json(),
1895
+ ),
1896
+ ),
1897
+ )
1898
+ if _response.status_code == 404:
1899
+ raise NotFoundError(
1900
+ headers=dict(_response.headers),
1901
+ body=typing.cast(
1902
+ NotFound,
1903
+ parse_obj_as(
1904
+ type_=NotFound, # type: ignore
1905
+ object_=_response.json(),
1906
+ ),
1907
+ ),
1908
+ )
1909
+ if _response.status_code == 422:
1910
+ raise UnprocessableEntityError(
1911
+ headers=dict(_response.headers),
1912
+ body=typing.cast(
1913
+ typing.Optional[typing.Any],
1914
+ parse_obj_as(
1915
+ type_=typing.Optional[typing.Any], # type: ignore
1916
+ object_=_response.json(),
1917
+ ),
1918
+ ),
1919
+ )
1920
+ if _response.status_code == 429:
1921
+ raise TooManyRequestsError(
1922
+ headers=dict(_response.headers),
1923
+ body=typing.cast(
1924
+ TooManyRequests,
1925
+ parse_obj_as(
1926
+ type_=TooManyRequests, # type: ignore
1927
+ object_=_response.json(),
1928
+ ),
1929
+ ),
1930
+ )
1931
+ _response_json = _response.json()
1932
+ except JSONDecodeError:
1933
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
1934
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
1935
+
1936
+ async def move(
1937
+ self,
1938
+ account_id: Uuid,
1939
+ folder_id: Uuid,
1940
+ *,
1941
+ data: FolderMoveParamsData,
1942
+ request_options: typing.Optional[RequestOptions] = None,
1943
+ ) -> AsyncHttpResponse[FolderResponse]:
1944
+ """
1945
+ Move folder to a folder. <br><br>Rate Limits: 10 calls per 1.00 minute(s) per account
1946
+
1947
+ Parameters
1948
+ ----------
1949
+ account_id : Uuid
1950
+
1951
+
1952
+ folder_id : Uuid
1953
+
1954
+
1955
+ data : FolderMoveParamsData
1956
+
1957
+ request_options : typing.Optional[RequestOptions]
1958
+ Request-specific configuration.
1959
+
1960
+ Returns
1961
+ -------
1962
+ AsyncHttpResponse[FolderResponse]
1963
+ OK
1964
+ """
1965
+ _response = await self._client_wrapper.httpx_client.request(
1966
+ f"v4/accounts/{jsonable_encoder(account_id)}/folders/{jsonable_encoder(folder_id)}/move",
1967
+ method="PATCH",
1968
+ json={
1969
+ "data": convert_and_respect_annotation_metadata(
1970
+ object_=data, annotation=FolderMoveParamsData, direction="write"
1971
+ ),
1972
+ },
1973
+ headers={
1974
+ "content-type": "application/json",
1975
+ },
1976
+ request_options=request_options,
1977
+ omit=OMIT,
1978
+ )
1979
+ try:
1980
+ if 200 <= _response.status_code < 300:
1981
+ _data = typing.cast(
1982
+ FolderResponse,
1983
+ parse_obj_as(
1984
+ type_=FolderResponse, # type: ignore
1985
+ object_=_response.json(),
1986
+ ),
1987
+ )
1988
+ return AsyncHttpResponse(response=_response, data=_data)
1989
+ if _response.status_code == 400:
1990
+ raise BadRequestError(
1991
+ headers=dict(_response.headers),
1992
+ body=typing.cast(
1993
+ BadRequest,
1994
+ parse_obj_as(
1995
+ type_=BadRequest, # type: ignore
1996
+ object_=_response.json(),
1997
+ ),
1998
+ ),
1999
+ )
2000
+ if _response.status_code == 401:
2001
+ raise UnauthorizedError(
2002
+ headers=dict(_response.headers),
2003
+ body=typing.cast(
2004
+ Unauthorized,
2005
+ parse_obj_as(
2006
+ type_=Unauthorized, # type: ignore
2007
+ object_=_response.json(),
2008
+ ),
2009
+ ),
2010
+ )
2011
+ if _response.status_code == 403:
2012
+ raise ForbiddenError(
2013
+ headers=dict(_response.headers),
2014
+ body=typing.cast(
2015
+ Forbidden,
2016
+ parse_obj_as(
2017
+ type_=Forbidden, # type: ignore
2018
+ object_=_response.json(),
2019
+ ),
2020
+ ),
2021
+ )
2022
+ if _response.status_code == 404:
2023
+ raise NotFoundError(
2024
+ headers=dict(_response.headers),
2025
+ body=typing.cast(
2026
+ NotFound,
2027
+ parse_obj_as(
2028
+ type_=NotFound, # type: ignore
2029
+ object_=_response.json(),
2030
+ ),
2031
+ ),
2032
+ )
2033
+ if _response.status_code == 422:
2034
+ raise UnprocessableEntityError(
2035
+ headers=dict(_response.headers),
2036
+ body=typing.cast(
2037
+ typing.Optional[typing.Any],
2038
+ parse_obj_as(
2039
+ type_=typing.Optional[typing.Any], # type: ignore
2040
+ object_=_response.json(),
2041
+ ),
2042
+ ),
2043
+ )
2044
+ if _response.status_code == 429:
2045
+ raise TooManyRequestsError(
2046
+ headers=dict(_response.headers),
2047
+ body=typing.cast(
2048
+ TooManyRequests,
2049
+ parse_obj_as(
2050
+ type_=TooManyRequests, # type: ignore
2051
+ object_=_response.json(),
2052
+ ),
2053
+ ),
2054
+ )
2055
+ _response_json = _response.json()
2056
+ except JSONDecodeError:
2057
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
2058
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)