tutorflow-content 0.1.0__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 (507) hide show
  1. tutorflow_content/__init__.py +42 -0
  2. tutorflow_content/client.py +71 -0
  3. tutorflow_content/errors.py +87 -0
  4. tutorflow_content/generated/__init__.py +8 -0
  5. tutorflow_content/generated/api/__init__.py +1 -0
  6. tutorflow_content/generated/api/content_api_keys/__init__.py +1 -0
  7. tutorflow_content/generated/api/content_api_keys/content_integration_api_key_controller_create_api_key.py +243 -0
  8. tutorflow_content/generated/api/content_api_keys/content_integration_api_key_controller_delete_api_key.py +251 -0
  9. tutorflow_content/generated/api/content_api_keys/content_integration_api_key_controller_list_api_keys.py +228 -0
  10. tutorflow_content/generated/api/content_api_keys/content_integration_api_key_controller_revoke_api_key.py +232 -0
  11. tutorflow_content/generated/api/content_api_keys/content_integration_api_key_controller_rotate_api_key.py +256 -0
  12. tutorflow_content/generated/api/content_api_keys/content_integration_api_key_controller_update_api_key.py +283 -0
  13. tutorflow_content/generated/api/content_api_keys/content_organization_activity_controller_api_key_labels.py +240 -0
  14. tutorflow_content/generated/api/content_assets/__init__.py +1 -0
  15. tutorflow_content/generated/api/content_assets/content_asset_upload_controller_complete.py +266 -0
  16. tutorflow_content/generated/api/content_assets/content_asset_upload_controller_create.py +350 -0
  17. tutorflow_content/generated/api/content_audit_log/__init__.py +1 -0
  18. tutorflow_content/generated/api/content_audit_log/content_api_audit_log_controller_list.py +383 -0
  19. tutorflow_content/generated/api/content_audit_log/content_organization_activity_controller_audit_log.py +384 -0
  20. tutorflow_content/generated/api/content_classrooms/__init__.py +1 -0
  21. tutorflow_content/generated/api/content_classrooms/content_integration_classroom_controller_list_classrooms.py +206 -0
  22. tutorflow_content/generated/api/content_course_curriculum/__init__.py +1 -0
  23. tutorflow_content/generated/api/content_course_curriculum/content_resource_course_curriculum_controller_create_chapter.py +291 -0
  24. tutorflow_content/generated/api/content_course_curriculum/content_resource_course_curriculum_controller_create_lesson.py +304 -0
  25. tutorflow_content/generated/api/content_course_curriculum/content_resource_course_curriculum_controller_delete_chapter.py +283 -0
  26. tutorflow_content/generated/api/content_course_curriculum/content_resource_course_curriculum_controller_delete_lesson.py +283 -0
  27. tutorflow_content/generated/api/content_course_curriculum/content_resource_course_curriculum_controller_get_lesson.py +280 -0
  28. tutorflow_content/generated/api/content_course_curriculum/content_resource_course_curriculum_controller_list_chapters.py +267 -0
  29. tutorflow_content/generated/api/content_course_curriculum/content_resource_course_curriculum_controller_reorder_chapters.py +287 -0
  30. tutorflow_content/generated/api/content_course_curriculum/content_resource_course_curriculum_controller_reorder_lessons.py +300 -0
  31. tutorflow_content/generated/api/content_course_curriculum/content_resource_course_curriculum_controller_update_chapter.py +300 -0
  32. tutorflow_content/generated/api/content_course_curriculum/content_resource_course_curriculum_controller_update_lesson.py +300 -0
  33. tutorflow_content/generated/api/content_courses/__init__.py +1 -0
  34. tutorflow_content/generated/api/content_courses/content_resource_course_controller_create.py +278 -0
  35. tutorflow_content/generated/api/content_courses/content_resource_course_controller_delete.py +270 -0
  36. tutorflow_content/generated/api/content_courses/content_resource_course_controller_get.py +315 -0
  37. tutorflow_content/generated/api/content_courses/content_resource_course_controller_list.py +379 -0
  38. tutorflow_content/generated/api/content_courses/content_resource_course_controller_update.py +295 -0
  39. tutorflow_content/generated/api/content_credits/__init__.py +1 -0
  40. tutorflow_content/generated/api/content_credits/content_integration_credit_controller_get_balance.py +209 -0
  41. tutorflow_content/generated/api/content_credits/content_integration_credit_controller_get_history.py +366 -0
  42. tutorflow_content/generated/api/content_credits/content_organization_activity_controller_credit_history.py +371 -0
  43. tutorflow_content/generated/api/content_evaluations/__init__.py +1 -0
  44. tutorflow_content/generated/api/content_evaluations/content_evaluation_controller_create.py +323 -0
  45. tutorflow_content/generated/api/content_evaluations/content_evaluation_controller_download_file.py +277 -0
  46. tutorflow_content/generated/api/content_evaluations/content_evaluation_controller_get.py +247 -0
  47. tutorflow_content/generated/api/content_evaluations/content_evaluation_controller_list.py +330 -0
  48. tutorflow_content/generated/api/content_evaluations/content_learning_controller_get_mastery.py +247 -0
  49. tutorflow_content/generated/api/content_evaluations/content_learning_controller_list_concepts.py +234 -0
  50. tutorflow_content/generated/api/content_games/__init__.py +1 -0
  51. tutorflow_content/generated/api/content_games/content_resource_game_controller_build_game.py +325 -0
  52. tutorflow_content/generated/api/content_games/content_resource_game_controller_create.py +278 -0
  53. tutorflow_content/generated/api/content_games/content_resource_game_controller_delete.py +274 -0
  54. tutorflow_content/generated/api/content_games/content_resource_game_controller_generate_brief.py +338 -0
  55. tutorflow_content/generated/api/content_games/content_resource_game_controller_get.py +267 -0
  56. tutorflow_content/generated/api/content_games/content_resource_game_controller_get_run_status.py +243 -0
  57. tutorflow_content/generated/api/content_games/content_resource_game_controller_list.py +364 -0
  58. tutorflow_content/generated/api/content_games/content_resource_game_controller_restore_version.py +287 -0
  59. tutorflow_content/generated/api/content_games/content_resource_game_controller_revise_game.py +342 -0
  60. tutorflow_content/generated/api/content_games/content_resource_game_controller_update.py +287 -0
  61. tutorflow_content/generated/api/content_generation/__init__.py +1 -0
  62. tutorflow_content/generated/api/content_generation/content_generation_controller_generate_course.py +337 -0
  63. tutorflow_content/generated/api/content_generation/content_generation_controller_generate_module.py +329 -0
  64. tutorflow_content/generated/api/content_generation/content_generation_controller_generate_slides.py +353 -0
  65. tutorflow_content/generated/api/content_generation/content_generation_controller_generate_test.py +321 -0
  66. tutorflow_content/generated/api/content_generation/content_generation_controller_get_run.py +243 -0
  67. tutorflow_content/generated/api/content_generation/content_generation_controller_list_runs.py +311 -0
  68. tutorflow_content/generated/api/content_generation/content_generation_controller_resume_run.py +341 -0
  69. tutorflow_content/generated/api/content_integrations/__init__.py +1 -0
  70. tutorflow_content/generated/api/content_integrations/content_integration_controller_create_expansion.py +280 -0
  71. tutorflow_content/generated/api/content_integrations/content_integration_controller_get_expansion.py +230 -0
  72. tutorflow_content/generated/api/content_integrations/content_integration_controller_get_expansion_result.py +230 -0
  73. tutorflow_content/generated/api/content_learners/__init__.py +1 -0
  74. tutorflow_content/generated/api/content_learners/content_learner_controller_get.py +251 -0
  75. tutorflow_content/generated/api/content_learners/content_learner_controller_invite.py +317 -0
  76. tutorflow_content/generated/api/content_learners/content_learner_controller_list.py +318 -0
  77. tutorflow_content/generated/api/content_learners/content_learner_controller_progress.py +288 -0
  78. tutorflow_content/generated/api/content_learners/content_learner_controller_remove.py +255 -0
  79. tutorflow_content/generated/api/content_learners/content_learner_enrollment_controller_enroll.py +303 -0
  80. tutorflow_content/generated/api/content_learners/content_learner_enrollment_controller_list.py +288 -0
  81. tutorflow_content/generated/api/content_learners/content_learner_enrollment_controller_unenroll.py +264 -0
  82. tutorflow_content/generated/api/content_learners/content_test_result_controller_get.py +295 -0
  83. tutorflow_content/generated/api/content_learners/content_test_result_controller_list.py +314 -0
  84. tutorflow_content/generated/api/content_modules/__init__.py +1 -0
  85. tutorflow_content/generated/api/content_modules/content_resource_module_controller_copy_to_course.py +291 -0
  86. tutorflow_content/generated/api/content_modules/content_resource_module_controller_create.py +278 -0
  87. tutorflow_content/generated/api/content_modules/content_resource_module_controller_delete.py +270 -0
  88. tutorflow_content/generated/api/content_modules/content_resource_module_controller_get.py +267 -0
  89. tutorflow_content/generated/api/content_modules/content_resource_module_controller_list.py +364 -0
  90. tutorflow_content/generated/api/content_modules/content_resource_module_controller_update.py +287 -0
  91. tutorflow_content/generated/api/content_organizations/__init__.py +1 -0
  92. tutorflow_content/generated/api/content_organizations/content_integration_organization_controller_list_organizations.py +199 -0
  93. tutorflow_content/generated/api/content_simulations/__init__.py +1 -0
  94. tutorflow_content/generated/api/content_simulations/content_resource_simulation_controller_build_simulation.py +325 -0
  95. tutorflow_content/generated/api/content_simulations/content_resource_simulation_controller_create.py +278 -0
  96. tutorflow_content/generated/api/content_simulations/content_resource_simulation_controller_delete.py +274 -0
  97. tutorflow_content/generated/api/content_simulations/content_resource_simulation_controller_generate_brief.py +338 -0
  98. tutorflow_content/generated/api/content_simulations/content_resource_simulation_controller_get.py +267 -0
  99. tutorflow_content/generated/api/content_simulations/content_resource_simulation_controller_get_run_status.py +243 -0
  100. tutorflow_content/generated/api/content_simulations/content_resource_simulation_controller_list.py +384 -0
  101. tutorflow_content/generated/api/content_simulations/content_resource_simulation_controller_restore_version.py +287 -0
  102. tutorflow_content/generated/api/content_simulations/content_resource_simulation_controller_revise_simulation.py +342 -0
  103. tutorflow_content/generated/api/content_simulations/content_resource_simulation_controller_update.py +287 -0
  104. tutorflow_content/generated/api/content_slides/__init__.py +1 -0
  105. tutorflow_content/generated/api/content_slides/content_resource_slide_controller_create.py +278 -0
  106. tutorflow_content/generated/api/content_slides/content_resource_slide_controller_delete.py +270 -0
  107. tutorflow_content/generated/api/content_slides/content_resource_slide_controller_get.py +267 -0
  108. tutorflow_content/generated/api/content_slides/content_resource_slide_controller_list.py +364 -0
  109. tutorflow_content/generated/api/content_slides/content_resource_slide_controller_update.py +287 -0
  110. tutorflow_content/generated/api/content_tests/__init__.py +1 -0
  111. tutorflow_content/generated/api/content_tests/content_resource_test_controller_create.py +278 -0
  112. tutorflow_content/generated/api/content_tests/content_resource_test_controller_delete.py +270 -0
  113. tutorflow_content/generated/api/content_tests/content_resource_test_controller_get.py +287 -0
  114. tutorflow_content/generated/api/content_tests/content_resource_test_controller_list.py +379 -0
  115. tutorflow_content/generated/api/content_tests/content_resource_test_controller_update.py +287 -0
  116. tutorflow_content/generated/api/content_videos/__init__.py +1 -0
  117. tutorflow_content/generated/api/content_videos/content_resource_video_controller_add_scene.py +291 -0
  118. tutorflow_content/generated/api/content_videos/content_resource_video_controller_create.py +286 -0
  119. tutorflow_content/generated/api/content_videos/content_resource_video_controller_delete.py +270 -0
  120. tutorflow_content/generated/api/content_videos/content_resource_video_controller_delete_scene.py +283 -0
  121. tutorflow_content/generated/api/content_videos/content_resource_video_controller_get.py +267 -0
  122. tutorflow_content/generated/api/content_videos/content_resource_video_controller_list.py +364 -0
  123. tutorflow_content/generated/api/content_videos/content_resource_video_controller_reorder_scenes.py +287 -0
  124. tutorflow_content/generated/api/content_videos/content_resource_video_controller_update.py +287 -0
  125. tutorflow_content/generated/api/content_videos/content_resource_video_controller_update_scene.py +300 -0
  126. tutorflow_content/generated/api/content_videos/content_resource_video_narration_controller_narrate_missing.py +289 -0
  127. tutorflow_content/generated/api/content_videos/content_resource_video_narration_controller_narrate_scene.py +294 -0
  128. tutorflow_content/generated/api/content_videos/content_resource_video_render_controller_cancel.py +250 -0
  129. tutorflow_content/generated/api/content_videos/content_resource_video_render_controller_get_status.py +243 -0
  130. tutorflow_content/generated/api/content_videos/content_resource_video_render_controller_trigger.py +328 -0
  131. tutorflow_content/generated/api/content_webhooks/__init__.py +1 -0
  132. tutorflow_content/generated/api/content_webhooks/content_integration_webhook_controller_create_webhook.py +243 -0
  133. tutorflow_content/generated/api/content_webhooks/content_integration_webhook_controller_delete_webhook.py +236 -0
  134. tutorflow_content/generated/api/content_webhooks/content_integration_webhook_controller_get_webhook.py +236 -0
  135. tutorflow_content/generated/api/content_webhooks/content_integration_webhook_controller_list_deliveries.py +317 -0
  136. tutorflow_content/generated/api/content_webhooks/content_integration_webhook_controller_list_webhooks.py +228 -0
  137. tutorflow_content/generated/api/content_webhooks/content_integration_webhook_controller_redeliver.py +249 -0
  138. tutorflow_content/generated/api/content_webhooks/content_integration_webhook_controller_rotate_secret.py +280 -0
  139. tutorflow_content/generated/api/content_webhooks/content_integration_webhook_controller_send_test_event.py +236 -0
  140. tutorflow_content/generated/api/content_webhooks/content_integration_webhook_controller_update_webhook.py +284 -0
  141. tutorflow_content/generated/api/content_webhooks/content_webhook_key_controller_create.py +236 -0
  142. tutorflow_content/generated/api/content_webhooks/content_webhook_key_controller_delete.py +230 -0
  143. tutorflow_content/generated/api/content_webhooks/content_webhook_key_controller_get.py +230 -0
  144. tutorflow_content/generated/api/content_webhooks/content_webhook_key_controller_list.py +206 -0
  145. tutorflow_content/generated/api/content_webhooks/content_webhook_key_controller_list_deliveries.py +311 -0
  146. tutorflow_content/generated/api/content_webhooks/content_webhook_key_controller_redeliver.py +243 -0
  147. tutorflow_content/generated/api/content_webhooks/content_webhook_key_controller_rotate_secret.py +270 -0
  148. tutorflow_content/generated/api/content_webhooks/content_webhook_key_controller_send_test_event.py +230 -0
  149. tutorflow_content/generated/api/content_webhooks/content_webhook_key_controller_update.py +278 -0
  150. tutorflow_content/generated/api/v_1_contentclassroomsclassroom_idintegrationsexports/__init__.py +1 -0
  151. tutorflow_content/generated/api/v_1_contentclassroomsclassroom_idintegrationsexports/content_integration_export_controller_export_standalone_lesson.py +243 -0
  152. tutorflow_content/generated/client.py +271 -0
  153. tutorflow_content/generated/errors.py +14 -0
  154. tutorflow_content/generated/models/__init__.py +693 -0
  155. tutorflow_content/generated/models/add_scene_dto.py +104 -0
  156. tutorflow_content/generated/models/chat_course_quiz_dto.py +257 -0
  157. tutorflow_content/generated/models/classroom_test_level_type.py +9 -0
  158. tutorflow_content/generated/models/classroom_test_visibility_type.py +9 -0
  159. tutorflow_content/generated/models/content_api_audit_log_controller_list_source.py +8 -0
  160. tutorflow_content/generated/models/content_api_error.py +85 -0
  161. tutorflow_content/generated/models/content_api_error_error.py +221 -0
  162. tutorflow_content/generated/models/content_api_error_error_details_item.py +87 -0
  163. tutorflow_content/generated/models/content_api_key_created_res_dto.py +277 -0
  164. tutorflow_content/generated/models/content_api_key_created_res_dto_mode.py +8 -0
  165. tutorflow_content/generated/models/content_api_key_expiring_event.py +135 -0
  166. tutorflow_content/generated/models/content_api_key_filter_label.py +118 -0
  167. tutorflow_content/generated/models/content_api_key_filter_label_mode.py +8 -0
  168. tutorflow_content/generated/models/content_api_key_label_type_0.py +109 -0
  169. tutorflow_content/generated/models/content_api_key_label_type_0_mode.py +8 -0
  170. tutorflow_content/generated/models/content_api_scope.py +12 -0
  171. tutorflow_content/generated/models/content_asset_upload.py +169 -0
  172. tutorflow_content/generated/models/content_asset_upload_purpose.py +13 -0
  173. tutorflow_content/generated/models/content_asset_upload_status.py +11 -0
  174. tutorflow_content/generated/models/content_asset_upload_ticket.py +186 -0
  175. tutorflow_content/generated/models/content_asset_upload_ticket_headers.py +85 -0
  176. tutorflow_content/generated/models/content_asset_upload_ticket_method.py +7 -0
  177. tutorflow_content/generated/models/content_asset_upload_ticket_purpose.py +13 -0
  178. tutorflow_content/generated/models/content_asset_upload_ticket_status.py +11 -0
  179. tutorflow_content/generated/models/content_audit_log_admin_item.py +330 -0
  180. tutorflow_content/generated/models/content_audit_log_admin_page.py +108 -0
  181. tutorflow_content/generated/models/content_audit_log_item.py +307 -0
  182. tutorflow_content/generated/models/content_audit_log_page.py +108 -0
  183. tutorflow_content/generated/models/content_build_history_entry.py +124 -0
  184. tutorflow_content/generated/models/content_chapter.py +148 -0
  185. tutorflow_content/generated/models/content_classroom_res_dto.py +113 -0
  186. tutorflow_content/generated/models/content_concept.py +123 -0
  187. tutorflow_content/generated/models/content_concept_list.py +94 -0
  188. tutorflow_content/generated/models/content_course.py +343 -0
  189. tutorflow_content/generated/models/content_course_chapter.py +146 -0
  190. tutorflow_content/generated/models/content_course_deleted.py +121 -0
  191. tutorflow_content/generated/models/content_course_lesson.py +337 -0
  192. tutorflow_content/generated/models/content_course_lesson_stats.py +84 -0
  193. tutorflow_content/generated/models/content_course_list.py +137 -0
  194. tutorflow_content/generated/models/content_course_progress.py +208 -0
  195. tutorflow_content/generated/models/content_course_stats.py +221 -0
  196. tutorflow_content/generated/models/content_course_stats_daily_learning_time_item.py +84 -0
  197. tutorflow_content/generated/models/content_course_stats_most_behind_learner_type_0.py +108 -0
  198. tutorflow_content/generated/models/content_course_stats_top_learners_item.py +119 -0
  199. tutorflow_content/generated/models/content_credit_history_item.py +227 -0
  200. tutorflow_content/generated/models/content_credit_history_item_kind.py +9 -0
  201. tutorflow_content/generated/models/content_credit_history_page.py +108 -0
  202. tutorflow_content/generated/models/content_curriculum.py +118 -0
  203. tutorflow_content/generated/models/content_cursor_page_meta.py +100 -0
  204. tutorflow_content/generated/models/content_deleted.py +101 -0
  205. tutorflow_content/generated/models/content_deprecated_success.py +80 -0
  206. tutorflow_content/generated/models/content_enrollment.py +177 -0
  207. tutorflow_content/generated/models/content_enrollment_change.py +94 -0
  208. tutorflow_content/generated/models/content_enrollment_page.py +108 -0
  209. tutorflow_content/generated/models/content_evaluation.py +584 -0
  210. tutorflow_content/generated/models/content_evaluation_controller_create_files_body.py +413 -0
  211. tutorflow_content/generated/models/content_evaluation_controller_download_file_field.py +8 -0
  212. tutorflow_content/generated/models/content_evaluation_controller_list_evaluation_type.py +9 -0
  213. tutorflow_content/generated/models/content_evaluation_controller_list_status.py +10 -0
  214. tutorflow_content/generated/models/content_evaluation_create.py +254 -0
  215. tutorflow_content/generated/models/content_evaluation_create_evaluation_type.py +9 -0
  216. tutorflow_content/generated/models/content_evaluation_create_feedback_options.py +105 -0
  217. tutorflow_content/generated/models/content_evaluation_create_mode.py +8 -0
  218. tutorflow_content/generated/models/content_evaluation_create_rubric.py +95 -0
  219. tutorflow_content/generated/models/content_evaluation_create_rubric_criteria_item.py +92 -0
  220. tutorflow_content/generated/models/content_evaluation_create_submitter.py +87 -0
  221. tutorflow_content/generated/models/content_evaluation_event.py +241 -0
  222. tutorflow_content/generated/models/content_evaluation_event_status.py +8 -0
  223. tutorflow_content/generated/models/content_evaluation_file.py +100 -0
  224. tutorflow_content/generated/models/content_evaluation_learner_type_0.py +92 -0
  225. tutorflow_content/generated/models/content_evaluation_mode.py +8 -0
  226. tutorflow_content/generated/models/content_evaluation_page.py +108 -0
  227. tutorflow_content/generated/models/content_evaluation_rubric_breakdown_type_0_item.py +105 -0
  228. tutorflow_content/generated/models/content_evaluation_status.py +10 -0
  229. tutorflow_content/generated/models/content_game.py +372 -0
  230. tutorflow_content/generated/models/content_game_brief_type_0.py +66 -0
  231. tutorflow_content/generated/models/content_game_list.py +137 -0
  232. tutorflow_content/generated/models/content_game_metadata_type_0.py +64 -0
  233. tutorflow_content/generated/models/content_generate_course_request.py +146 -0
  234. tutorflow_content/generated/models/content_generate_course_request_level.py +9 -0
  235. tutorflow_content/generated/models/content_generate_module_request.py +120 -0
  236. tutorflow_content/generated/models/content_generate_module_request_type.py +19 -0
  237. tutorflow_content/generated/models/content_generate_slides_request.py +150 -0
  238. tutorflow_content/generated/models/content_generate_slides_request_text_length.py +8 -0
  239. tutorflow_content/generated/models/content_generate_slides_request_theme_id.py +15 -0
  240. tutorflow_content/generated/models/content_generate_test_request.py +196 -0
  241. tutorflow_content/generated/models/content_generate_test_request_item_types_item.py +11 -0
  242. tutorflow_content/generated/models/content_generate_test_request_level.py +9 -0
  243. tutorflow_content/generated/models/content_generate_test_request_passing_value_type.py +8 -0
  244. tutorflow_content/generated/models/content_generation_accepted.py +151 -0
  245. tutorflow_content/generated/models/content_generation_accepted_kind.py +8 -0
  246. tutorflow_content/generated/models/content_generation_accepted_phase.py +9 -0
  247. tutorflow_content/generated/models/content_generation_controller_list_runs_kind.py +10 -0
  248. tutorflow_content/generated/models/content_generation_controller_list_runs_status.py +10 -0
  249. tutorflow_content/generated/models/content_generation_event.py +213 -0
  250. tutorflow_content/generated/models/content_generation_event_phase.py +9 -0
  251. tutorflow_content/generated/models/content_generation_event_resource_type.py +8 -0
  252. tutorflow_content/generated/models/content_generation_event_status.py +8 -0
  253. tutorflow_content/generated/models/content_generation_run.py +296 -0
  254. tutorflow_content/generated/models/content_generation_run_accepted.py +121 -0
  255. tutorflow_content/generated/models/content_generation_run_accepted_kind.py +10 -0
  256. tutorflow_content/generated/models/content_generation_run_accepted_status.py +7 -0
  257. tutorflow_content/generated/models/content_generation_run_event.py +241 -0
  258. tutorflow_content/generated/models/content_generation_run_event_resource_type.py +10 -0
  259. tutorflow_content/generated/models/content_generation_run_event_status.py +8 -0
  260. tutorflow_content/generated/models/content_generation_run_kind.py +10 -0
  261. tutorflow_content/generated/models/content_generation_run_page.py +108 -0
  262. tutorflow_content/generated/models/content_generation_run_progress.py +93 -0
  263. tutorflow_content/generated/models/content_generation_run_state.py +10 -0
  264. tutorflow_content/generated/models/content_generation_run_status.py +135 -0
  265. tutorflow_content/generated/models/content_generation_run_status_active_type_0.py +116 -0
  266. tutorflow_content/generated/models/content_generation_run_status_active_type_0_phase.py +9 -0
  267. tutorflow_content/generated/models/content_generation_run_status_last_type_0.py +148 -0
  268. tutorflow_content/generated/models/content_generation_run_status_last_type_0_phase.py +9 -0
  269. tutorflow_content/generated/models/content_generation_run_status_last_type_0_status.py +8 -0
  270. tutorflow_content/generated/models/content_integration_api_key_controller_delete_api_key_response_200.py +88 -0
  271. tutorflow_content/generated/models/content_integration_api_key_dto.py +377 -0
  272. tutorflow_content/generated/models/content_integration_api_key_dto_issuer_status.py +9 -0
  273. tutorflow_content/generated/models/content_integration_api_key_dto_mode.py +8 -0
  274. tutorflow_content/generated/models/content_integration_credit_balance_res_dto.py +117 -0
  275. tutorflow_content/generated/models/content_integration_credit_controller_get_history_source.py +8 -0
  276. tutorflow_content/generated/models/content_integration_credit_controller_get_history_type.py +54 -0
  277. tutorflow_content/generated/models/content_integration_job_res_dto.py +334 -0
  278. tutorflow_content/generated/models/content_integration_job_res_dto_error_type_0.py +64 -0
  279. tutorflow_content/generated/models/content_integration_organization_res_dto.py +108 -0
  280. tutorflow_content/generated/models/content_integration_organization_res_dto_role.py +9 -0
  281. tutorflow_content/generated/models/content_integration_output_res_dto.py +302 -0
  282. tutorflow_content/generated/models/content_integration_output_res_dto_error_type_0.py +64 -0
  283. tutorflow_content/generated/models/content_integration_output_res_dto_manifest_type_0.py +64 -0
  284. tutorflow_content/generated/models/content_integration_output_type.py +9 -0
  285. tutorflow_content/generated/models/content_integration_result_res_dto.py +122 -0
  286. tutorflow_content/generated/models/content_integration_result_res_dto_manifest.py +64 -0
  287. tutorflow_content/generated/models/content_integration_source_type.py +8 -0
  288. tutorflow_content/generated/models/content_integration_webhook_delivery_status.py +10 -0
  289. tutorflow_content/generated/models/content_integration_webhook_event_type.py +35 -0
  290. tutorflow_content/generated/models/content_integration_webhook_status.py +8 -0
  291. tutorflow_content/generated/models/content_job_event.py +178 -0
  292. tutorflow_content/generated/models/content_learner.py +132 -0
  293. tutorflow_content/generated/models/content_learner_controller_list_status.py +9 -0
  294. tutorflow_content/generated/models/content_learner_course_completed_event.py +141 -0
  295. tutorflow_content/generated/models/content_learner_enrolled_event.py +129 -0
  296. tutorflow_content/generated/models/content_learner_invitation_result.py +143 -0
  297. tutorflow_content/generated/models/content_learner_invitation_result_invitation_type_1.py +104 -0
  298. tutorflow_content/generated/models/content_learner_invitation_result_status.py +8 -0
  299. tutorflow_content/generated/models/content_learner_mastery.py +131 -0
  300. tutorflow_content/generated/models/content_learner_mastery_concepts_item.py +145 -0
  301. tutorflow_content/generated/models/content_learner_mastery_learner.py +92 -0
  302. tutorflow_content/generated/models/content_learner_page.py +108 -0
  303. tutorflow_content/generated/models/content_learner_progress.py +106 -0
  304. tutorflow_content/generated/models/content_learner_removed.py +91 -0
  305. tutorflow_content/generated/models/content_learner_status.py +9 -0
  306. tutorflow_content/generated/models/content_learner_test_submitted_event.py +152 -0
  307. tutorflow_content/generated/models/content_lesson_detail.py +265 -0
  308. tutorflow_content/generated/models/content_lesson_detail_submission.py +70 -0
  309. tutorflow_content/generated/models/content_lesson_progress.py +154 -0
  310. tutorflow_content/generated/models/content_lesson_summary.py +205 -0
  311. tutorflow_content/generated/models/content_module.py +426 -0
  312. tutorflow_content/generated/models/content_module_copy_result.py +99 -0
  313. tutorflow_content/generated/models/content_module_list.py +137 -0
  314. tutorflow_content/generated/models/content_module_metadata_type_0.py +64 -0
  315. tutorflow_content/generated/models/content_module_quiz.py +237 -0
  316. tutorflow_content/generated/models/content_organization_activity_controller_audit_log_source.py +8 -0
  317. tutorflow_content/generated/models/content_organization_activity_controller_credit_history_source.py +8 -0
  318. tutorflow_content/generated/models/content_organization_activity_controller_credit_history_type.py +54 -0
  319. tutorflow_content/generated/models/content_page_meta.py +116 -0
  320. tutorflow_content/generated/models/content_resource_course_controller_get_days.py +8 -0
  321. tutorflow_content/generated/models/content_resource_course_controller_list_field.py +10 -0
  322. tutorflow_content/generated/models/content_resource_event.py +328 -0
  323. tutorflow_content/generated/models/content_resource_event_resource_type.py +13 -0
  324. tutorflow_content/generated/models/content_resource_event_source.py +8 -0
  325. tutorflow_content/generated/models/content_resource_event_subresource.py +107 -0
  326. tutorflow_content/generated/models/content_resource_event_subresource_op.py +9 -0
  327. tutorflow_content/generated/models/content_resource_event_subresource_type.py +11 -0
  328. tutorflow_content/generated/models/content_resource_event_subresources_item.py +106 -0
  329. tutorflow_content/generated/models/content_resource_event_subresources_item_op.py +9 -0
  330. tutorflow_content/generated/models/content_resource_event_subresources_item_type.py +11 -0
  331. tutorflow_content/generated/models/content_resource_game_controller_list_field.py +9 -0
  332. tutorflow_content/generated/models/content_resource_module_controller_list_field.py +9 -0
  333. tutorflow_content/generated/models/content_resource_module_controller_update_response_200.py +437 -0
  334. tutorflow_content/generated/models/content_resource_simulation_controller_list_field.py +10 -0
  335. tutorflow_content/generated/models/content_resource_slide_controller_list_field.py +9 -0
  336. tutorflow_content/generated/models/content_resource_slide_controller_update_response_200.py +311 -0
  337. tutorflow_content/generated/models/content_resource_test_controller_list_field.py +11 -0
  338. tutorflow_content/generated/models/content_resource_test_controller_update_response_200.py +441 -0
  339. tutorflow_content/generated/models/content_resource_video_controller_list_field.py +9 -0
  340. tutorflow_content/generated/models/content_resource_video_narration_controller_narrate_missing_response_200.py +110 -0
  341. tutorflow_content/generated/models/content_resource_video_narration_controller_narrate_scene_response_200.py +110 -0
  342. tutorflow_content/generated/models/content_resource_video_render_controller_trigger_body.py +62 -0
  343. tutorflow_content/generated/models/content_scene_subtitle.py +92 -0
  344. tutorflow_content/generated/models/content_simulation.py +390 -0
  345. tutorflow_content/generated/models/content_simulation_brief_type_0.py +66 -0
  346. tutorflow_content/generated/models/content_simulation_list.py +137 -0
  347. tutorflow_content/generated/models/content_simulation_metadata_type_0.py +64 -0
  348. tutorflow_content/generated/models/content_slide.py +300 -0
  349. tutorflow_content/generated/models/content_slide_list.py +137 -0
  350. tutorflow_content/generated/models/content_slide_metadata_type_0.py +64 -0
  351. tutorflow_content/generated/models/content_success.py +79 -0
  352. tutorflow_content/generated/models/content_test.py +429 -0
  353. tutorflow_content/generated/models/content_test_item.py +280 -0
  354. tutorflow_content/generated/models/content_test_item_stats.py +92 -0
  355. tutorflow_content/generated/models/content_test_list.py +137 -0
  356. tutorflow_content/generated/models/content_test_metadata_type_0.py +64 -0
  357. tutorflow_content/generated/models/content_test_result.py +250 -0
  358. tutorflow_content/generated/models/content_test_result_controller_get_include.py +7 -0
  359. tutorflow_content/generated/models/content_test_result_detail.py +274 -0
  360. tutorflow_content/generated/models/content_test_result_item.py +116 -0
  361. tutorflow_content/generated/models/content_test_result_item_status.py +10 -0
  362. tutorflow_content/generated/models/content_test_result_page.py +108 -0
  363. tutorflow_content/generated/models/content_test_result_status.py +8 -0
  364. tutorflow_content/generated/models/content_test_result_taker_type_0.py +93 -0
  365. tutorflow_content/generated/models/content_unenrolled.py +102 -0
  366. tutorflow_content/generated/models/content_video.py +431 -0
  367. tutorflow_content/generated/models/content_video_list.py +116 -0
  368. tutorflow_content/generated/models/content_video_metadata_type_0.py +64 -0
  369. tutorflow_content/generated/models/content_video_render_accepted.py +145 -0
  370. tutorflow_content/generated/models/content_video_render_cancelled.py +79 -0
  371. tutorflow_content/generated/models/content_video_render_event.py +195 -0
  372. tutorflow_content/generated/models/content_video_render_event_render_status.py +8 -0
  373. tutorflow_content/generated/models/content_video_render_state.py +10 -0
  374. tutorflow_content/generated/models/content_video_render_status.py +198 -0
  375. tutorflow_content/generated/models/content_video_scene.py +623 -0
  376. tutorflow_content/generated/models/content_video_scene_visual_metadata_type_0.py +64 -0
  377. tutorflow_content/generated/models/content_visual_adjustments.py +181 -0
  378. tutorflow_content/generated/models/content_visual_overlay.py +311 -0
  379. tutorflow_content/generated/models/content_visual_overlay_animation.py +105 -0
  380. tutorflow_content/generated/models/content_visual_overlay_frame_animation.py +87 -0
  381. tutorflow_content/generated/models/content_visual_overlay_frames_item.py +87 -0
  382. tutorflow_content/generated/models/content_visual_overlay_metadata_type_0.py +64 -0
  383. tutorflow_content/generated/models/content_webhook_created_res_dto.py +344 -0
  384. tutorflow_content/generated/models/content_webhook_created_res_dto_disabled_reason_type_1.py +8 -0
  385. tutorflow_content/generated/models/content_webhook_created_res_dto_disabled_reason_type_2_type_1.py +8 -0
  386. tutorflow_content/generated/models/content_webhook_created_res_dto_disabled_reason_type_3_type_1.py +8 -0
  387. tutorflow_content/generated/models/content_webhook_created_res_dto_mode.py +8 -0
  388. tutorflow_content/generated/models/content_webhook_deleted.py +91 -0
  389. tutorflow_content/generated/models/content_webhook_delivery_res_dto.py +325 -0
  390. tutorflow_content/generated/models/content_webhook_delivery_res_dto_payload_type_0.py +66 -0
  391. tutorflow_content/generated/models/content_webhook_event_envelope.py +102 -0
  392. tutorflow_content/generated/models/content_webhook_ping_event.py +115 -0
  393. tutorflow_content/generated/models/content_webhook_res_dto.py +336 -0
  394. tutorflow_content/generated/models/content_webhook_res_dto_disabled_reason_type_1.py +8 -0
  395. tutorflow_content/generated/models/content_webhook_res_dto_disabled_reason_type_2_type_1.py +8 -0
  396. tutorflow_content/generated/models/content_webhook_res_dto_disabled_reason_type_3_type_1.py +8 -0
  397. tutorflow_content/generated/models/content_webhook_res_dto_mode.py +8 -0
  398. tutorflow_content/generated/models/content_webhook_updated_res_dto.py +351 -0
  399. tutorflow_content/generated/models/content_webhook_updated_res_dto_disabled_reason_type_1.py +8 -0
  400. tutorflow_content/generated/models/content_webhook_updated_res_dto_disabled_reason_type_2_type_1.py +8 -0
  401. tutorflow_content/generated/models/content_webhook_updated_res_dto_disabled_reason_type_3_type_1.py +8 -0
  402. tutorflow_content/generated/models/content_webhook_updated_res_dto_mode.py +8 -0
  403. tutorflow_content/generated/models/copy_standalone_lesson_to_course_req_dto.py +118 -0
  404. tutorflow_content/generated/models/course_celebration_trigger.py +9 -0
  405. tutorflow_content/generated/models/course_content_type.py +8 -0
  406. tutorflow_content/generated/models/create_classroom_course_req_dto.py +176 -0
  407. tutorflow_content/generated/models/create_classroom_game_dto.py +150 -0
  408. tutorflow_content/generated/models/create_classroom_game_dto_metadata_type_0.py +67 -0
  409. tutorflow_content/generated/models/create_classroom_simulation_dto.py +150 -0
  410. tutorflow_content/generated/models/create_classroom_simulation_dto_metadata_type_0.py +67 -0
  411. tutorflow_content/generated/models/create_classroom_slide_dto.py +190 -0
  412. tutorflow_content/generated/models/create_classroom_slide_dto_metadata_type_0.py +64 -0
  413. tutorflow_content/generated/models/create_classroom_test_dto.py +162 -0
  414. tutorflow_content/generated/models/create_classroom_video_dto.py +108 -0
  415. tutorflow_content/generated/models/create_content_api_key_req_dto.py +207 -0
  416. tutorflow_content/generated/models/create_content_api_key_req_dto_mode.py +8 -0
  417. tutorflow_content/generated/models/create_content_asset_upload_req_dto.py +121 -0
  418. tutorflow_content/generated/models/create_content_asset_upload_req_dto_purpose.py +13 -0
  419. tutorflow_content/generated/models/create_content_chapter_req_dto.py +86 -0
  420. tutorflow_content/generated/models/create_content_expansion_req_dto.py +155 -0
  421. tutorflow_content/generated/models/create_content_expansion_req_dto_payload.py +66 -0
  422. tutorflow_content/generated/models/create_content_lesson_req_dto.py +143 -0
  423. tutorflow_content/generated/models/create_content_lesson_req_dto_submission.py +70 -0
  424. tutorflow_content/generated/models/create_content_module_req_dto.py +281 -0
  425. tutorflow_content/generated/models/create_content_module_req_dto_metadata_type_0.py +64 -0
  426. tutorflow_content/generated/models/create_content_module_req_dto_type.py +19 -0
  427. tutorflow_content/generated/models/create_content_webhook_req_dto.py +132 -0
  428. tutorflow_content/generated/models/create_content_webhook_req_dto_mode.py +8 -0
  429. tutorflow_content/generated/models/create_update_classroom_test_dto.py +449 -0
  430. tutorflow_content/generated/models/create_update_classroom_test_dto_metadata_type_0.py +66 -0
  431. tutorflow_content/generated/models/create_update_classroom_test_item_dto.py +248 -0
  432. tutorflow_content/generated/models/enroll_content_learners_request.py +91 -0
  433. tutorflow_content/generated/models/export_classroom_content_req_dto.py +90 -0
  434. tutorflow_content/generated/models/game_visibility.py +8 -0
  435. tutorflow_content/generated/models/gamesortfields.py +9 -0
  436. tutorflow_content/generated/models/generate_game_brief_dto.py +78 -0
  437. tutorflow_content/generated/models/generate_simulation_brief_dto.py +78 -0
  438. tutorflow_content/generated/models/invite_content_learner_request.py +148 -0
  439. tutorflow_content/generated/models/order.py +8 -0
  440. tutorflow_content/generated/models/passing_value_type.py +8 -0
  441. tutorflow_content/generated/models/problem_type.py +11 -0
  442. tutorflow_content/generated/models/quiz_type.py +10 -0
  443. tutorflow_content/generated/models/remotion_template_type.py +13 -0
  444. tutorflow_content/generated/models/reorder_content_chapters_req_dto.py +91 -0
  445. tutorflow_content/generated/models/reorder_content_lessons_req_dto.py +91 -0
  446. tutorflow_content/generated/models/reorder_scenes_dto.py +91 -0
  447. tutorflow_content/generated/models/revise_game_dto.py +76 -0
  448. tutorflow_content/generated/models/revise_simulation_dto.py +76 -0
  449. tutorflow_content/generated/models/rotate_content_api_key_req_dto.py +79 -0
  450. tutorflow_content/generated/models/rotate_content_webhook_secret_req_dto.py +88 -0
  451. tutorflow_content/generated/models/simulation_visibility.py +8 -0
  452. tutorflow_content/generated/models/simulationsortfields.py +10 -0
  453. tutorflow_content/generated/models/simulationsubjects.py +13 -0
  454. tutorflow_content/generated/models/slide_visibility.py +8 -0
  455. tutorflow_content/generated/models/test_layout_type.py +8 -0
  456. tutorflow_content/generated/models/test_period_type.py +8 -0
  457. tutorflow_content/generated/models/update_classroom_course_settings_dto.py +114 -0
  458. tutorflow_content/generated/models/update_classroom_course_settings_dto_ai_tutor_defaults.py +64 -0
  459. tutorflow_content/generated/models/update_classroom_game_dto.py +205 -0
  460. tutorflow_content/generated/models/update_classroom_game_dto_brief_type_0.py +64 -0
  461. tutorflow_content/generated/models/update_classroom_game_dto_metadata_type_0.py +67 -0
  462. tutorflow_content/generated/models/update_classroom_simulation_dto.py +196 -0
  463. tutorflow_content/generated/models/update_classroom_simulation_dto_brief_type_0.py +64 -0
  464. tutorflow_content/generated/models/update_classroom_simulation_dto_metadata_type_0.py +67 -0
  465. tutorflow_content/generated/models/update_classroom_slide_dto.py +187 -0
  466. tutorflow_content/generated/models/update_classroom_slide_dto_metadata_type_0.py +66 -0
  467. tutorflow_content/generated/models/update_classroom_video_dto.py +235 -0
  468. tutorflow_content/generated/models/update_classroom_video_dto_metadata_type_0.py +66 -0
  469. tutorflow_content/generated/models/update_content_api_key_req_dto.py +217 -0
  470. tutorflow_content/generated/models/update_content_chapter_req_dto.py +87 -0
  471. tutorflow_content/generated/models/update_content_course_req_dto.py +186 -0
  472. tutorflow_content/generated/models/update_content_course_req_dto_visibility.py +11 -0
  473. tutorflow_content/generated/models/update_content_lesson_req_dto.py +196 -0
  474. tutorflow_content/generated/models/update_content_lesson_req_dto_submission.py +70 -0
  475. tutorflow_content/generated/models/update_content_webhook_req_dto.py +150 -0
  476. tutorflow_content/generated/models/update_standalone_lesson_dto.py +274 -0
  477. tutorflow_content/generated/models/update_standalone_lesson_dto_metadata_type_0.py +64 -0
  478. tutorflow_content/generated/models/update_standalone_lesson_dto_type.py +19 -0
  479. tutorflow_content/generated/models/update_video_scene_dto.py +758 -0
  480. tutorflow_content/generated/models/update_video_scene_dto_transition_out_type_1.py +12 -0
  481. tutorflow_content/generated/models/update_video_scene_dto_transition_out_type_2_type_1.py +12 -0
  482. tutorflow_content/generated/models/update_video_scene_dto_transition_out_type_3_type_1.py +12 -0
  483. tutorflow_content/generated/models/update_video_scene_dto_video_effect_type_1.py +14 -0
  484. tutorflow_content/generated/models/update_video_scene_dto_video_effect_type_2_type_1.py +14 -0
  485. tutorflow_content/generated/models/update_video_scene_dto_video_effect_type_3_type_1.py +14 -0
  486. tutorflow_content/generated/models/update_video_scene_dto_visual_effect_type_1.py +14 -0
  487. tutorflow_content/generated/models/update_video_scene_dto_visual_effect_type_2_type_1.py +14 -0
  488. tutorflow_content/generated/models/update_video_scene_dto_visual_effect_type_3_type_1.py +14 -0
  489. tutorflow_content/generated/models/update_video_scene_dto_visual_fit.py +8 -0
  490. tutorflow_content/generated/models/update_video_scene_dto_visual_metadata_type_0.py +64 -0
  491. tutorflow_content/generated/models/update_video_scene_dto_visual_source_type_1.py +10 -0
  492. tutorflow_content/generated/models/update_video_scene_dto_visual_source_type_2_type_1.py +10 -0
  493. tutorflow_content/generated/models/update_video_scene_dto_visual_source_type_3_type_1.py +10 -0
  494. tutorflow_content/generated/models/update_video_scene_dto_visual_type_type_1.py +9 -0
  495. tutorflow_content/generated/models/update_video_scene_dto_visual_type_type_2_type_1.py +9 -0
  496. tutorflow_content/generated/models/update_video_scene_dto_visual_type_type_3_type_1.py +9 -0
  497. tutorflow_content/generated/models/video_clip_source.py +8 -0
  498. tutorflow_content/generated/models/video_visibility.py +9 -0
  499. tutorflow_content/generated/types.py +53 -0
  500. tutorflow_content/pagination.py +48 -0
  501. tutorflow_content/retry.py +129 -0
  502. tutorflow_content/runs.py +140 -0
  503. tutorflow_content/webhooks.py +97 -0
  504. tutorflow_content-0.1.0.dist-info/METADATA +151 -0
  505. tutorflow_content-0.1.0.dist-info/RECORD +507 -0
  506. tutorflow_content-0.1.0.dist-info/WHEEL +5 -0
  507. tutorflow_content-0.1.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,42 @@
