magic_hour 0.9.5__py3-none-any.whl → 0.44.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 (264) hide show
  1. magic_hour/README.md +34 -0
  2. magic_hour/__init__.py +1 -1
  3. magic_hour/client.py +8 -17
  4. magic_hour/environment.py +13 -1
  5. magic_hour/helpers/__init__.py +4 -0
  6. magic_hour/helpers/download.py +77 -0
  7. magic_hour/helpers/logger.py +8 -0
  8. magic_hour/resources/v1/README.md +32 -0
  9. magic_hour/resources/v1/ai_clothes_changer/README.md +94 -5
  10. magic_hour/resources/v1/ai_clothes_changer/client.py +161 -16
  11. magic_hour/resources/v1/ai_face_editor/README.md +195 -0
  12. magic_hour/resources/v1/ai_face_editor/__init__.py +4 -0
  13. magic_hour/resources/v1/ai_face_editor/client.py +324 -0
  14. magic_hour/resources/v1/ai_gif_generator/README.md +116 -0
  15. magic_hour/resources/v1/ai_gif_generator/__init__.py +4 -0
  16. magic_hour/resources/v1/ai_gif_generator/client.py +257 -0
  17. magic_hour/resources/v1/ai_headshot_generator/README.md +81 -3
  18. magic_hour/resources/v1/ai_headshot_generator/client.py +167 -18
  19. magic_hour/resources/v1/ai_image_editor/README.md +125 -0
  20. magic_hour/resources/v1/ai_image_editor/__init__.py +4 -0
  21. magic_hour/resources/v1/ai_image_editor/client.py +290 -0
  22. magic_hour/resources/v1/ai_image_generator/README.md +99 -5
  23. magic_hour/resources/v1/ai_image_generator/client.py +170 -24
  24. magic_hour/resources/v1/ai_image_upscaler/README.md +89 -3
  25. magic_hour/resources/v1/ai_image_upscaler/client.py +173 -20
  26. magic_hour/resources/v1/ai_meme_generator/README.md +129 -0
  27. magic_hour/resources/v1/ai_meme_generator/__init__.py +4 -0
  28. magic_hour/resources/v1/ai_meme_generator/client.py +253 -0
  29. magic_hour/resources/v1/ai_photo_editor/README.md +119 -4
  30. magic_hour/resources/v1/ai_photo_editor/client.py +199 -18
  31. magic_hour/resources/v1/ai_qr_code_generator/README.md +84 -3
  32. magic_hour/resources/v1/ai_qr_code_generator/client.py +140 -18
  33. magic_hour/resources/v1/ai_talking_photo/README.md +137 -0
  34. magic_hour/resources/v1/ai_talking_photo/__init__.py +4 -0
  35. magic_hour/resources/v1/ai_talking_photo/client.py +326 -0
  36. magic_hour/resources/v1/ai_voice_cloner/README.md +62 -0
  37. magic_hour/resources/v1/ai_voice_cloner/__init__.py +4 -0
  38. magic_hour/resources/v1/ai_voice_cloner/client.py +272 -0
  39. magic_hour/resources/v1/ai_voice_generator/README.md +112 -0
  40. magic_hour/resources/v1/ai_voice_generator/__init__.py +4 -0
  41. magic_hour/resources/v1/ai_voice_generator/client.py +241 -0
  42. magic_hour/resources/v1/animation/README.md +128 -6
  43. magic_hour/resources/v1/animation/client.py +247 -22
  44. magic_hour/resources/v1/audio_projects/README.md +135 -0
  45. magic_hour/resources/v1/audio_projects/__init__.py +12 -0
  46. magic_hour/resources/v1/audio_projects/client.py +310 -0
  47. magic_hour/resources/v1/audio_projects/client_test.py +520 -0
  48. magic_hour/resources/v1/auto_subtitle_generator/README.md +128 -0
  49. magic_hour/resources/v1/auto_subtitle_generator/__init__.py +4 -0
  50. magic_hour/resources/v1/auto_subtitle_generator/client.py +346 -0
  51. magic_hour/resources/v1/client.py +75 -1
  52. magic_hour/resources/v1/face_detection/README.md +157 -0
  53. magic_hour/resources/v1/face_detection/__init__.py +12 -0
  54. magic_hour/resources/v1/face_detection/client.py +380 -0
  55. magic_hour/resources/v1/face_swap/README.md +137 -9
  56. magic_hour/resources/v1/face_swap/client.py +329 -38
  57. magic_hour/resources/v1/face_swap_photo/README.md +118 -3
  58. magic_hour/resources/v1/face_swap_photo/client.py +199 -14
  59. magic_hour/resources/v1/files/README.md +39 -0
  60. magic_hour/resources/v1/files/client.py +351 -1
  61. magic_hour/resources/v1/files/client_test.py +414 -0
  62. magic_hour/resources/v1/files/upload_urls/README.md +38 -17
  63. magic_hour/resources/v1/files/upload_urls/client.py +38 -34
  64. magic_hour/resources/v1/image_background_remover/README.md +96 -5
  65. magic_hour/resources/v1/image_background_remover/client.py +151 -16
  66. magic_hour/resources/v1/image_projects/README.md +82 -10
  67. magic_hour/resources/v1/image_projects/__init__.py +10 -2
  68. magic_hour/resources/v1/image_projects/client.py +154 -16
  69. magic_hour/resources/v1/image_projects/client_test.py +527 -0
  70. magic_hour/resources/v1/image_to_video/README.md +96 -11
  71. magic_hour/resources/v1/image_to_video/client.py +282 -38
  72. magic_hour/resources/v1/lip_sync/README.md +112 -9
  73. magic_hour/resources/v1/lip_sync/client.py +288 -34
  74. magic_hour/resources/v1/photo_colorizer/README.md +107 -0
  75. magic_hour/resources/v1/photo_colorizer/__init__.py +4 -0
  76. magic_hour/resources/v1/photo_colorizer/client.py +248 -0
  77. magic_hour/resources/v1/text_to_video/README.md +96 -7
  78. magic_hour/resources/v1/text_to_video/client.py +204 -18
  79. magic_hour/resources/v1/video_projects/README.md +81 -9
  80. magic_hour/resources/v1/video_projects/__init__.py +10 -2
  81. magic_hour/resources/v1/video_projects/client.py +151 -14
  82. magic_hour/resources/v1/video_projects/client_test.py +527 -0
  83. magic_hour/resources/v1/video_to_video/README.md +119 -15
  84. magic_hour/resources/v1/video_to_video/client.py +299 -46
  85. magic_hour/types/models/__init__.py +92 -56
  86. magic_hour/types/models/v1_ai_clothes_changer_create_response.py +33 -0
  87. magic_hour/types/models/v1_ai_face_editor_create_response.py +33 -0
  88. magic_hour/types/models/v1_ai_gif_generator_create_response.py +33 -0
  89. magic_hour/types/models/v1_ai_headshot_generator_create_response.py +33 -0
  90. magic_hour/types/models/v1_ai_image_editor_create_response.py +33 -0
  91. magic_hour/types/models/v1_ai_image_generator_create_response.py +33 -0
  92. magic_hour/types/models/v1_ai_image_upscaler_create_response.py +33 -0
  93. magic_hour/types/models/v1_ai_meme_generator_create_response.py +33 -0
  94. magic_hour/types/models/v1_ai_photo_editor_create_response.py +33 -0
  95. magic_hour/types/models/v1_ai_qr_code_generator_create_response.py +33 -0
  96. magic_hour/types/models/v1_ai_talking_photo_create_response.py +35 -0
  97. magic_hour/types/models/v1_ai_voice_cloner_create_response.py +27 -0
  98. magic_hour/types/models/v1_ai_voice_generator_create_response.py +27 -0
  99. magic_hour/types/models/v1_animation_create_response.py +35 -0
  100. magic_hour/types/models/v1_audio_projects_get_response.py +72 -0
  101. magic_hour/types/models/v1_audio_projects_get_response_downloads_item.py +19 -0
  102. magic_hour/types/models/{get_v1_image_projects_id_response_error.py → v1_audio_projects_get_response_error.py} +2 -2
  103. magic_hour/types/models/v1_auto_subtitle_generator_create_response.py +35 -0
  104. magic_hour/types/models/v1_face_detection_create_response.py +25 -0
  105. magic_hour/types/models/v1_face_detection_get_response.py +45 -0
  106. magic_hour/types/models/v1_face_detection_get_response_faces_item.py +25 -0
  107. magic_hour/types/models/v1_face_swap_create_response.py +35 -0
  108. magic_hour/types/models/v1_face_swap_photo_create_response.py +33 -0
  109. magic_hour/types/models/v1_files_upload_urls_create_response.py +24 -0
  110. magic_hour/types/models/{post_v1_files_upload_urls_response_items_item.py → v1_files_upload_urls_create_response_items_item.py} +2 -2
  111. magic_hour/types/models/v1_image_background_remover_create_response.py +33 -0
  112. magic_hour/types/models/{get_v1_image_projects_id_response.py → v1_image_projects_get_response.py} +20 -18
  113. magic_hour/types/models/{get_v1_video_projects_id_response_downloads_item.py → v1_image_projects_get_response_downloads_item.py} +1 -1
  114. magic_hour/types/models/{get_v1_video_projects_id_response_error.py → v1_image_projects_get_response_error.py} +2 -2
  115. magic_hour/types/models/v1_image_to_video_create_response.py +35 -0
  116. magic_hour/types/models/v1_lip_sync_create_response.py +35 -0
  117. magic_hour/types/models/v1_photo_colorizer_create_response.py +33 -0
  118. magic_hour/types/models/v1_text_to_video_create_response.py +35 -0
  119. magic_hour/types/models/{get_v1_video_projects_id_response.py → v1_video_projects_get_response.py} +26 -23
  120. magic_hour/types/models/{get_v1_video_projects_id_response_download.py → v1_video_projects_get_response_download.py} +1 -1
  121. magic_hour/types/models/{get_v1_image_projects_id_response_downloads_item.py → v1_video_projects_get_response_downloads_item.py} +1 -1
  122. magic_hour/types/models/v1_video_projects_get_response_error.py +25 -0
  123. magic_hour/types/models/v1_video_to_video_create_response.py +35 -0
  124. magic_hour/types/params/__init__.py +422 -176
  125. magic_hour/types/params/v1_ai_clothes_changer_create_body.py +40 -0
  126. magic_hour/types/params/v1_ai_clothes_changer_create_body_assets.py +58 -0
  127. magic_hour/types/params/v1_ai_clothes_changer_generate_body_assets.py +33 -0
  128. magic_hour/types/params/v1_ai_face_editor_create_body.py +52 -0
  129. magic_hour/types/params/v1_ai_face_editor_create_body_assets.py +33 -0
  130. magic_hour/types/params/v1_ai_face_editor_create_body_style.py +137 -0
  131. magic_hour/types/params/v1_ai_face_editor_generate_body_assets.py +17 -0
  132. magic_hour/types/params/v1_ai_gif_generator_create_body.py +47 -0
  133. magic_hour/types/params/{post_v1_ai_image_generator_body_style.py → v1_ai_gif_generator_create_body_style.py} +5 -5
  134. magic_hour/types/params/v1_ai_headshot_generator_create_body.py +49 -0
  135. magic_hour/types/params/v1_ai_headshot_generator_create_body_assets.py +33 -0
  136. magic_hour/types/params/v1_ai_headshot_generator_create_body_style.py +27 -0
  137. magic_hour/types/params/v1_ai_headshot_generator_generate_body_assets.py +17 -0
  138. magic_hour/types/params/v1_ai_image_editor_create_body.py +49 -0
  139. magic_hour/types/params/v1_ai_image_editor_create_body_assets.py +47 -0
  140. magic_hour/types/params/v1_ai_image_editor_create_body_style.py +41 -0
  141. magic_hour/types/params/v1_ai_image_editor_generate_body_assets.py +28 -0
  142. magic_hour/types/params/{post_v1_ai_image_generator_body.py → v1_ai_image_generator_create_body.py} +17 -11
  143. magic_hour/types/params/v1_ai_image_generator_create_body_style.py +127 -0
  144. magic_hour/types/params/v1_ai_image_upscaler_create_body.py +59 -0
  145. magic_hour/types/params/v1_ai_image_upscaler_create_body_assets.py +33 -0
  146. magic_hour/types/params/{post_v1_ai_image_upscaler_body_style.py → v1_ai_image_upscaler_create_body_style.py} +4 -4
  147. magic_hour/types/params/v1_ai_image_upscaler_generate_body_assets.py +17 -0
  148. magic_hour/types/params/v1_ai_meme_generator_create_body.py +37 -0
  149. magic_hour/types/params/v1_ai_meme_generator_create_body_style.py +73 -0
  150. magic_hour/types/params/{post_v1_ai_photo_editor_body.py → v1_ai_photo_editor_create_body.py} +15 -15
  151. magic_hour/types/params/v1_ai_photo_editor_create_body_assets.py +33 -0
  152. magic_hour/types/params/{post_v1_ai_photo_editor_body_style.py → v1_ai_photo_editor_create_body_style.py} +20 -4
  153. magic_hour/types/params/v1_ai_photo_editor_generate_body_assets.py +17 -0
  154. magic_hour/types/params/v1_ai_qr_code_generator_create_body.py +45 -0
  155. magic_hour/types/params/{post_v1_ai_qr_code_generator_body_style.py → v1_ai_qr_code_generator_create_body_style.py} +4 -4
  156. magic_hour/types/params/v1_ai_talking_photo_create_body.py +68 -0
  157. magic_hour/types/params/v1_ai_talking_photo_create_body_assets.py +46 -0
  158. magic_hour/types/params/v1_ai_talking_photo_create_body_style.py +44 -0
  159. magic_hour/types/params/v1_ai_talking_photo_generate_body_assets.py +26 -0
  160. magic_hour/types/params/v1_ai_voice_cloner_create_body.py +49 -0
  161. magic_hour/types/params/v1_ai_voice_cloner_create_body_assets.py +33 -0
  162. magic_hour/types/params/v1_ai_voice_cloner_create_body_style.py +28 -0
  163. magic_hour/types/params/v1_ai_voice_cloner_generate_body_assets.py +28 -0
  164. magic_hour/types/params/v1_ai_voice_generator_create_body.py +40 -0
  165. magic_hour/types/params/v1_ai_voice_generator_create_body_style.py +440 -0
  166. magic_hour/types/params/{post_v1_animation_body.py → v1_animation_create_body.py} +16 -16
  167. magic_hour/types/params/{post_v1_animation_body_assets.py → v1_animation_create_body_assets.py} +15 -5
  168. magic_hour/types/params/{post_v1_animation_body_style.py → v1_animation_create_body_style.py} +13 -10
  169. magic_hour/types/params/v1_animation_generate_body_assets.py +39 -0
  170. magic_hour/types/params/v1_auto_subtitle_generator_create_body.py +78 -0
  171. magic_hour/types/params/v1_auto_subtitle_generator_create_body_assets.py +33 -0
  172. magic_hour/types/params/v1_auto_subtitle_generator_create_body_style.py +56 -0
  173. magic_hour/types/params/v1_auto_subtitle_generator_create_body_style_custom_config.py +86 -0
  174. magic_hour/types/params/v1_auto_subtitle_generator_generate_body_assets.py +17 -0
  175. magic_hour/types/params/v1_face_detection_create_body.py +44 -0
  176. magic_hour/types/params/v1_face_detection_create_body_assets.py +33 -0
  177. magic_hour/types/params/v1_face_detection_generate_body_assets.py +17 -0
  178. magic_hour/types/params/v1_face_swap_create_body.py +92 -0
  179. magic_hour/types/params/v1_face_swap_create_body_assets.py +91 -0
  180. magic_hour/types/params/v1_face_swap_create_body_assets_face_mappings_item.py +44 -0
  181. magic_hour/types/params/v1_face_swap_create_body_style.py +33 -0
  182. magic_hour/types/params/v1_face_swap_generate_body_assets.py +56 -0
  183. magic_hour/types/params/v1_face_swap_generate_body_assets_face_mappings_item.py +25 -0
  184. magic_hour/types/params/v1_face_swap_photo_create_body.py +40 -0
  185. magic_hour/types/params/v1_face_swap_photo_create_body_assets.py +76 -0
  186. magic_hour/types/params/v1_face_swap_photo_create_body_assets_face_mappings_item.py +44 -0
  187. magic_hour/types/params/v1_face_swap_photo_generate_body_assets.py +47 -0
  188. magic_hour/types/params/v1_face_swap_photo_generate_body_assets_face_mappings_item.py +25 -0
  189. magic_hour/types/params/v1_files_upload_urls_create_body.py +36 -0
  190. magic_hour/types/params/v1_files_upload_urls_create_body_items_item.py +38 -0
  191. magic_hour/types/params/v1_image_background_remover_create_body.py +40 -0
  192. magic_hour/types/params/v1_image_background_remover_create_body_assets.py +49 -0
  193. magic_hour/types/params/v1_image_background_remover_generate_body_assets.py +27 -0
  194. magic_hour/types/params/v1_image_to_video_create_body.py +101 -0
  195. magic_hour/types/params/v1_image_to_video_create_body_assets.py +33 -0
  196. magic_hour/types/params/v1_image_to_video_create_body_style.py +53 -0
  197. magic_hour/types/params/v1_image_to_video_generate_body_assets.py +17 -0
  198. magic_hour/types/params/v1_lip_sync_create_body.py +100 -0
  199. magic_hour/types/params/{post_v1_lip_sync_body_assets.py → v1_lip_sync_create_body_assets.py} +15 -5
  200. magic_hour/types/params/v1_lip_sync_create_body_style.py +37 -0
  201. magic_hour/types/params/v1_lip_sync_generate_body_assets.py +36 -0
  202. magic_hour/types/params/v1_photo_colorizer_create_body.py +40 -0
  203. magic_hour/types/params/v1_photo_colorizer_create_body_assets.py +33 -0
  204. magic_hour/types/params/v1_photo_colorizer_generate_body_assets.py +17 -0
  205. magic_hour/types/params/v1_text_to_video_create_body.py +78 -0
  206. magic_hour/types/params/v1_text_to_video_create_body_style.py +43 -0
  207. magic_hour/types/params/v1_video_to_video_create_body.py +101 -0
  208. magic_hour/types/params/{post_v1_video_to_video_body_assets.py → v1_video_to_video_create_body_assets.py} +9 -4
  209. magic_hour/types/params/{post_v1_video_to_video_body_style.py → v1_video_to_video_create_body_style.py} +68 -26
  210. magic_hour/types/params/v1_video_to_video_generate_body_assets.py +27 -0
  211. magic_hour-0.44.0.dist-info/METADATA +328 -0
  212. magic_hour-0.44.0.dist-info/RECORD +231 -0
  213. magic_hour/core/__init__.py +0 -52
  214. magic_hour/core/api_error.py +0 -56
  215. magic_hour/core/auth.py +0 -314
  216. magic_hour/core/base_client.py +0 -618
  217. magic_hour/core/binary_response.py +0 -23
  218. magic_hour/core/query.py +0 -106
  219. magic_hour/core/request.py +0 -156
  220. magic_hour/core/response.py +0 -293
  221. magic_hour/core/type_utils.py +0 -28
  222. magic_hour/core/utils.py +0 -55
  223. magic_hour/types/models/post_v1_ai_clothes_changer_response.py +0 -25
  224. magic_hour/types/models/post_v1_ai_headshot_generator_response.py +0 -25
  225. magic_hour/types/models/post_v1_ai_image_generator_response.py +0 -25
  226. magic_hour/types/models/post_v1_ai_image_upscaler_response.py +0 -25
  227. magic_hour/types/models/post_v1_ai_photo_editor_response.py +0 -25
  228. magic_hour/types/models/post_v1_ai_qr_code_generator_response.py +0 -25
  229. magic_hour/types/models/post_v1_animation_response.py +0 -25
  230. magic_hour/types/models/post_v1_face_swap_photo_response.py +0 -25
  231. magic_hour/types/models/post_v1_face_swap_response.py +0 -25
  232. magic_hour/types/models/post_v1_files_upload_urls_response.py +0 -21
  233. magic_hour/types/models/post_v1_image_background_remover_response.py +0 -25
  234. magic_hour/types/models/post_v1_image_to_video_response.py +0 -25
  235. magic_hour/types/models/post_v1_lip_sync_response.py +0 -25
  236. magic_hour/types/models/post_v1_text_to_video_response.py +0 -25
  237. magic_hour/types/models/post_v1_video_to_video_response.py +0 -25
  238. magic_hour/types/params/post_v1_ai_clothes_changer_body.py +0 -40
  239. magic_hour/types/params/post_v1_ai_clothes_changer_body_assets.py +0 -45
  240. magic_hour/types/params/post_v1_ai_headshot_generator_body.py +0 -40
  241. magic_hour/types/params/post_v1_ai_headshot_generator_body_assets.py +0 -28
  242. magic_hour/types/params/post_v1_ai_image_upscaler_body.py +0 -57
  243. magic_hour/types/params/post_v1_ai_image_upscaler_body_assets.py +0 -28
  244. magic_hour/types/params/post_v1_ai_photo_editor_body_assets.py +0 -28
  245. magic_hour/types/params/post_v1_ai_qr_code_generator_body.py +0 -45
  246. magic_hour/types/params/post_v1_face_swap_body.py +0 -72
  247. magic_hour/types/params/post_v1_face_swap_body_assets.py +0 -52
  248. magic_hour/types/params/post_v1_face_swap_photo_body.py +0 -40
  249. magic_hour/types/params/post_v1_face_swap_photo_body_assets.py +0 -36
  250. magic_hour/types/params/post_v1_files_upload_urls_body.py +0 -31
  251. magic_hour/types/params/post_v1_files_upload_urls_body_items_item.py +0 -38
  252. magic_hour/types/params/post_v1_image_background_remover_body.py +0 -40
  253. magic_hour/types/params/post_v1_image_background_remover_body_assets.py +0 -28
  254. magic_hour/types/params/post_v1_image_to_video_body.py +0 -73
  255. magic_hour/types/params/post_v1_image_to_video_body_assets.py +0 -28
  256. magic_hour/types/params/post_v1_image_to_video_body_style.py +0 -37
  257. magic_hour/types/params/post_v1_lip_sync_body.py +0 -80
  258. magic_hour/types/params/post_v1_text_to_video_body.py +0 -57
  259. magic_hour/types/params/post_v1_text_to_video_body_style.py +0 -28
  260. magic_hour/types/params/post_v1_video_to_video_body.py +0 -93
  261. magic_hour-0.9.5.dist-info/METADATA +0 -133
  262. magic_hour-0.9.5.dist-info/RECORD +0 -132
  263. {magic_hour-0.9.5.dist-info → magic_hour-0.44.0.dist-info}/LICENSE +0 -0
  264. {magic_hour-0.9.5.dist-info → magic_hour-0.44.0.dist-info}/WHEEL +0 -0