1
+ """Python client for the TutorFlow Content API.
2
+
3
+ Generated routes and models live in `tutorflow_content.generated`
4
+ (openapi-python-client); this package adds the client factory, retries,
5
+ pagination, run polling, typed errors and webhook verification.
6
+ """
7
+
8
+ from .client import DEFAULT_BASE_URL, create_client, is_test_key, new_idempotency_key
9
+ from .errors import ContentApiError, ContentPreconditionFailedError, error_from_response, unwrap
10
+ from .pagination import paginate
11
+ from .retry import AsyncRetryTransport, RetryConfig, RetryTransport, is_safe_to_repeat
12
+ from .runs import ContentWaitError, wait_for_build, wait_for_render, wait_for_run
13
+ from .webhooks import (
14
+ DEFAULT_TOLERANCE_SECONDS,
15
+ SIGNATURE_HEADER,
16
+ WebhookVerificationError,
17
+ verify_webhook,
18
+ )
19
+
20
+ __all__ = [
21
+ "DEFAULT_BASE_URL",
22
+ "DEFAULT_TOLERANCE_SECONDS",
23
+ "SIGNATURE_HEADER",
24
+ "AsyncRetryTransport",
25
+ "ContentApiError",
26
+ "ContentPreconditionFailedError",
27
+ "ContentWaitError",
28
+ "RetryConfig",
29
+ "RetryTransport",
30
+ "WebhookVerificationError",
31
+ "create_client",
32
+ "error_from_response",
33
+ "is_safe_to_repeat",
34
+ "is_test_key",
35
+ "new_idempotency_key",
36
+ "paginate",
37
+ "unwrap",
38
+ "verify_webhook",
39
+ "wait_for_build",
40
+ "wait_for_render",
41
+ "wait_for_run",
42
+ ]
@@ -0,0 +1,71 @@
1
+ """Builds the generated AuthenticatedClient with retries and a Content API key."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import uuid
6
+ from collections.abc import Mapping
7
+
8
+ import httpx
9
+
10
+ from .generated import AuthenticatedClient
11
+ from .retry import AsyncRetryTransport, RetryConfig, RetryTransport
12
+
13
+ DEFAULT_BASE_URL = "https://api.tutorflow.io"
14
+ KEY_PREFIX = "tf_content_"
15
+ TEST_KEY_PREFIX = "tf_content_test_"
16
+ DEFAULT_TIMEOUT_SECONDS = 30.0
17
+
18
+
19
+ def is_test_key(api_key: str) -> bool:
20
+ """Whether a key is a sandbox (test mode) key."""
21
+ return api_key.startswith(TEST_KEY_PREFIX)
22
+
23
+
24
+ def new_idempotency_key() -> str:
25
+ """A fresh key for the `idempotency_key=` argument of a POST. Keep it to retry the same call later."""
26
+ return str(uuid.uuid4())
27
+
28
+
29
+ def create_client(
30
+ api_key: str,
31
+ *,
32
+ base_url: str = DEFAULT_BASE_URL,
33
+ retry: RetryConfig | None = RetryConfig(),
34
+ transport: httpx.BaseTransport | None = None,
35
+ async_transport: httpx.AsyncBaseTransport | None = None,
36
+ timeout: float = DEFAULT_TIMEOUT_SECONDS,
37
+ headers: Mapping[str, str] | None = None,
38
+ ) -> AuthenticatedClient:
39
+ """A client for every generated call (`tutorflow_content.generated.api...`).
40
+
41
+ The key is sent as a bearer token. Rate-limited requests, and failed
42
+ requests that are safe to repeat, are retried (see retry.py); pass
43
+ `retry=None` to send every request once. `transport` and `async_transport`
44
+ replace the network, e.g. with httpx.MockTransport in tests.
45
+ """
46
+ key = api_key.strip()
47
+ if not key.startswith(KEY_PREFIX):
48
+ raise ValueError("api_key must be a Content API key that starts with tf_content_")
49
+
50
+ root = base_url.rstrip("/")
51
+ all_headers = {**(headers or {}), "Authorization": f"Bearer {key}"}
52
+ sync_transport = transport or httpx.HTTPTransport()
53
+ async_base = async_transport or httpx.AsyncHTTPTransport()
54
+ client = AuthenticatedClient(base_url=root, token=key, headers=dict(all_headers))
55
+ client.set_httpx_client(
56
+ httpx.Client(
57
+ base_url=root,
58
+ headers=all_headers,
59
+ timeout=timeout,
60
+ transport=RetryTransport(sync_transport, retry) if retry else sync_transport,
61
+ )
62
+ )
63
+ client.set_async_httpx_client(
64
+ httpx.AsyncClient(
65
+ base_url=root,
66
+ headers=all_headers,
67
+ timeout=timeout,
68
+ transport=AsyncRetryTransport(async_base, retry) if retry else async_base,
69
+ )
70
+ )
71
+ return client
@@ -0,0 +1,87 @@
1
+ """Typed errors built from the Content API error envelope."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import json
6
+ from collections.abc import Mapping
7
+ from datetime import datetime, timezone
8
+ from email.utils import parsedate_to_datetime
9
+ from typing import Any, Protocol
10
+
11
+ PRECONDITION_FAILED = 412
12
+ UNKNOWN_ERROR_CODE = "content_http_error"
13
+
14
+
15
+ class _ResponseLike(Protocol):
16
+ """httpx.Response and the generated client's Response both fit."""
17
+
18
+ status_code: int
19
+ content: bytes
20
+ headers: Mapping[str, str]
21
+
22
+
23
+ def parse_retry_after(value: str | None, now: datetime | None = None) -> float | None:
24
+ """Seconds from a Retry-After header, which may be seconds or an HTTP date."""
25
+ if value is None or value.strip() == "":
26
+ return None
27
+ try:
28
+ return max(0.0, float(value))
29
+ except ValueError:
30
+ pass
31
+ try:
32
+ when = parsedate_to_datetime(value)
33
+ except (TypeError, ValueError):
34
+ return None
35
+ current = now or datetime.now(timezone.utc)
36
+ return max(0.0, (when - current).total_seconds())
37
+
38
+
39
+ def _envelope(content: bytes) -> dict[str, Any]:
40
+ try:
41
+ body = json.loads(content or b"null")
42
+ except ValueError:
43
+ return {}
44
+ error = body.get("error") if isinstance(body, dict) else None
45
+ return error if isinstance(error, dict) else {}
46
+
47
+
48
+ def _header(headers: Mapping[str, str], name: str) -> str | None:
49
+ """Headers are case-insensitive; the generated Response keeps a plain mapping."""
50
+ lowered = name.lower()
51
+ return next((value for key, value in headers.items() if key.lower() == lowered), None)
52
+
53
+
54
+ class ContentApiError(Exception):
55
+ """A Content API answer outside 2xx, with every field of the error envelope."""
56
+
57
+ def __init__(self, status: int, error: Mapping[str, Any], headers: Mapping[str, str] | None = None) -> None:
58
+ headers = headers or {}
59
+ super().__init__(error.get("message") or f"The Content API answered HTTP {status}")
60
+ self.code: str = error.get("code") or UNKNOWN_ERROR_CODE
61
+ self.status: int = int(error.get("status") or status)
62
+ self.request_id: str | None = error.get("requestId") or _header(headers, "Request-Id")
63
+ retry_after = error.get("retryAfterSeconds")
64
+ self.retry_after_seconds: float | None = (
65
+ float(retry_after) if retry_after is not None else parse_retry_after(_header(headers, "Retry-After"))
66
+ )
67
+ self.current_etag: str | None = error.get("currentETag")
68
+ self.details: list[dict[str, Any]] = list(error.get("details") or [])
69
+ self.body: dict[str, Any] = dict(error)
70
+
71
+
72
+ class ContentPreconditionFailedError(ContentApiError):
73
+ """A 412: the resource changed since the ETag sent in If-Match; see current_etag."""
74
+
75
+
76
+ def error_from_response(response: _ResponseLike) -> ContentApiError:
77
+ """The exception for a non-2xx response."""
78
+ status = int(response.status_code)
79
+ error_class = ContentPreconditionFailedError if status == PRECONDITION_FAILED else ContentApiError
80
+ return error_class(status, _envelope(response.content), response.headers)
81
+
82
+
83
+ def unwrap(response: Any) -> Any:
84
+ """The parsed body of a `*_detailed` call, or a raised ContentApiError."""
85
+ if not 200 <= int(response.status_code) < 300:
86
+ raise error_from_response(response)
87
+ return response.parsed
@@ -0,0 +1,8 @@
1
+
2
+ """ A client library for accessing TutorFlow Content API """
3
+ from .client import AuthenticatedClient, Client
4
+
5
+ __all__ = (
6
+ "AuthenticatedClient",
7
+ "Client",
8
+ )
@@ -0,0 +1 @@
1
+ """ Contains methods for accessing the API """
@@ -0,0 +1 @@
1
+ """ Contains endpoint functions for accessing the API """
@@ -0,0 +1,243 @@
1
+ from http import HTTPStatus
2
+ from typing import Any, cast
3
+ from urllib.parse import quote
4
+
5
+ import httpx
6
+
7
+ from ...client import AuthenticatedClient, Client
8
+ from ...types import Response, UNSET
9
+ from ... import errors
10
+
11
+ from ...models.content_api_error import ContentApiError
12
+ from ...models.content_api_key_created_res_dto import ContentApiKeyCreatedResDto
13
+ from ...models.create_content_api_key_req_dto import CreateContentApiKeyReqDto
14
+ from typing import cast
15
+ from uuid import UUID
16
+
17
+
18
+
19
+ def _get_kwargs(
20
+ organization_id: UUID,
21
+ *,
22
+ body: CreateContentApiKeyReqDto,
23
+
24
+ ) -> dict[str, Any]:
25
+ headers: dict[str, Any] = {}
26
+
27
+
28
+
29
+
30
+
31
+
32
+ _kwargs: dict[str, Any] = {
33
+ "method": "post",
34
+ "url": "/v1/content/organizations/{organization_id}/api-keys".format(organization_id=quote(str(organization_id), safe=""),),
35
+ }
36
+
37
+ _kwargs["json"] = body.to_dict()
38
+
39
+ headers["Content-Type"] = "application/json"
40
+
41
+ _kwargs["headers"] = headers
42
+ return _kwargs
43
+
44
+
45
+
46
+ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> ContentApiError | ContentApiKeyCreatedResDto | None:
47
+ if response.status_code == 201:
48
+ response_201 = ContentApiKeyCreatedResDto.from_dict(response.json())
49
+
50
+
51
+
52
+ return response_201
53
+
54
+ if response.status_code == 400:
55
+ response_400 = ContentApiError.from_dict(response.json())
56
+
57
+
58
+
59
+ return response_400
60
+
61
+ if response.status_code == 401:
62
+ response_401 = ContentApiError.from_dict(response.json())
63
+
64
+
65
+
66
+ return response_401
67
+
68
+ if response.status_code == 403:
69
+ response_403 = ContentApiError.from_dict(response.json())
70
+
71
+
72
+
73
+ return response_403
74
+
75
+ if response.status_code == 404:
76
+ response_404 = ContentApiError.from_dict(response.json())
77
+
78
+
79
+
80
+ return response_404
81
+
82
+ if response.status_code == 422:
83
+ response_422 = ContentApiError.from_dict(response.json())
84
+
85
+
86
+
87
+ return response_422
88
+
89
+ if response.status_code == 500:
90
+ response_500 = ContentApiError.from_dict(response.json())
91
+
92
+
93
+
94
+ return response_500
95
+
96
+ if client.raise_on_unexpected_status:
97
+ raise errors.UnexpectedStatus(response.status_code, response.content)
98
+ else:
99
+ return None
100
+
101
+
102
+ def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[ContentApiError | ContentApiKeyCreatedResDto]:
103
+ return Response(
104
+ status_code=HTTPStatus(response.status_code),
105
+ content=response.content,
106
+ headers=response.headers,
107
+ parsed=_parse_response(client=client, response=response),
108
+ )
109
+
110
+
111
+ def sync_detailed(
112
+ organization_id: UUID,
113
+ *,
114
+ client: AuthenticatedClient,
115
+ body: CreateContentApiKeyReqDto,
116
+
117
+ ) -> Response[ContentApiError | ContentApiKeyCreatedResDto]:
118
+ """ Create a Content Integration API key
119
+
120
+ Signed-in TutorFlow session of an organization admin; not callable with a `tf_content_` key.
121
+
122
+ Args:
123
+ organization_id (UUID):
124
+ body (CreateContentApiKeyReqDto):
125
+
126
+ Raises:
127
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
128
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
129
+
130
+ Returns:
131
+ Response[ContentApiError | ContentApiKeyCreatedResDto]
132
+ """
133
+
134
+
135
+ kwargs = _get_kwargs(
136
+ organization_id=organization_id,
137
+ body=body,
138
+
139
+ )
140
+
141
+ response = client.get_httpx_client().request(
142
+ **kwargs,
143
+ )
144
+
145
+ return _build_response(client=client, response=response)
146
+
147
+ def sync(
148
+ organization_id: UUID,
149
+ *,
150
+ client: AuthenticatedClient,
151
+ body: CreateContentApiKeyReqDto,
152
+
153
+ ) -> ContentApiError | ContentApiKeyCreatedResDto | None:
154
+ """ Create a Content Integration API key
155
+
156
+ Signed-in TutorFlow session of an organization admin; not callable with a `tf_content_` key.
157
+
158
+ Args:
159
+ organization_id (UUID):
160
+ body (CreateContentApiKeyReqDto):
161
+
162
+ Raises:
163
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
164
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
165
+
166
+ Returns:
167
+ ContentApiError | ContentApiKeyCreatedResDto
168
+ """
169
+
170
+
171
+ return sync_detailed(
172
+ organization_id=organization_id,
173
+ client=client,
174
+ body=body,
175
+
176
+ ).parsed
177
+
178
+ async def asyncio_detailed(
179
+ organization_id: UUID,
180
+ *,
181
+ client: AuthenticatedClient,
182
+ body: CreateContentApiKeyReqDto,
183
+
184
+ ) -> Response[ContentApiError | ContentApiKeyCreatedResDto]:
185
+ """ Create a Content Integration API key
186
+
187
+ Signed-in TutorFlow session of an organization admin; not callable with a `tf_content_` key.
188
+
189
+ Args:
190
+ organization_id (UUID):
191
+ body (CreateContentApiKeyReqDto):
192
+
193
+ Raises:
194
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
195
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
196
+
197
+ Returns:
198
+ Response[ContentApiError | ContentApiKeyCreatedResDto]
199
+ """
200
+
201
+
202
+ kwargs = _get_kwargs(
203
+ organization_id=organization_id,
204
+ body=body,
205
+
206
+ )
207
+
208
+ response = await client.get_async_httpx_client().request(
209
+ **kwargs
210
+ )
211
+
212
+ return _build_response(client=client, response=response)
213
+
214
+ async def asyncio(
215
+ organization_id: UUID,
216
+ *,
217
+ client: AuthenticatedClient,
218
+ body: CreateContentApiKeyReqDto,
219
+
220
+ ) -> ContentApiError | ContentApiKeyCreatedResDto | None:
221
+ """ Create a Content Integration API key
222
+
223
+ Signed-in TutorFlow session of an organization admin; not callable with a `tf_content_` key.
224
+
225
+ Args:
226
+ organization_id (UUID):
227
+ body (CreateContentApiKeyReqDto):
228
+
229
+ Raises:
230
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
231
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
232
+
233
+ Returns:
234
+ ContentApiError | ContentApiKeyCreatedResDto
235
+ """
236
+
237
+
238
+ return (await asyncio_detailed(
239
+ organization_id=organization_id,
240
+ client=client,
241
+ body=body,
242
+
243
+ )).parsed
@@ -0,0 +1,251 @@
1
+ from http import HTTPStatus
2
+ from typing import Any, cast
3
+ from urllib.parse import quote
4
+
5
+ import httpx
6
+
7
+ from ...client import AuthenticatedClient, Client
8
+ from ...types import Response, UNSET
9
+ from ... import errors
10
+
11
+ from ...models.content_api_error import ContentApiError
12
+ from ...models.content_integration_api_key_controller_delete_api_key_response_200 import ContentIntegrationApiKeyControllerDeleteApiKeyResponse200
13
+ from typing import cast
14
+ from uuid import UUID
15
+
16
+
17
+
18
+ def _get_kwargs(
19
+ organization_id: UUID,
20
+ key_id: UUID,
21
+
22
+ ) -> dict[str, Any]:
23
+
24
+
25
+
26
+
27
+
28
+
29
+ _kwargs: dict[str, Any] = {
30
+ "method": "delete",
31
+ "url": "/v1/content/organizations/{organization_id}/api-keys/{key_id}".format(organization_id=quote(str(organization_id), safe=""),key_id=quote(str(key_id), safe=""),),
32
+ }
33
+
34
+
35
+ return _kwargs
36
+
37
+
38
+
39
+ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> ContentApiError | ContentIntegrationApiKeyControllerDeleteApiKeyResponse200 | None:
40
+ if response.status_code == 200:
41
+ response_200 = ContentIntegrationApiKeyControllerDeleteApiKeyResponse200.from_dict(response.json())
42
+
43
+
44
+
45
+ return response_200
46
+
47
+ if response.status_code == 400:
48
+ response_400 = ContentApiError.from_dict(response.json())
49
+
50
+
51
+
52
+ return response_400
53
+
54
+ if response.status_code == 401:
55
+ response_401 = ContentApiError.from_dict(response.json())
56
+
57
+
58
+
59
+ return response_401
60
+
61
+ if response.status_code == 403:
62
+ response_403 = ContentApiError.from_dict(response.json())
63
+
64
+
65
+
66
+ return response_403
67
+
68
+ if response.status_code == 404:
69
+ response_404 = ContentApiError.from_dict(response.json())
70
+
71
+
72
+
73
+ return response_404
74
+
75
+ if response.status_code == 409:
76
+ response_409 = ContentApiError.from_dict(response.json())
77
+
78
+
79
+
80
+ return response_409
81
+
82
+ if response.status_code == 422:
83
+ response_422 = ContentApiError.from_dict(response.json())
84
+
85
+
86
+
87
+ return response_422
88
+
89
+ if response.status_code == 500:
90
+ response_500 = ContentApiError.from_dict(response.json())
91
+
92
+
93
+
94
+ return response_500
95
+
96
+ if client.raise_on_unexpected_status:
97
+ raise errors.UnexpectedStatus(response.status_code, response.content)
98
+ else:
99
+ return None
100
+
101
+
102
+ def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[ContentApiError | ContentIntegrationApiKeyControllerDeleteApiKeyResponse200]:
103
+ return Response(
104
+ status_code=HTTPStatus(response.status_code),
105
+ content=response.content,
106
+ headers=response.headers,
107
+ parsed=_parse_response(client=client, response=response),
108
+ )
109
+
110
+
111
+ def sync_detailed(
112
+ organization_id: UUID,
113
+ key_id: UUID,
114
+ *,
115
+ client: AuthenticatedClient,
116
+
117
+ ) -> Response[ContentApiError | ContentIntegrationApiKeyControllerDeleteApiKeyResponse200]:
118
+ """ Delete a revoked or expired Content Integration API key
119
+
120
+ Removes a key that no longer works from the key list. A key that still works answers `409`
121
+ `content_api_key_active`: revoke it first. Signed-in TutorFlow session of an organization admin; not
122
+ callable with a `tf_content_` key.
123
+
124
+ Args:
125
+ organization_id (UUID):
126
+ key_id (UUID):
127
+
128
+ Raises:
129
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
130
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
131
+
132
+ Returns:
133
+ Response[ContentApiError | ContentIntegrationApiKeyControllerDeleteApiKeyResponse200]
134
+ """
135
+
136
+
137
+ kwargs = _get_kwargs(
138
+ organization_id=organization_id,
139
+ key_id=key_id,
140
+
141
+ )
142
+
143
+ response = client.get_httpx_client().request(
144
+ **kwargs,
145
+ )
146
+
147
+ return _build_response(client=client, response=response)
148
+
149
+ def sync(
150
+ organization_id: UUID,
151
+ key_id: UUID,
152
+ *,
153
+ client: AuthenticatedClient,
154
+
155
+ ) -> ContentApiError | ContentIntegrationApiKeyControllerDeleteApiKeyResponse200 | None:
156
+ """ Delete a revoked or expired Content Integration API key
157
+
158
+ Removes a key that no longer works from the key list. A key that still works answers `409`
159
+ `content_api_key_active`: revoke it first. Signed-in TutorFlow session of an organization admin; not
160
+ callable with a `tf_content_` key.
161
+
162
+ Args:
163
+ organization_id (UUID):
164
+ key_id (UUID):
165
+
166
+ Raises:
167
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
168
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
169
+
170
+ Returns:
171
+ ContentApiError | ContentIntegrationApiKeyControllerDeleteApiKeyResponse200
172
+ """
173
+
174
+
175
+ return sync_detailed(
176
+ organization_id=organization_id,
177
+ key_id=key_id,
178
+ client=client,
179
+
180
+ ).parsed
181
+
182
+ async def asyncio_detailed(
183
+ organization_id: UUID,
184
+ key_id: UUID,
185
+ *,
186
+ client: AuthenticatedClient,
187
+
188
+ ) -> Response[ContentApiError | ContentIntegrationApiKeyControllerDeleteApiKeyResponse200]:
189
+ """ Delete a revoked or expired Content Integration API key
190
+
191
+ Removes a key that no longer works from the key list. A key that still works answers `409`
192
+ `content_api_key_active`: revoke it first. Signed-in TutorFlow session of an organization admin; not
193
+ callable with a `tf_content_` key.
194
+
195
+ Args:
196
+ organization_id (UUID):
197
+ key_id (UUID):
198
+
199
+ Raises:
200
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
201
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
202
+
203
+ Returns:
204
+ Response[ContentApiError | ContentIntegrationApiKeyControllerDeleteApiKeyResponse200]
205
+ """
206
+
207
+
208
+ kwargs = _get_kwargs(
209
+ organization_id=organization_id,
210
+ key_id=key_id,
211
+
212
+ )
213
+
214
+ response = await client.get_async_httpx_client().request(
215
+ **kwargs
216
+ )
217
+
218
+ return _build_response(client=client, response=response)
219
+
220
+ async def asyncio(
221
+ organization_id: UUID,
222
+ key_id: UUID,
223
+ *,
224
+ client: AuthenticatedClient,
225
+
226
+ ) -> ContentApiError | ContentIntegrationApiKeyControllerDeleteApiKeyResponse200 | None:
227
+ """ Delete a revoked or expired Content Integration API key
228
+
229
+ Removes a key that no longer works from the key list. A key that still works answers `409`
230
+ `content_api_key_active`: revoke it first. Signed-in TutorFlow session of an organization admin; not
231
+ callable with a `tf_content_` key.
232
+
233
+ Args:
234
+ organization_id (UUID):
235
+ key_id (UUID):
236
+
237
+ Raises:
238
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
239
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
240
+
241
+ Returns:
242
+ ContentApiError | ContentIntegrationApiKeyControllerDeleteApiKeyResponse200
243
+ """
244
+
245
+
246
+ return (await asyncio_detailed(
247
+ organization_id=organization_id,
248
+ key_id=key_id,
249
+ client=client,
250
+
251
+ )).parsed