@@ -0,0 +1,231 @@
1
+ magic_hour/README.md,sha256=ZsqMwwtQHnkApHnFdboS71prPA0aK8C9ay2QdKowKiM,2337
2
+ magic_hour/__init__.py,sha256=ypWA4msPy3T-U2PAyRSAXIQc0m2J9aY8wXnfmIupAEc,214
3
+ magic_hour/client.py,sha256=oHuz0FRKuedtwwPSkFLaSjoEWt_0N57hJ0rEDKbNcFw,1712
4
+ magic_hour/environment.py,sha256=uhBiiOYlddwQHBq9DIs0jamTg7D4jbQ2Zho-pHSqvBI,535
5
+ magic_hour/helpers/__init__.py,sha256=pO6sgb41iVe_IN2dApfl2l3BXOWIb4i5pHl_if-oo_E,176
6
+ magic_hour/helpers/download.py,sha256=_aZmpr9tzqzeyPbvc1Xz95GJhEgOqH1-GHh66Ild57E,2336
7
+ magic_hour/helpers/logger.py,sha256=Z8ljney670Kc8DaSzlHdH9N8RXmj2_qWPovLUoC0tNY,210
8
+ magic_hour/resources/v1/README.md,sha256=h6OGLU-7h1LkovLQTmq6jx3Gn69bb5gWSnjSv--eluY,1856
9
+ magic_hour/resources/v1/__init__.py,sha256=Aj0sjVcoijjQyieNBxv2_uewPYC2vO2UG-ehoBgCz5E,86
10
+ magic_hour/resources/v1/ai_clothes_changer/README.md,sha256=iMfeY2q1cli2BtbXpSeWeDnBed8q1h0mMYJUgzb10bA,6995
11
+ magic_hour/resources/v1/ai_clothes_changer/__init__.py,sha256=6W_Y2HxG2sDOBiJyzngK3Q2S3xfQgpK-j8xFRmBAhbQ,142
12
+ magic_hour/resources/v1/ai_clothes_changer/client.py,sha256=CdSE1ZiygLFusVpgCCFoqgIu1z8geN2XVUMxxgsSkAA,9963
13
+ magic_hour/resources/v1/ai_face_editor/README.md,sha256=p4YmFtHgBLGWmurLqB7SwT7vrDb7Bsx5gQPc66l6bAM,21295
14
+ magic_hour/resources/v1/ai_face_editor/__init__.py,sha256=RY8GBMQcqsDFbFcUuK-4LPvablq-U9XmSSlQk4HLKmM,126
15
+ magic_hour/resources/v1/ai_face_editor/client.py,sha256=qo8Lj7s0a9vanOMzWb5lw0FyrrcstQ-kUvfBkiBipGY,12313
16
+ magic_hour/resources/v1/ai_gif_generator/README.md,sha256=p9UDxJmTH9XCKiu8su7YEYGjAMWlxxeETnVvH79LJ6E,3701
17
+ magic_hour/resources/v1/ai_gif_generator/__init__.py,sha256=SG_WmxUnpQWlfNQoHfdXPEGQEPC0WZPgom8ATaR9jiY,134
18
+ magic_hour/resources/v1/ai_gif_generator/client.py,sha256=TlOvjWcoTT5ZdqCypr5VMxc0lrASkr5sYy2oulWZNhc,9174
19
+ magic_hour/resources/v1/ai_headshot_generator/README.md,sha256=tHUhzYZBFUEuIpjtdP00s9h_0Wb2cuuYNTEGbMy413E,6304
20
+ magic_hour/resources/v1/ai_headshot_generator/__init__.py,sha256=4WZ3jfrL2yPhQaPalMJrUEykwUoF3KBtop2VJEij-0s,154
21
+ magic_hour/resources/v1/ai_headshot_generator/client.py,sha256=ZFMy39ai3eocL1Rs4hA92km-Xmkky7hTi4xjDw8tKOc,9997
22
+ magic_hour/resources/v1/ai_image_editor/README.md,sha256=ZmXfrFY5jQpTMgqji0r-Kms20o9gelQcIdha0P2_3cU,8774
23
+ magic_hour/resources/v1/ai_image_editor/__init__.py,sha256=VvGqS2j_VQ7iz8TueD2R2L0YLlRsqRyGBSP4Tf-Uml8,130
24
+ magic_hour/resources/v1/ai_image_editor/client.py,sha256=58XPUsVNpjN_Dggpo9A0iiuUUqQJ0A5bwyG8fO5ci9U,10685
25
+ magic_hour/resources/v1/ai_image_generator/README.md,sha256=l2aOMQODmS0ltcTI8a9nRgF18vWXaU3CLHPTmUTekQs,7236
26
+ magic_hour/resources/v1/ai_image_generator/__init__.py,sha256=qZws7N5CALYAbnIUc2ERV8Cy-QJmHcJ9tU7W-epEnaQ,142
27
+ magic_hour/resources/v1/ai_image_generator/client.py,sha256=yxkulLMpcm_8DLyfJXflvceFVJA-OXjOynjEkQ36c3A,10392
28
+ magic_hour/resources/v1/ai_image_upscaler/README.md,sha256=k0KpTOXug7XTgtuoaUuYvap8brsdmHc6cDue97Hnj0o,7040
29
+ magic_hour/resources/v1/ai_image_upscaler/__init__.py,sha256=9b1-2XfnAVa4qE3S-4WL8vN3wuqLkUuHKjdl_km8hUc,138
30
+ magic_hour/resources/v1/ai_image_upscaler/client.py,sha256=WPqVMzN1-O1IVxkAMx0O1M4VRZ1cl7QPi94Ej2E5sBM,10713
31
+ magic_hour/resources/v1/ai_meme_generator/README.md,sha256=0qFX6GPIehtsduVDlPptsJSd6faSvahN_mHha3hi8nw,4333
32
+ magic_hour/resources/v1/ai_meme_generator/__init__.py,sha256=x4vtin1KKvoA-va7vhaQ91c__M2z3PmDySLX7yJpRDA,138
33
+ magic_hour/resources/v1/ai_meme_generator/client.py,sha256=jtWQj_k_MZhoyT1nhXkg8YIeVTIPHw66G-tmGcZlOa4,8679
34
+ magic_hour/resources/v1/ai_photo_editor/README.md,sha256=THz-6h1W2-iw6nVXQBPLLn0UngE8V6vBYrXoh7QnKvE,15414
35
+ magic_hour/resources/v1/ai_photo_editor/__init__.py,sha256=RPG6WaL2KN_DmgrtxImA_jNnEDMm-Ku2o2m2EnNwxts,130
36
+ magic_hour/resources/v1/ai_photo_editor/client.py,sha256=xdNR8PX2C0VHVETTjFIpcMZygOMnFKrIQSYr6AF5uVk,13221
37
+ magic_hour/resources/v1/ai_qr_code_generator/README.md,sha256=uda-tUqWSIVU_Aj04xxw75oycyk6RAJrBdn2NOagKpI,4573
38
+ magic_hour/resources/v1/ai_qr_code_generator/__init__.py,sha256=HnSTg7tB8M5LibZoCDRdE5Q71efmiqZIkNEve5SO1Mg,146
39
+ magic_hour/resources/v1/ai_qr_code_generator/client.py,sha256=E0wsaANANTGK4Jvt9HK6ICVuTOEyKUO6hWy1M3QufRU,8789
40
+ magic_hour/resources/v1/ai_talking_photo/README.md,sha256=3jLQFgiT1duomyJOmDE4SnDOvDnRahq9_lmcyTqCl2k,9845
41
+ magic_hour/resources/v1/ai_talking_photo/__init__.py,sha256=ZTDD_IRBoR7GSdGWCVEK2-LOEsKUdGEHZZvDHa9MOnA,134
42
+ magic_hour/resources/v1/ai_talking_photo/client.py,sha256=kbFM3peM5NEzUle1miup7Xe2q_HwL7u7kzuD1DkcEBc,12529
43
+ magic_hour/resources/v1/ai_voice_cloner/README.md,sha256=khY9GgSPMNl21wruRG2YDzW_DEigQXNTpC0AbAEg_Fw,4413
44
+ magic_hour/resources/v1/ai_voice_cloner/__init__.py,sha256=dMszpfVi9QKvNiwZZ6FL56rFVaciI3U5s_C0VT28NO8,130
45
+ magic_hour/resources/v1/ai_voice_cloner/client.py,sha256=JkimmV__rY7tCXXFSMCRJISVZoLq_dSiS3LNXu53qzM,10205
46
+ magic_hour/resources/v1/ai_voice_generator/README.md,sha256=mbVrrjJ8JVJfxSIdlQqJqIJJOg9EyGIGlm4qyhosqow,21397
47
+ magic_hour/resources/v1/ai_voice_generator/__init__.py,sha256=Zl1HuxfafN3hzJCCCD_YyCX_y2v4uAihSDAC8GCcE8U,142
48
+ magic_hour/resources/v1/ai_voice_generator/client.py,sha256=VhrGUhdznSDSBgzLNa7pjqjWC7-cXzYVUyjyGf4c7xo,8749
49
+ magic_hour/resources/v1/animation/README.md,sha256=2p-RsRSJlEJH45xHsEh2ytKC2vRxPhjQgVaT1Aq6l8g,15889
50
+ magic_hour/resources/v1/animation/__init__.py,sha256=M6KUe6TEZl_DAdyn1HFQ2kHYanZo6xy3mvUdCN264hQ,114
51
+ magic_hour/resources/v1/animation/client.py,sha256=vVoYF6P-OU83kAXwZyRJngv6C_zoArXXuM6nTPy-Jvw,15447
52
+ magic_hour/resources/v1/audio_projects/README.md,sha256=I4Ql2cIhKOSMxpStDCznba7n6s28CmTSz7Fi_NijuHk,4801
53
+ magic_hour/resources/v1/audio_projects/__init__.py,sha256=QG5bxr8z40p54-38pawFobEowm_nrx5IURMU4hjrCtI,246
54
+ magic_hour/resources/v1/audio_projects/client.py,sha256=9AIDLuAU6TswVWS7BAnmL2F-PbVz-UcCwy1OjLnOfas,10979
55
+ magic_hour/resources/v1/audio_projects/client_test.py,sha256=n1nMtZgc9TTBKGiiVcMciX3jXHtMs5cAPRrD6s9e6L8,15776
56
+ magic_hour/resources/v1/auto_subtitle_generator/README.md,sha256=GT1xpPjPr-L0GbCVZraZNJWVKb5FS5aPUNQ7HMEEEGM,12265
57
+ magic_hour/resources/v1/auto_subtitle_generator/__init__.py,sha256=dnWFEiSdIl3AwFVprqWHSMzqpeHgZz9wPEMxm7c3Xnc,162
58
+ magic_hour/resources/v1/auto_subtitle_generator/client.py,sha256=QZREuGcgIVc3hNaBvTfDuBRj0pvnr_uu0YzFkFhsd_s,14803
59
+ magic_hour/resources/v1/client.py,sha256=XUgpdBobZmlygihSNDpfHOvB1ZObXcfD7RqmUKKctso,8444
60
+ magic_hour/resources/v1/face_detection/README.md,sha256=8RaUctuyRbq4wfDyuuNi_WwosUT8D_j64uyhuFkc2Eg,6995
61
+ magic_hour/resources/v1/face_detection/__init__.py,sha256=gGsbucNf0ibSUORv4FBlzTmMHAKEnPZuIqmhh7Qjxfk,246
62
+ magic_hour/resources/v1/face_detection/client.py,sha256=v35yArONM6OuQ0Ze_fwpHt_eSHdYcs4teR0gRMjcGdA,14831
63
+ magic_hour/resources/v1/face_swap/README.md,sha256=GI5NDeVR9LK8LsWCuyWQhos_7Pse0lDIWpEcAodvFp8,16560
64
+ magic_hour/resources/v1/face_swap/__init__.py,sha256=lyg5uAHyYHEUVAiAZtP3zwjGCEGqq8IWbQKexVdhr00,110
65
+ magic_hour/resources/v1/face_swap/client.py,sha256=C5XGZTh8DY30Q9HuOSr0wziD0yzzZnoKNLlY7OE8ePc,19783
66
+ magic_hour/resources/v1/face_swap_photo/README.md,sha256=IdHieiO-S5GZuzmw-FbAq-MVrpA8kprcIOb8yGC-Ro0,9685
67
+ magic_hour/resources/v1/face_swap_photo/__init__.py,sha256=NZEplYX5kDPL_0qY0Q5tuxhDevipN0otByTYKMmF_1k,130
68
+ magic_hour/resources/v1/face_swap_photo/client.py,sha256=dXolLVvto4h13QcEYd2gQ1E-aNn5EAAi5QwUl1durOU,11739
69
+ magic_hour/resources/v1/files/README.md,sha256=fck4ceHhAPTDJyYau8uX9MZ2ulR2QAQfuuO0C6wGar8,1066
70
+ magic_hour/resources/v1/files/__init__.py,sha256=ucXmaXDdZqXfRhnnioJeQAXeRLzBDb44gTfWijrub28,98
71
+ magic_hour/resources/v1/files/client.py,sha256=wVIKaz7NzKsdASbKyhQzcaHrFkluEAQBtZ5fynebUSY,13281
72
+ magic_hour/resources/v1/files/client_test.py,sha256=4mUFWuxr9R0YmeZ468KPvt8p4zUvZBhPcbszHBtLE4s,13970
73
+ magic_hour/resources/v1/files/upload_urls/README.md,sha256=Jm70w1nDA9TP2h5jNxj15XPOaOJNC-aoJomZJPKS0Ek,2723
74
+ magic_hour/resources/v1/files/upload_urls/__init__.py,sha256=hRp0s_emx-wib7z42V4L9VzYR9MQ3hnmS5bNv4QtfFM,118
75
+ magic_hour/resources/v1/files/upload_urls/client.py,sha256=-VvRxyz-43X7YY8po7Sqdn8kRurOFWQ5H2wANZDGBeY,5280
76
+ magic_hour/resources/v1/image_background_remover/README.md,sha256=aY7l9nba6RtP3BAUj6wclwgDqCwW5gsibcyrh1wWvlA,7212
77
+ magic_hour/resources/v1/image_background_remover/__init__.py,sha256=Vb_e8zKEh7bdrq0q1175DqyOd1ptPBUIfSKSLFPBVU4,166
78
+ magic_hour/resources/v1/image_background_remover/client.py,sha256=SPRZjRJPTu2zpRRq3BRna9Rl0fywOBfo5DgNhn3gqdM,9367
79
+ magic_hour/resources/v1/image_projects/README.md,sha256=XViimILO3n8rVtM8XaU12KvVahsoL58-YO6FvwJuluU,4830
80
+ magic_hour/resources/v1/image_projects/__init__.py,sha256=FtA1OC8s-CCOwQ0AaUqlkt9IC0CIZ4_p65E97m3ZcGE,246
81
+ magic_hour/resources/v1/image_projects/client.py,sha256=gDhND6b2KkIHEbAHJgYUjQeCsxLFGi2P7zTjg2CDyjc,10993
82
+ magic_hour/resources/v1/image_projects/client_test.py,sha256=5KH4s0vG13SEUkB6pAa9m7M2dqBUoqIERPhAu1DgPfA,16015
83
+ magic_hour/resources/v1/image_to_video/README.md,sha256=ItIG_ya56LvTjHe2NPOBIh-zlhwj33KrrLTfpNrR-FI,10872
84
+ magic_hour/resources/v1/image_to_video/__init__.py,sha256=tY_ABo6evwKQBRSq-M84lNX-pXqmxoozukmrO6NhCgA,126
85
+ magic_hour/resources/v1/image_to_video/client.py,sha256=fUajB5-kKzT3WC5u7EAeY8_N4k1_r36JmwML4GquQwc,17392
86
+ magic_hour/resources/v1/lip_sync/README.md,sha256=3ysmdf9arjIiWvklKQ4QFVsJ_3t41Qh92kVka-rBKU8,13495
87
+ magic_hour/resources/v1/lip_sync/__init__.py,sha256=MlKUAoHNSKcuNzVyqNfLnLtD_PsqEn3l1TtVpPC1JqQ,106
88
+ magic_hour/resources/v1/lip_sync/client.py,sha256=hFnNps9HSEG6Zi3x56PP5WorbFzm7NnicRiLfR2kZ8o,19769
89
+ magic_hour/resources/v1/photo_colorizer/README.md,sha256=EhdBwUoqWM63mzHFVW-s66BpFkpyVV_t-BZOYGWeWpA,5024
90
+ magic_hour/resources/v1/photo_colorizer/__init__.py,sha256=7rDjkeUzWG5GXw_4RD1XH7Ygy-_0_OUFX99IgE_RVbE,134
91
+ magic_hour/resources/v1/photo_colorizer/client.py,sha256=mW5VYDmsvU9phtkiY008zarM1CCaWTMTeOTY4zaWDfI,8861
92
+ magic_hour/resources/v1/text_to_video/README.md,sha256=SdU2758yqbaOUyigzSqyHxNaLDvYqmZaXJrh11fF7fw,8206
93
+ magic_hour/resources/v1/text_to_video/__init__.py,sha256=F18iHSi9tuYSdgpatznBzb7lbSySNpK-82w96-Om_k4,122
94
+ magic_hour/resources/v1/text_to_video/client.py,sha256=Cx7NjpcWv_5Ucl42K09jYGUzJ9l04bvBQUlBf9Fk7dI,13620
95
+ magic_hour/resources/v1/video_projects/README.md,sha256=0Wgi4tlkv2tW7fXJP9_T73UeGpMLFvUCCSj8sCkgHyw,5001
96
+ magic_hour/resources/v1/video_projects/__init__.py,sha256=Pm2S3V2tVycoR5x5zPiFCZSoeY15s5WJaR0pLkJq-Pg,246
97
+ magic_hour/resources/v1/video_projects/client.py,sha256=-cB6zYCKNHldfIS0LwapvhjPi9UoUKaPGrXqMXdYlGU,10955
98
+ magic_hour/resources/v1/video_projects/client_test.py,sha256=iOJWM0cFg4QmFOYNVRRvMPX7nCg-1rCnSUh_1aDq96A,15967
99
+ magic_hour/resources/v1/video_to_video/README.md,sha256=9ZFPgr1EUaZG9yvKnUrsu7M2mTTRd28WumQEyEBeYsw,13941
100
+ magic_hour/resources/v1/video_to_video/__init__.py,sha256=1SHaRLlsrlBkdxxKBYgdbHrGATlRvqlXc22RpjjHaOA,126
101
+ magic_hour/resources/v1/video_to_video/client.py,sha256=WwdTRgfmHGQRfQy-Hhu3W-ERDkIjo3GEt6i4tIA9Eiw,19988
102
+ magic_hour/types/models/__init__.py,sha256=4Tft2hQnahgGUyk_ktFlQOQZ9r2hTcS9C3iN9SQBuMU,4668
103
+ magic_hour/types/models/v1_ai_clothes_changer_create_response.py,sha256=rQJqlDf7Ql46hR4eAepU6SnZS3fH-gewmSJ-OvEY5K0,1102
104
+ magic_hour/types/models/v1_ai_face_editor_create_response.py,sha256=pGpfZMCRhhDYCV-tj3hfmuXvQPhb44csnyrcwh9tfQM,1098
105
+ magic_hour/types/models/v1_ai_gif_generator_create_response.py,sha256=3T7PE17mdU9msZTfl2Gw-u1mTbjZiJm7gAxgIICloN4,1100
106
+ magic_hour/types/models/v1_ai_headshot_generator_create_response.py,sha256=3jvQkpXaZXXT2QCT4WEapOykCqzlrMgJwJ7jU8Ae73I,1105
107
+ magic_hour/types/models/v1_ai_image_editor_create_response.py,sha256=KAeyhU8LrOGdATOLhF5iLfC2TpDh9HCdLbI2xU3tD0Y,1099
108
+ magic_hour/types/models/v1_ai_image_generator_create_response.py,sha256=iD8BS-Go6is1DnGct_Kf8pLtkQK1p16PXPe_icHxoTo,1102
109
+ magic_hour/types/models/v1_ai_image_upscaler_create_response.py,sha256=HH4P8tr9VjAzki3mBMon9-glZLG7sndkpjgORuo-T1I,1101
110
+ magic_hour/types/models/v1_ai_meme_generator_create_response.py,sha256=oShaKV0dK8AsEOAYCZp1ZiWeojN1xiTIbkfG5P_5gkg,1101
111
+ magic_hour/types/models/v1_ai_photo_editor_create_response.py,sha256=HHIFywFl57ZvfBgxnlwFgKP39BxGRuN57o4bWiPzsOA,1099
112
+ magic_hour/types/models/v1_ai_qr_code_generator_create_response.py,sha256=dwTaT_H6h6yJ4tJti_W0bpLjglK_hiZk14NJnsD_1Gw,1103
113
+ magic_hour/types/models/v1_ai_talking_photo_create_response.py,sha256=4dnMUHVcVAVxywGPj_2wcH_BOCjS6qh_loyMszJVzBY,1348
114
+ magic_hour/types/models/v1_ai_voice_cloner_create_response.py,sha256=C7rR7PAD_tQtoxxduOF6E-uCAx8vdLmHLRC0zr4pVXY,853
115
+ magic_hour/types/models/v1_ai_voice_generator_create_response.py,sha256=o65cf7AV04klVSulX60G4SevyLPIURlLBAO_GojGMRI,856
116
+ magic_hour/types/models/v1_animation_create_response.py,sha256=EXgZ-7dGPSKgGDyG72r_273vxXYsOkKHbvmujmmCE-c,1343
117
+ magic_hour/types/models/v1_audio_projects_get_response.py,sha256=q2jlYpAxiFxBIEb5XUj7eQRR50sefITQpjTHpzPiJ00,2126
118
+ magic_hour/types/models/v1_audio_projects_get_response_downloads_item.py,sha256=Yd9qkIWLzKMvSlOmJSBjPJA27qE6WjGiRsTHtu2QSeA,410
119
+ magic_hour/types/models/v1_audio_projects_get_response_error.py,sha256=I_YZDOB53EETagPyV71VfCNyaYGJzHfkOS3bPRNqlog,568
120
+ magic_hour/types/models/v1_auto_subtitle_generator_create_response.py,sha256=HGwpgKkYBToPRhbGX7SfjP1HwaAQF-mMszxGNsP_Yhg,1355
121
+ magic_hour/types/models/v1_face_detection_create_response.py,sha256=91cx8WOB6jN99gfc14tuh29jDD8xc5ba6OiGJcA8Eyk,625
122
+ magic_hour/types/models/v1_face_detection_get_response.py,sha256=-g_tHwqL1A4g8oygpKsNMOUTjpyVJl6B-xWoQyZxDJc,1126
123
+ magic_hour/types/models/v1_face_detection_get_response_faces_item.py,sha256=gg5YSTar6mZteC2cJV2vkGiol3caomAnm3W9f2KbKzM,618
124
+ magic_hour/types/models/v1_face_swap_create_response.py,sha256=hbVncqJZ4_57DX6k6ufG9ipIEqbMaT9jiCn59LOgPiw,1342
125
+ magic_hour/types/models/v1_face_swap_photo_create_response.py,sha256=6SQ4lbfHGsZRoDS1PVatqpZN6pOuFL0rqimObYrq7X4,1099
126
+ magic_hour/types/models/v1_files_upload_urls_create_response.py,sha256=b-5b2AlqExcjDh1xmGQR5HH4NwS97jhmquazHtoOrcM,682
127
+ magic_hour/types/models/v1_files_upload_urls_create_response_items_item.py,sha256=AjW1Myj-dB10IdM3zTMEsXouY3tnx8vdN5CW3HLQX_M,799
128
+ magic_hour/types/models/v1_image_background_remover_create_response.py,sha256=onxvMvNSr9JyFFCMgT8btWkC3uenTAFZXXQ6hoGU7hk,1108
129
+ magic_hour/types/models/v1_image_projects_get_response.py,sha256=0pl5t8K28631Z81jKx_-OWj27kMy6lWT6OdVOgXVwU8,2644
130
+ magic_hour/types/models/v1_image_projects_get_response_downloads_item.py,sha256=kC0UhiMug52kxN6Ib1H_u_JQGUbeRc91gjuVaXYaM-c,410
131
+ magic_hour/types/models/v1_image_projects_get_response_error.py,sha256=R1qg-aIt63h6Q7bQ4AvgeC0lbUg5u35rwFXFvU_gvZs,568
132
+ magic_hour/types/models/v1_image_to_video_create_response.py,sha256=ctYkU_CtdhxQmIxU34RCaeJkQgyvQGMT2uVDx1yLDcU,1346
133
+ magic_hour/types/models/v1_lip_sync_create_response.py,sha256=ShKuT9yJzA8wkdbibRyfonMiFoZxLNXixwu2cckKs6s,1341
134
+ magic_hour/types/models/v1_photo_colorizer_create_response.py,sha256=uuf1FKLjZL0eRGGpwkr1h_y-YI658KO0EiOhjRJsfaY,1100
135
+ magic_hour/types/models/v1_text_to_video_create_response.py,sha256=ral_dJx3lk8K3zKik8bxjftIQVnIL3mu0KZKIr2Y4qE,1345
136
+ magic_hour/types/models/v1_video_projects_get_response.py,sha256=KEXYOryLBiwmfBEA3picKkmphZkgpgaypNHUzBhqupQ,4044
137
+ magic_hour/types/models/v1_video_projects_get_response_download.py,sha256=nudDCN30TsVk9UE_uXMtTT0JHIAGlWgjDeHpkZ0vIfU,450
138
+ magic_hour/types/models/v1_video_projects_get_response_downloads_item.py,sha256=DlUuLBSGa7jWoozxferkaOsGc4jASItcjjWbBXGu620,410
139
+ magic_hour/types/models/v1_video_projects_get_response_error.py,sha256=49QxnXAmYHcvSWuuhbQZeGlUfqVcO4YwZ414GczQnvA,568
140
+ magic_hour/types/models/v1_video_to_video_create_response.py,sha256=HCquU2Dciu6jCvhlpce8sGg1CypZngvtrvkwyCWOkSY,1346
141
+ magic_hour/types/params/__init__.py,sha256=6wqAJA2NY-d-xjUePqWCFtzE2k_nAG_ZUGAemqD3E5I,17470
142
+ magic_hour/types/params/v1_ai_clothes_changer_create_body.py,sha256=dicJkS-1OJs28UlogAExFJTZ5ysb-cUnimL6rbHsRzo,1075
143
+ magic_hour/types/params/v1_ai_clothes_changer_create_body_assets.py,sha256=Ej1YLJgiJCJ9wBldfiSzORivv02cWGlyIThPOXn1YM0,1895
144
+ magic_hour/types/params/v1_ai_clothes_changer_generate_body_assets.py,sha256=iu6Dxx8WD12uINYp20Y7YPc2zRF8HJLxfBgzp6V7-gY,1018
145
+ magic_hour/types/params/v1_ai_face_editor_create_body.py,sha256=3Ryr4npOkAdIPzs1tVSdKHeMM1cJDZ63qlyQMXsuI6c,1382
146
+ magic_hour/types/params/v1_ai_face_editor_create_body_assets.py,sha256=HA9v6_tdKgvNcJ-NIhd_tWoVJONThDKOkcy59HtKxJk,1015
147
+ magic_hour/types/params/v1_ai_face_editor_create_body_style.py,sha256=vhU38XF6e1VBefYDLxMAvECgMkcQMxGdrQgge2t_o0M,3983
148
+ magic_hour/types/params/v1_ai_face_editor_generate_body_assets.py,sha256=pbj_4o83Vod7LImuXuJbNyz-4MN0gDalO_8wOOBQ68I,521
149
+ magic_hour/types/params/v1_ai_gif_generator_create_body.py,sha256=hge1E7m4zxoYm0hFiTJqFRyP0IN5YL91UiuC9aam-2Q,1325
150
+ magic_hour/types/params/v1_ai_gif_generator_create_body_style.py,sha256=xefwoS15Iu9sbhc8oszcH8otTamk-ZTvSMuV1qvcYuQ,611
151
+ magic_hour/types/params/v1_ai_headshot_generator_create_body.py,sha256=rvvvXsVLP2xQ4dEeShGorCwwdFKbhRmGOCK5cJOd3Ks,1474
152
+ magic_hour/types/params/v1_ai_headshot_generator_create_body_assets.py,sha256=iogqsl75ReVEhhslFccrNjUaXfHdcul8eqvWZ9QPABw,1080
153
+ magic_hour/types/params/v1_ai_headshot_generator_create_body_style.py,sha256=rS2z6N56Fmy4RtWoe63AzEOyqqVIdztTQ-dKk-bo7PQ,921
154
+ magic_hour/types/params/v1_ai_headshot_generator_generate_body_assets.py,sha256=_QM15poiupVBV28RWtZCOCVetm-GiZymhyLE73MaF3w,572
155
+ magic_hour/types/params/v1_ai_image_editor_create_body.py,sha256=HebSxozith2bZ7DFBwdOnztZokv4ofknI2rqx8IJZN4,1351
156
+ magic_hour/types/params/v1_ai_image_editor_create_body_assets.py,sha256=5MQWt6jKDz6y49lOO8bE8b9m4uv96RVd8bGLoXZwsFY,1778
157
+ magic_hour/types/params/v1_ai_image_editor_create_body_style.py,sha256=JFHkneXyqLEKYBr6gRM_feuj4U6C0R2c5A4pO1O-V1o,1255
158
+ magic_hour/types/params/v1_ai_image_editor_generate_body_assets.py,sha256=K8fT3uMQ1GiYVf1DZktDfE3kXE3lsm-E_gZrE8SUt_c,1005
159
+ magic_hour/types/params/v1_ai_image_generator_create_body.py,sha256=_ccGNMOwFVckgqs0oEIJ0nnAtFiqczB3Gx2pPdFlLYs,1581
160
+ magic_hour/types/params/v1_ai_image_generator_create_body_style.py,sha256=G8DiBF1jqLWLIHqEiNycZ7wjjQs1XAfchbhFq6wr-3U,4116
161
+ magic_hour/types/params/v1_ai_image_upscaler_create_body.py,sha256=-F0-rHptpe54pK5oFY_jUCg7tMOpXZVwnAPJmvw6Exw,1672
162
+ magic_hour/types/params/v1_ai_image_upscaler_create_body_assets.py,sha256=3F36DRTYQxZ-_IIpiB-JI2S9nH1kAseMu1jo3sSsz1c,999
163
+ magic_hour/types/params/v1_ai_image_upscaler_create_body_style.py,sha256=XRNxQslCeMQ9RD6gV-bqOGB62tVE-u_mlBYmBzgPRyA,993
164
+ magic_hour/types/params/v1_ai_image_upscaler_generate_body_assets.py,sha256=Vb51jkaJ3rSOVcnA4fUI_rUDcvpR3AakTHRPgzLl18o,499
165
+ magic_hour/types/params/v1_ai_meme_generator_create_body.py,sha256=aYbnLZcqeIL4vPKkH6CePFTmCyVcnoQxl-n9dEu9Yds,934
166
+ magic_hour/types/params/v1_ai_meme_generator_create_body_style.py,sha256=olHEhM1LlYDjqcRYXglayUfxklnVBThCv86QP9s28no,1822
167
+ magic_hour/types/params/v1_ai_photo_editor_create_body.py,sha256=3uIXc9pX2OOkvUH0yxRg7GAzCcHRabxoTE-yCvXVwzc,2009
168
+ magic_hour/types/params/v1_ai_photo_editor_create_body_assets.py,sha256=IdhPA9sFyA3s9l_g8ow8xVcTuODf32-4eOQ-HGHbm34,1013
169
+ magic_hour/types/params/v1_ai_photo_editor_create_body_style.py,sha256=EGPcoSjCDffoTbY3QB-85HVJ97p9swcZkMsYdW_O2JE,2752
170
+ magic_hour/types/params/v1_ai_photo_editor_generate_body_assets.py,sha256=RYo7BX-xcr_EnqDE-S8AyETpA70Kc-YuSMxR7pZZAio,517
171
+ magic_hour/types/params/v1_ai_qr_code_generator_create_body.py,sha256=k3HgloxyGCuT4Hd5mrDB6dbjeOybiC4zAKRwag5oHe4,1178
172
+ magic_hour/types/params/v1_ai_qr_code_generator_create_body_style.py,sha256=i3ldwmoQPEnrw654PNIARmpsX-kUHZqaT8wjcc22JoA,839
173
+ magic_hour/types/params/v1_ai_talking_photo_create_body.py,sha256=2UjXVz2uKL3M6qVD3V7eLjj8RFyAeFwFYK2od2tdZxs,1984
174
+ magic_hour/types/params/v1_ai_talking_photo_create_body_assets.py,sha256=PI3lZWCidt1wJtuHeNwV8R2V10ZK6rif5LYraKqtqko,1574
175
+ magic_hour/types/params/v1_ai_talking_photo_create_body_style.py,sha256=0rgj6SFL882f1PNG-3CdfQRZmVFlRFLZ092131WNTxc,1761
176
+ magic_hour/types/params/v1_ai_talking_photo_generate_body_assets.py,sha256=08gLlPEQ2RH9DxrTyEAMFMKAbig85a2NXRwV2jBG9gM,868
177
+ magic_hour/types/params/v1_ai_voice_cloner_create_body.py,sha256=Qqqxaf2pcYgLhDaMgHiGlyQhD-1DVp59HCgllUpAErw,1355
178
+ magic_hour/types/params/v1_ai_voice_cloner_create_body_assets.py,sha256=W0ogu9tRem9CyFnWiJjUq0FVS59N_xpx6eIIWho-cn0,1011
179
+ magic_hour/types/params/v1_ai_voice_cloner_create_body_style.py,sha256=bmp5HuoA0IqkZ5aap0PlFRYcqI3KrCeMrk5UBNunguM,670
180
+ magic_hour/types/params/v1_ai_voice_cloner_generate_body_assets.py,sha256=6Z6EweIFMYJIghQyPpaCpqORdla4dd6E_3V_13xZwPg,694
181
+ magic_hour/types/params/v1_ai_voice_generator_create_body.py,sha256=4UAia0k1Jkt1weBWgGTBXB9hGjawik5GlbOSFgIJA8Y,1065
182
+ magic_hour/types/params/v1_ai_voice_generator_create_body_style.py,sha256=_hnY3JiD0PCYuTEoNyEbAh5bNvX1lQ6uMP1cUTdBYVw,14642
183
+ magic_hour/types/params/v1_animation_create_body.py,sha256=02iyLeTcgI4HqfWOSzozX6J5CKmEqpsdVjuyiap5qkY,2303
184
+ magic_hour/types/params/v1_animation_create_body_assets.py,sha256=Mg9teD9lRljt4s4Fl4Ld7S_EsrFiA0Mu-3bed00WA34,2309
185
+ magic_hour/types/params/v1_animation_create_body_style.py,sha256=h0qmkzf3Z1tbCje8cXYwsHX1PwZ5xv9d6SyoUjxAkA4,8119
186
+ magic_hour/types/params/v1_animation_generate_body_assets.py,sha256=wfmYOqz4pPdjfgVl72XaKx-VfE8J6H7UB33bswZqsts,1324
187
+ magic_hour/types/params/v1_auto_subtitle_generator_create_body.py,sha256=JVxIOWMoaRjGqIolHwaWtJg0we9eQpz5QpUgUHh_Au4,2764
188
+ magic_hour/types/params/v1_auto_subtitle_generator_create_body_assets.py,sha256=Thg4lHAeJr5LtL48Fvv_NL59CVgJdDbZSsPz3KPiMKk,1050
189
+ magic_hour/types/params/v1_auto_subtitle_generator_create_body_style.py,sha256=IRF1I56TacS5DSWsCeccYfgy2nq5C9q0bivkih8YIsk,2129
190
+ magic_hour/types/params/v1_auto_subtitle_generator_create_body_style_custom_config.py,sha256=D5R-Ek62hDy0lUjBkLtyVlqwxA9pU7EO92AT4EuI8yI,2866
191
+ magic_hour/types/params/v1_auto_subtitle_generator_generate_body_assets.py,sha256=hrLz_4DcqK3FLQ_MGK1gth67EEyrSGDcxIJ-djSG_Qw,538
192
+ magic_hour/types/params/v1_face_detection_create_body.py,sha256=GSk6zzi5jqb-oluAf5IpPfVuwXkKyKceWblieLZ572s,1277
193
+ magic_hour/types/params/v1_face_detection_create_body_assets.py,sha256=JdNI147nEiCnwWyie9PmG1CoJeG2XiBVN_Uw_hFga7s,1039
194
+ magic_hour/types/params/v1_face_detection_generate_body_assets.py,sha256=agD9RZ82hAAB9mxVVvfHrOn0gL5b6s0DSR-ct9AxIOQ,541
195
+ magic_hour/types/params/v1_face_swap_create_body.py,sha256=QV8uAvnXcHeIrBkuYt7ClZ6327ZVeggNR2hvIHFg49I,3221
196
+ magic_hour/types/params/v1_face_swap_create_body_assets.py,sha256=nlXpHP3xmSrC6jeRjrN5U-r95V19oztTCDJ8FCrDN68,3472
197
+ magic_hour/types/params/v1_face_swap_create_body_assets_face_mappings_item.py,sha256=sUnjwlrUYxUgROjge-jz6IaQd3P-y99ZJp9c4EcMSQY,1713
198
+ magic_hour/types/params/v1_face_swap_create_body_style.py,sha256=u1xan1Izigom5Yq7n3T33X8l60SaifhLBp9tYfJpqbs,1076
199
+ magic_hour/types/params/v1_face_swap_generate_body_assets.py,sha256=lVzt9sNoS8kOcQrLwPDP8RQR961Bzk_TQjv3g23X1uE,2099
200
+ magic_hour/types/params/v1_face_swap_generate_body_assets_face_mappings_item.py,sha256=URYyJf-O4-vSgibFwCfaypKljzMjqvmLsZcEpsWjcr8,1133
201
+ magic_hour/types/params/v1_face_swap_photo_create_body.py,sha256=hGjjZIorSdJ-oXmv8EPrVzun_rdGCO0YsufqeIdqw5U,1048
202
+ magic_hour/types/params/v1_face_swap_photo_create_body_assets.py,sha256=BGrFyIF6oljlSh7pyuX8yb-7nbamfSL219Vw1AqD0F4,2917
203
+ magic_hour/types/params/v1_face_swap_photo_create_body_assets_face_mappings_item.py,sha256=w0gHZ0nghFec6h7klwRFCH-zf3X1RQ3aNcdtj83yLjs,1733
204
+ magic_hour/types/params/v1_face_swap_photo_generate_body_assets.py,sha256=vDdSx_uKHx4_B8KQ8muqaqyzYkHbOUeXVlbNqF7KkDA,1771
205
+ magic_hour/types/params/v1_face_swap_photo_generate_body_assets_face_mappings_item.py,sha256=FjRNiJ8_oXasuLWeU_tKZvFS2xKC1QeRZu_U-PpDYvg,1143
206
+ magic_hour/types/params/v1_files_upload_urls_create_body.py,sha256=ZeP9EQHeibd_PKxlkHGKLlk9n6vnXM9gpAADH49tNS0,961
207
+ magic_hour/types/params/v1_files_upload_urls_create_body_items_item.py,sha256=pBq2n2B0SdFE7SyFhuJU0OTGVMuegYFdlqKnzCg01HA,1120
208
+ magic_hour/types/params/v1_image_background_remover_create_body.py,sha256=EaCrKAD0eKla3i8xVSTAtY9psNlNsYZiwAFCxT-6w8E,1132
209
+ magic_hour/types/params/v1_image_background_remover_create_body_assets.py,sha256=_17W457icUkbBujB0uMBAR0-2l9HS7Kl0B1Mzt7eB9E,1841
210
+ magic_hour/types/params/v1_image_background_remover_generate_body_assets.py,sha256=uJKFPnJB73khbTlcA2jLUlCVTpuXawzOJwQ2p4QypS4,1058
211
+ magic_hour/types/params/v1_image_to_video_create_body.py,sha256=t5UkwOA1t4vo1x3OSggcdw_qw1U0LOZ1htT93RmD0yM,3619
212
+ magic_hour/types/params/v1_image_to_video_create_body_assets.py,sha256=ncvcmcPa7tDLTjmuPg_kyve8pfZKVOEIEN4yBvAiK_w,1002
213
+ magic_hour/types/params/v1_image_to_video_create_body_style.py,sha256=fBrqT9sLY7ljMpNjUUaD03fRPSt4FzQTvgOp0auL0wI,1669
214
+ magic_hour/types/params/v1_image_to_video_generate_body_assets.py,sha256=G5POTBk4n_2RLvaUqdDapz_8Q6onOb6l-cL4RtH5kBo,508
215
+ magic_hour/types/params/v1_lip_sync_create_body.py,sha256=YFuc9wJtHZpnYC4NPyFKgqZmMJP_IZAf4YuKaL9VE3k,3672
216
+ magic_hour/types/params/v1_lip_sync_create_body_assets.py,sha256=BBoXpLfLth0eqvWNm55cSb956691NovMEBjnESaP-mI,2184
217
+ magic_hour/types/params/v1_lip_sync_create_body_style.py,sha256=XvrausslCCOzo4nQ0VaQTgUj5cljGJQaGo3rfraaFQ8,1290
218
+ magic_hour/types/params/v1_lip_sync_generate_body_assets.py,sha256=alL9I4Wjoc482yJ8DtLv5tBJl7YIIrafxV1MCIOE2BY,1241
219
+ magic_hour/types/params/v1_photo_colorizer_create_body.py,sha256=htPHOJnoUypzhtvShcVDTPrADcHFc7tdXrZc4onzQuE,1059
220
+ magic_hour/types/params/v1_photo_colorizer_create_body_assets.py,sha256=ZagjM8tondNTcNZT2zBKG_JrHm3WgWh00BVyDANEje8,1031
221
+ magic_hour/types/params/v1_photo_colorizer_generate_body_assets.py,sha256=aW-pkDsGLfpVlN4LnXmIjFksZzK6MLzPxrjO7AgqlnU,533
222
+ magic_hour/types/params/v1_text_to_video_create_body.py,sha256=XgYc5yVUPnNKTYeEpuPQPJi0r2qO3bPe-h6khUkgk1s,2477
223
+ magic_hour/types/params/v1_text_to_video_create_body_style.py,sha256=cEZO917hipE4PbIy2vRdmUO2tSRqJcW9vge9z30-aB0,1173
224
+ magic_hour/types/params/v1_video_to_video_create_body.py,sha256=HsO8QTY3FY3Ge7IRIVkavpquqQkEAhQWY0b3FSWXB14,3734
225
+ magic_hour/types/params/v1_video_to_video_create_body_assets.py,sha256=XwdoqT1x5ElcWb6qUfmtabNsyaatEsOygB4gJ154y-M,1660
226
+ magic_hour/types/params/v1_video_to_video_create_body_style.py,sha256=tvk0OwIgtRczgmqIo8wVfCYTMcXF7wVNMN0BwvlGkhY,6642
227
+ magic_hour/types/params/v1_video_to_video_generate_body_assets.py,sha256=j06Y1RKZKwEXW9Zdfhr3Lntx7eDAKpH-k1N1XkKuqPM,915
228
+ magic_hour-0.44.0.dist-info/LICENSE,sha256=F3fxj7JXPgB2K0uj8YXRsVss4u-Dgt_-U3V4VXsivNI,1070
229
+ magic_hour-0.44.0.dist-info/METADATA,sha256=S2WL5K2Fr3JqK0Ax5n8-QU_Rn3v7K4ZZQDWMNN5ssnA,13856
230
+ magic_hour-0.44.0.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
231
+ magic_hour-0.44.0.dist-info/RECORD,,
@@ -1,52 +0,0 @@
1
- from .api_error import ApiError
2
- from .auth import (
3
- AuthKeyQuery,
4
- AuthBasic,
5
- AuthBearer,
6
- AuthProvider,
7
- AuthKeyCookie,
8
- AuthKeyHeader,
9
- GrantType,
10
- OAuth2,
11
- OAuth2ClientCredentialsForm,
12
- OAuth2PasswordForm,
13
- )
14
- from .base_client import AsyncBaseClient, BaseClient, SyncBaseClient
15
- from .binary_response import BinaryResponse
16
- from .query import encode_query_param, QueryParams
17
- from .request import (
18
- filter_not_given,
19
- to_content,
20
- to_encodable,
21
- RequestOptions,
22
- default_request_options,
23
- )
24
- from .response import from_encodable, AsyncStreamResponse, StreamResponse
25
-
26
- __all__ = [
27
- "ApiError",
28
- "AsyncBaseClient",
29
- "BaseClient",
30
- "BinaryResponse",
31
- "RequestOptions",
32
- "default_request_options",
33
- "SyncBaseClient",
34
- "AuthKeyQuery",
35
- "AuthBasic",
36
- "AuthBearer",
37
- "AuthProvider",
38
- "AuthKeyCookie",
39
- "AuthKeyHeader",
40
- "GrantType",
41
- "OAuth2",
42
- "OAuth2ClientCredentialsForm",
43
- "OAuth2PasswordForm",
44
- "to_encodable",
45
- "filter_not_given",
46
- "to_content",
47
- "encode_query_param",
48
- "from_encodable",
49
- "AsyncStreamResponse",
50
- "StreamResponse",
51
- "QueryParams",
52
- ]
@@ -1,56 +0,0 @@
1
- """
2
- Generated by Sideko (sideko.dev)
3
- """
4
-
5
- from json import JSONDecodeError
6
- import typing
7
- import httpx
8
-
9
-
10
- class ApiError(Exception):
11
- """
12
- A custom exception class for handling API-related errors.
13
-
14
- This class extends the base Exception class to provide additional context
15
- for API errors, including the HTTP status code and response body.
16
-
17
- Attributes:
18
- status_code: The HTTP status code associated with the error.
19
- None if no status code is applicable.
20
- body: The response body or error message content.
21
- Can be any type depending on the API response format.
22
- response: The raw httpx response object. See https://www.python-httpx.org/api/#response for object reference
23
- """
24
-
25
- status_code: typing.Optional[int]
26
- body: typing.Any
27
- response: httpx.Response
28
-
29
- def __init__(self, *, response: httpx.Response) -> None:
30
- """
31
- Initialize the ApiError with optional status code and body.
32
-
33
- Args:
34
- status_code: The HTTP status code of the error.
35
- Defaults to None.
36
-
37
- Note:
38
- The asterisk (*) in the parameters forces keyword arguments,
39
- making the instantiation more explicit.
40
- """
41
- try:
42
- self.body = response.json()
43
- except JSONDecodeError:
44
- self.body = None
45
- self.status_code = response.status_code
46
- self.response = response
47
-
48
- def __str__(self) -> str:
49
- """
50
- Return a string representation of the ApiError.
51
-
52
- Returns:
53
- str: A formatted string containing the status code and body.
54
- Format: "status_code: {status_code}, body: {body}"
55
- """
56
- return f"status_code: {self.status_code}, body: {self.body}"
magic_hour/core/auth.py DELETED
@@ -1,314 +0,0 @@
1
- import abc
2
- import datetime
3
- from typing import Any, Dict, TypedDict, Optional, List, Tuple, Literal
4
-
5
- import jsonpointer # type: ignore
6
- import httpx
7
- from pydantic import BaseModel
8
- from .request import RequestConfig
9
-
10
-
11
- class AuthProvider(abc.ABC, BaseModel):
12
- """
13
- Abstract base class defining the interface for authentication providers.
14
-
15
- Each concrete implementation handles a specific authentication method
16
- and modifies the request configuration accordingly.
17
- """
18
-
19
- @abc.abstractmethod
20
- def add_to_request(self, cfg: RequestConfig) -> RequestConfig:
21
- """
22
- Adds authentication details to the request configuration.
23
-
24
- Args:
25
- cfg: The request configuration to modify
26
-
27
- Returns:
28
- The modified request configuration with authentication details added
29
- """
30
-
31
- @abc.abstractmethod
32
- def set_value(self, val: Optional[str]) -> None:
33
- """
34
- Generic method to set an auth value.
35
-
36
- Args:
37
- val: Authentication value to set
38
- """
39
-
40
-
41
- class AuthBasic(AuthProvider):
42
- """
43
- Implements HTTP Basic Authentication.
44
-
45
- Adds username and password credentials to the request using the standard
46
- HTTP Basic Authentication scheme.
47
- """
48
-
49
- username: Optional[str]
50
- password: Optional[str]
51
-
52
- def add_to_request(self, cfg: RequestConfig) -> RequestConfig:
53
- """
54
- Adds Basic Authentication credentials to the request configuration.
55
-
56
- Only modifies the configuration if both username and password are provided.
57
- """
58
- if self.username is not None and self.password is not None:
59
- cfg["auth"] = (self.username, self.password)
60
- return cfg
61
-
62
- def set_value(self, val: Optional[str]) -> None:
63
- """
64
- Sets value as the username
65
- """
66
- self.username = val
67
-
68
-
69
- class AuthBearer(AuthProvider):
70
- """
71
- Implements Bearer token authentication.
72
-
73
- Adds a Bearer token to the request's Authorization header following
74
- the OAuth 2.0 Bearer Token scheme.
75
- """
76
-
77
- val: Optional[str]
78
-
79
- def add_to_request(self, cfg: RequestConfig) -> RequestConfig:
80
- """
81
- Adds Bearer token to the Authorization header.
82
-
83
- Only modifies the configuration if a token value is provided.
84
- """
85
- if self.val is not None:
86
- headers = cfg.get("headers", dict())
87
- headers["Authorization"] = f"Bearer {self.val}"
88
- cfg["headers"] = headers
89
- return cfg
90
-
91
- def set_value(self, val: Optional[str]) -> None:
92
- """
93
- Sets value as the bearer token
94
- """
95
- self.val = val
96
-
97
-
98
- class AuthKeyQuery(AuthProvider):
99
- """
100
- Implements query parameter-based authentication.
101
-
102
- Adds an authentication token or key as a query parameter with a
103
- configurable parameter name.
104
- """
105
-
106
- query_name: str
107
- val: Optional[str]
108
-
109
- def add_to_request(self, cfg: RequestConfig) -> RequestConfig:
110
- """
111
- Adds authentication value as a query parameter.
112
-
113
- Only modifies the configuration if a value is provided.
114
- """
115
- if self.val is not None:
116
- params = cfg.get("params", dict())
117
- params[self.query_name] = self.val
118
- cfg["params"] = params
119
- return cfg
120
-
121
- def set_value(self, val: Optional[str]) -> None:
122
- """
123
- Sets value as the key
124
- """
125
- self.val = val
126
-
127
-
128
- class AuthKeyHeader(AuthProvider):
129
- """
130
- Implements header-based authentication.
131
-
132
- Adds an authentication token or key as a custom header with a
133
- configurable header name.
134
- """
135
-
136
- header_name: str
137
- val: Optional[str]
138
-
139
- def add_to_request(self, cfg: RequestConfig) -> RequestConfig:
140
- """
141
- Adds authentication value as a custom header.
142
-
143
- Only modifies the configuration if a value is provided.
144
- """
145
- if self.val is not None:
146
- headers = cfg.get("headers", {})
147
- headers[self.header_name] = self.val
148
- cfg["headers"] = headers
149
- return cfg
150
-
151
- def set_value(self, val: Optional[str]) -> None:
152
- """
153
- Sets value as the key
154
- """
155
- self.val = val
156
-
157
-
158
- class AuthKeyCookie(AuthProvider):
159
- """
160
- Implements cookie-based authentication.
161
-
162
- Adds an authentication token or key as a cookie with a
163
- configurable cookie name.
164
- """
165
-
166
- cookie_name: str
167
- val: Optional[str]
168
-
169
- def add_to_request(self, cfg: RequestConfig) -> RequestConfig:
170
- """
171
- Adds authentication value as a cookie.
172
-
173
- Only modifies the configuration if a value is provided.
174
- """
175
- if self.val is not None:
176
- cookies = cfg.get("cookies", dict())
177
- cookies[self.cookie_name] = self.val
178
- cfg["cookies"] = cookies
179
- return cfg
180
-
181
- def set_value(self, val: Optional[str]) -> None:
182
- """
183
- Sets value as the key
184
- """
185
- self.val = val
186
-
187
-
188
- class OAuth2PasswordForm(TypedDict, total=True):
189
- """
190
- OAuth2 authentication form for a password flow
191
-
192
- Details:
193
- https://datatracker.ietf.org/doc/html/rfc6749#section-4.3
194
- """
195
-
196
- username: str
197
- password: str
198
- client_id: Optional[str]
199
- client_secret: Optional[str]
200
- grant_type: Optional[str]
201
- scope: Optional[List[str]]
202
-
203
-
204
- class OAuth2ClientCredentialsForm(TypedDict, total=True):
205
- """
206
- OAuth2 authentication form for a client credentials flow
207
-
208
- Details:
209
- https://datatracker.ietf.org/doc/html/rfc6749#section-4.4
210
- """
211
-
212
- client_id: str
213
- client_secret: str
214
- grant_type: Optional[str]
215
- scope: Optional[List[str]]
216
-
217
-
218
- GrantType = Literal["password", "client_credentials"]
219
- CredentialsLocation = Literal["request_body", "basic_authorization_header"]
220
- BodyContent = Literal["form", "json"]
221
-
222
-
223
- class OAuth2(AuthProvider):
224
- """
225
- Implements OAuth2 token retrieval and refreshing.
226
- Currently supports `password` and `client_credentials`
227
- grant types.
228
- """
229
-
230
- # OAuth2 provider configuration
231
- token_url: str
232
- access_token_pointer: str
233
- expires_in_pointer: str
234
- credentials_location: CredentialsLocation
235
- body_content: BodyContent
236
- request_mutator: AuthProvider
237
-
238
- # OAuth2 access token request values
239
- grant_type: GrantType
240
- username: Optional[str] = None
241
- password: Optional[str] = None
242
- client_id: Optional[str] = None
243
- client_secret: Optional[str] = None
244
- scope: Optional[List[str]] = None
245
-
246
- # access_token storage
247
- access_token: Optional[str] = None
248
- expires_at: Optional[datetime.datetime] = None
249
-
250
- def _refresh(self) -> Tuple[str, datetime.datetime]:
251
- req_cfg: Dict[str, Any] = {"url": self.token_url}
252
- req_data: Dict[str, Any] = {"grant_type": self.grant_type}
253
-
254
- # add client credentials
255
- if self.client_id is not None or self.client_secret is not None:
256
- if self.credentials_location == "basic_authorization_header":
257
- req_cfg["auth"] = (self.client_id, self.client_secret)
258
- else:
259
- req_data["client_id"] = self.client_id
260
- req_data["client_secret"] = self.client_secret
261
-
262
- # construct request data
263
- if self.username is not None:
264
- req_data["username"] = self.username
265
- if self.password is not None:
266
- req_data["password"] = self.password
267
- if self.scope is not None:
268
- req_data["scope"] = " ".join(self.scope)
269
-
270
- if self.body_content == "json":
271
- req_cfg["json"] = req_data
272
- req_cfg["headers"] = {"content-type": "application/json"}
273
- else:
274
- req_cfg["data"] = req_data
275
- req_cfg["headers"] = {"content-type": "application/x-www-form-urlencoded"}
276
-
277
- # make access token request
278
- token_res = httpx.post(**req_cfg)
279
- token_res.raise_for_status()
280
-
281
- # retrieve access token & optional expiry seconds
282
- token_res_json: Dict[str, Any] = token_res.json()
283
- access_token = str(
284
- jsonpointer.resolve_pointer(token_res_json, self.access_token_pointer)
285
- )
286
-
287
- expires_in_secs = jsonpointer.resolve_pointer(
288
- token_res_json, self.expires_in_pointer
289
- )
290
- if not isinstance(expires_in_secs, int):
291
- expires_in_secs = 600
292
- expires_at = datetime.datetime.now() + datetime.timedelta(
293
- seconds=(
294
- expires_in_secs - 60
295
- ) # subtract a minute from the expiry as a buffer
296
- )
297
-
298
- return (access_token, expires_at)
299
-
300
- def add_to_request(self, cfg: RequestConfig) -> RequestConfig:
301
- token_expired = (
302
- self.expires_at is not None and self.expires_at <= datetime.datetime.now()
303
- )
304
-
305
- if self.access_token is None or token_expired:
306
- access_token, expires_at = self._refresh()
307
- self.expires_at = expires_at
308
- self.access_token = access_token
309
-
310
- self.request_mutator.set_value(self.access_token)
311
- return self.request_mutator.add_to_request(cfg)
312
-
313
- def set_value(self, _val: Optional[str]) -> None:
314
- raise NotImplementedError("an OAuth2 auth provider cannot be a request_mutator")