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.
- magic_hour/README.md +34 -0
- magic_hour/__init__.py +1 -1
- magic_hour/client.py +8 -17
- magic_hour/environment.py +13 -1
- magic_hour/helpers/__init__.py +4 -0
- magic_hour/helpers/download.py +77 -0
- magic_hour/helpers/logger.py +8 -0
- magic_hour/resources/v1/README.md +32 -0
- magic_hour/resources/v1/ai_clothes_changer/README.md +94 -5
- magic_hour/resources/v1/ai_clothes_changer/client.py +161 -16
- magic_hour/resources/v1/ai_face_editor/README.md +195 -0
- magic_hour/resources/v1/ai_face_editor/__init__.py +4 -0
- magic_hour/resources/v1/ai_face_editor/client.py +324 -0
- magic_hour/resources/v1/ai_gif_generator/README.md +116 -0
- magic_hour/resources/v1/ai_gif_generator/__init__.py +4 -0
- magic_hour/resources/v1/ai_gif_generator/client.py +257 -0
- magic_hour/resources/v1/ai_headshot_generator/README.md +81 -3
- magic_hour/resources/v1/ai_headshot_generator/client.py +167 -18
- magic_hour/resources/v1/ai_image_editor/README.md +125 -0
- magic_hour/resources/v1/ai_image_editor/__init__.py +4 -0
- magic_hour/resources/v1/ai_image_editor/client.py +290 -0
- magic_hour/resources/v1/ai_image_generator/README.md +99 -5
- magic_hour/resources/v1/ai_image_generator/client.py +170 -24
- magic_hour/resources/v1/ai_image_upscaler/README.md +89 -3
- magic_hour/resources/v1/ai_image_upscaler/client.py +173 -20
- magic_hour/resources/v1/ai_meme_generator/README.md +129 -0
- magic_hour/resources/v1/ai_meme_generator/__init__.py +4 -0
- magic_hour/resources/v1/ai_meme_generator/client.py +253 -0
- magic_hour/resources/v1/ai_photo_editor/README.md +119 -4
- magic_hour/resources/v1/ai_photo_editor/client.py +199 -18
- magic_hour/resources/v1/ai_qr_code_generator/README.md +84 -3
- magic_hour/resources/v1/ai_qr_code_generator/client.py +140 -18
- magic_hour/resources/v1/ai_talking_photo/README.md +137 -0
- magic_hour/resources/v1/ai_talking_photo/__init__.py +4 -0
- magic_hour/resources/v1/ai_talking_photo/client.py +326 -0
- magic_hour/resources/v1/ai_voice_cloner/README.md +62 -0
- magic_hour/resources/v1/ai_voice_cloner/__init__.py +4 -0
- magic_hour/resources/v1/ai_voice_cloner/client.py +272 -0
- magic_hour/resources/v1/ai_voice_generator/README.md +112 -0
- magic_hour/resources/v1/ai_voice_generator/__init__.py +4 -0
- magic_hour/resources/v1/ai_voice_generator/client.py +241 -0
- magic_hour/resources/v1/animation/README.md +128 -6
- magic_hour/resources/v1/animation/client.py +247 -22
- magic_hour/resources/v1/audio_projects/README.md +135 -0
- magic_hour/resources/v1/audio_projects/__init__.py +12 -0
- magic_hour/resources/v1/audio_projects/client.py +310 -0
- magic_hour/resources/v1/audio_projects/client_test.py +520 -0
- magic_hour/resources/v1/auto_subtitle_generator/README.md +128 -0
- magic_hour/resources/v1/auto_subtitle_generator/__init__.py +4 -0
- magic_hour/resources/v1/auto_subtitle_generator/client.py +346 -0
- magic_hour/resources/v1/client.py +75 -1
- magic_hour/resources/v1/face_detection/README.md +157 -0
- magic_hour/resources/v1/face_detection/__init__.py +12 -0
- magic_hour/resources/v1/face_detection/client.py +380 -0
- magic_hour/resources/v1/face_swap/README.md +137 -9
- magic_hour/resources/v1/face_swap/client.py +329 -38
- magic_hour/resources/v1/face_swap_photo/README.md +118 -3
- magic_hour/resources/v1/face_swap_photo/client.py +199 -14
- magic_hour/resources/v1/files/README.md +39 -0
- magic_hour/resources/v1/files/client.py +351 -1
- magic_hour/resources/v1/files/client_test.py +414 -0
- magic_hour/resources/v1/files/upload_urls/README.md +38 -17
- magic_hour/resources/v1/files/upload_urls/client.py +38 -34
- magic_hour/resources/v1/image_background_remover/README.md +96 -5
- magic_hour/resources/v1/image_background_remover/client.py +151 -16
- magic_hour/resources/v1/image_projects/README.md +82 -10
- magic_hour/resources/v1/image_projects/__init__.py +10 -2
- magic_hour/resources/v1/image_projects/client.py +154 -16
- magic_hour/resources/v1/image_projects/client_test.py +527 -0
- magic_hour/resources/v1/image_to_video/README.md +96 -11
- magic_hour/resources/v1/image_to_video/client.py +282 -38
- magic_hour/resources/v1/lip_sync/README.md +112 -9
- magic_hour/resources/v1/lip_sync/client.py +288 -34
- magic_hour/resources/v1/photo_colorizer/README.md +107 -0
- magic_hour/resources/v1/photo_colorizer/__init__.py +4 -0
- magic_hour/resources/v1/photo_colorizer/client.py +248 -0
- magic_hour/resources/v1/text_to_video/README.md +96 -7
- magic_hour/resources/v1/text_to_video/client.py +204 -18
- magic_hour/resources/v1/video_projects/README.md +81 -9
- magic_hour/resources/v1/video_projects/__init__.py +10 -2
- magic_hour/resources/v1/video_projects/client.py +151 -14
- magic_hour/resources/v1/video_projects/client_test.py +527 -0
- magic_hour/resources/v1/video_to_video/README.md +119 -15
- magic_hour/resources/v1/video_to_video/client.py +299 -46
- magic_hour/types/models/__init__.py +92 -56
- magic_hour/types/models/v1_ai_clothes_changer_create_response.py +33 -0
- magic_hour/types/models/v1_ai_face_editor_create_response.py +33 -0
- magic_hour/types/models/v1_ai_gif_generator_create_response.py +33 -0
- magic_hour/types/models/v1_ai_headshot_generator_create_response.py +33 -0
- magic_hour/types/models/v1_ai_image_editor_create_response.py +33 -0
- magic_hour/types/models/v1_ai_image_generator_create_response.py +33 -0
- magic_hour/types/models/v1_ai_image_upscaler_create_response.py +33 -0
- magic_hour/types/models/v1_ai_meme_generator_create_response.py +33 -0
- magic_hour/types/models/v1_ai_photo_editor_create_response.py +33 -0
- magic_hour/types/models/v1_ai_qr_code_generator_create_response.py +33 -0
- magic_hour/types/models/v1_ai_talking_photo_create_response.py +35 -0
- magic_hour/types/models/v1_ai_voice_cloner_create_response.py +27 -0
- magic_hour/types/models/v1_ai_voice_generator_create_response.py +27 -0
- magic_hour/types/models/v1_animation_create_response.py +35 -0
- magic_hour/types/models/v1_audio_projects_get_response.py +72 -0
- magic_hour/types/models/v1_audio_projects_get_response_downloads_item.py +19 -0
- magic_hour/types/models/{get_v1_image_projects_id_response_error.py → v1_audio_projects_get_response_error.py} +2 -2
- magic_hour/types/models/v1_auto_subtitle_generator_create_response.py +35 -0
- magic_hour/types/models/v1_face_detection_create_response.py +25 -0
- magic_hour/types/models/v1_face_detection_get_response.py +45 -0
- magic_hour/types/models/v1_face_detection_get_response_faces_item.py +25 -0
- magic_hour/types/models/v1_face_swap_create_response.py +35 -0
- magic_hour/types/models/v1_face_swap_photo_create_response.py +33 -0
- magic_hour/types/models/v1_files_upload_urls_create_response.py +24 -0
- magic_hour/types/models/{post_v1_files_upload_urls_response_items_item.py → v1_files_upload_urls_create_response_items_item.py} +2 -2
- magic_hour/types/models/v1_image_background_remover_create_response.py +33 -0
- magic_hour/types/models/{get_v1_image_projects_id_response.py → v1_image_projects_get_response.py} +20 -18
- magic_hour/types/models/{get_v1_video_projects_id_response_downloads_item.py → v1_image_projects_get_response_downloads_item.py} +1 -1
- magic_hour/types/models/{get_v1_video_projects_id_response_error.py → v1_image_projects_get_response_error.py} +2 -2
- magic_hour/types/models/v1_image_to_video_create_response.py +35 -0
- magic_hour/types/models/v1_lip_sync_create_response.py +35 -0
- magic_hour/types/models/v1_photo_colorizer_create_response.py +33 -0
- magic_hour/types/models/v1_text_to_video_create_response.py +35 -0
- magic_hour/types/models/{get_v1_video_projects_id_response.py → v1_video_projects_get_response.py} +26 -23
- magic_hour/types/models/{get_v1_video_projects_id_response_download.py → v1_video_projects_get_response_download.py} +1 -1
- magic_hour/types/models/{get_v1_image_projects_id_response_downloads_item.py → v1_video_projects_get_response_downloads_item.py} +1 -1
- magic_hour/types/models/v1_video_projects_get_response_error.py +25 -0
- magic_hour/types/models/v1_video_to_video_create_response.py +35 -0
- magic_hour/types/params/__init__.py +422 -176
- magic_hour/types/params/v1_ai_clothes_changer_create_body.py +40 -0
- magic_hour/types/params/v1_ai_clothes_changer_create_body_assets.py +58 -0
- magic_hour/types/params/v1_ai_clothes_changer_generate_body_assets.py +33 -0
- magic_hour/types/params/v1_ai_face_editor_create_body.py +52 -0
- magic_hour/types/params/v1_ai_face_editor_create_body_assets.py +33 -0
- magic_hour/types/params/v1_ai_face_editor_create_body_style.py +137 -0
- magic_hour/types/params/v1_ai_face_editor_generate_body_assets.py +17 -0
- magic_hour/types/params/v1_ai_gif_generator_create_body.py +47 -0
- magic_hour/types/params/{post_v1_ai_image_generator_body_style.py → v1_ai_gif_generator_create_body_style.py} +5 -5
- magic_hour/types/params/v1_ai_headshot_generator_create_body.py +49 -0
- magic_hour/types/params/v1_ai_headshot_generator_create_body_assets.py +33 -0
- magic_hour/types/params/v1_ai_headshot_generator_create_body_style.py +27 -0
- magic_hour/types/params/v1_ai_headshot_generator_generate_body_assets.py +17 -0
- magic_hour/types/params/v1_ai_image_editor_create_body.py +49 -0
- magic_hour/types/params/v1_ai_image_editor_create_body_assets.py +47 -0
- magic_hour/types/params/v1_ai_image_editor_create_body_style.py +41 -0
- magic_hour/types/params/v1_ai_image_editor_generate_body_assets.py +28 -0
- magic_hour/types/params/{post_v1_ai_image_generator_body.py → v1_ai_image_generator_create_body.py} +17 -11
- magic_hour/types/params/v1_ai_image_generator_create_body_style.py +127 -0
- magic_hour/types/params/v1_ai_image_upscaler_create_body.py +59 -0
- magic_hour/types/params/v1_ai_image_upscaler_create_body_assets.py +33 -0
- magic_hour/types/params/{post_v1_ai_image_upscaler_body_style.py → v1_ai_image_upscaler_create_body_style.py} +4 -4
- magic_hour/types/params/v1_ai_image_upscaler_generate_body_assets.py +17 -0
- magic_hour/types/params/v1_ai_meme_generator_create_body.py +37 -0
- magic_hour/types/params/v1_ai_meme_generator_create_body_style.py +73 -0
- magic_hour/types/params/{post_v1_ai_photo_editor_body.py → v1_ai_photo_editor_create_body.py} +15 -15
- magic_hour/types/params/v1_ai_photo_editor_create_body_assets.py +33 -0
- magic_hour/types/params/{post_v1_ai_photo_editor_body_style.py → v1_ai_photo_editor_create_body_style.py} +20 -4
- magic_hour/types/params/v1_ai_photo_editor_generate_body_assets.py +17 -0
- magic_hour/types/params/v1_ai_qr_code_generator_create_body.py +45 -0
- magic_hour/types/params/{post_v1_ai_qr_code_generator_body_style.py → v1_ai_qr_code_generator_create_body_style.py} +4 -4
- magic_hour/types/params/v1_ai_talking_photo_create_body.py +68 -0
- magic_hour/types/params/v1_ai_talking_photo_create_body_assets.py +46 -0
- magic_hour/types/params/v1_ai_talking_photo_create_body_style.py +44 -0
- magic_hour/types/params/v1_ai_talking_photo_generate_body_assets.py +26 -0
- magic_hour/types/params/v1_ai_voice_cloner_create_body.py +49 -0
- magic_hour/types/params/v1_ai_voice_cloner_create_body_assets.py +33 -0
- magic_hour/types/params/v1_ai_voice_cloner_create_body_style.py +28 -0
- magic_hour/types/params/v1_ai_voice_cloner_generate_body_assets.py +28 -0
- magic_hour/types/params/v1_ai_voice_generator_create_body.py +40 -0
- magic_hour/types/params/v1_ai_voice_generator_create_body_style.py +440 -0
- magic_hour/types/params/{post_v1_animation_body.py → v1_animation_create_body.py} +16 -16
- magic_hour/types/params/{post_v1_animation_body_assets.py → v1_animation_create_body_assets.py} +15 -5
- magic_hour/types/params/{post_v1_animation_body_style.py → v1_animation_create_body_style.py} +13 -10
- magic_hour/types/params/v1_animation_generate_body_assets.py +39 -0
- magic_hour/types/params/v1_auto_subtitle_generator_create_body.py +78 -0
- magic_hour/types/params/v1_auto_subtitle_generator_create_body_assets.py +33 -0
- magic_hour/types/params/v1_auto_subtitle_generator_create_body_style.py +56 -0
- magic_hour/types/params/v1_auto_subtitle_generator_create_body_style_custom_config.py +86 -0
- magic_hour/types/params/v1_auto_subtitle_generator_generate_body_assets.py +17 -0
- magic_hour/types/params/v1_face_detection_create_body.py +44 -0
- magic_hour/types/params/v1_face_detection_create_body_assets.py +33 -0
- magic_hour/types/params/v1_face_detection_generate_body_assets.py +17 -0
- magic_hour/types/params/v1_face_swap_create_body.py +92 -0
- magic_hour/types/params/v1_face_swap_create_body_assets.py +91 -0
- magic_hour/types/params/v1_face_swap_create_body_assets_face_mappings_item.py +44 -0
- magic_hour/types/params/v1_face_swap_create_body_style.py +33 -0
- magic_hour/types/params/v1_face_swap_generate_body_assets.py +56 -0
- magic_hour/types/params/v1_face_swap_generate_body_assets_face_mappings_item.py +25 -0
- magic_hour/types/params/v1_face_swap_photo_create_body.py +40 -0
- magic_hour/types/params/v1_face_swap_photo_create_body_assets.py +76 -0
- magic_hour/types/params/v1_face_swap_photo_create_body_assets_face_mappings_item.py +44 -0
- magic_hour/types/params/v1_face_swap_photo_generate_body_assets.py +47 -0
- magic_hour/types/params/v1_face_swap_photo_generate_body_assets_face_mappings_item.py +25 -0
- magic_hour/types/params/v1_files_upload_urls_create_body.py +36 -0
- magic_hour/types/params/v1_files_upload_urls_create_body_items_item.py +38 -0
- magic_hour/types/params/v1_image_background_remover_create_body.py +40 -0
- magic_hour/types/params/v1_image_background_remover_create_body_assets.py +49 -0
- magic_hour/types/params/v1_image_background_remover_generate_body_assets.py +27 -0
- magic_hour/types/params/v1_image_to_video_create_body.py +101 -0
- magic_hour/types/params/v1_image_to_video_create_body_assets.py +33 -0
- magic_hour/types/params/v1_image_to_video_create_body_style.py +53 -0
- magic_hour/types/params/v1_image_to_video_generate_body_assets.py +17 -0
- magic_hour/types/params/v1_lip_sync_create_body.py +100 -0
- magic_hour/types/params/{post_v1_lip_sync_body_assets.py → v1_lip_sync_create_body_assets.py} +15 -5
- magic_hour/types/params/v1_lip_sync_create_body_style.py +37 -0
- magic_hour/types/params/v1_lip_sync_generate_body_assets.py +36 -0
- magic_hour/types/params/v1_photo_colorizer_create_body.py +40 -0
- magic_hour/types/params/v1_photo_colorizer_create_body_assets.py +33 -0
- magic_hour/types/params/v1_photo_colorizer_generate_body_assets.py +17 -0
- magic_hour/types/params/v1_text_to_video_create_body.py +78 -0
- magic_hour/types/params/v1_text_to_video_create_body_style.py +43 -0
- magic_hour/types/params/v1_video_to_video_create_body.py +101 -0
- magic_hour/types/params/{post_v1_video_to_video_body_assets.py → v1_video_to_video_create_body_assets.py} +9 -4
- magic_hour/types/params/{post_v1_video_to_video_body_style.py → v1_video_to_video_create_body_style.py} +68 -26
- magic_hour/types/params/v1_video_to_video_generate_body_assets.py +27 -0
- magic_hour-0.44.0.dist-info/METADATA +328 -0
- magic_hour-0.44.0.dist-info/RECORD +231 -0
- magic_hour/core/__init__.py +0 -52
- magic_hour/core/api_error.py +0 -56
- magic_hour/core/auth.py +0 -314
- magic_hour/core/base_client.py +0 -618
- magic_hour/core/binary_response.py +0 -23
- magic_hour/core/query.py +0 -106
- magic_hour/core/request.py +0 -156
- magic_hour/core/response.py +0 -293
- magic_hour/core/type_utils.py +0 -28
- magic_hour/core/utils.py +0 -55
- magic_hour/types/models/post_v1_ai_clothes_changer_response.py +0 -25
- magic_hour/types/models/post_v1_ai_headshot_generator_response.py +0 -25
- magic_hour/types/models/post_v1_ai_image_generator_response.py +0 -25
- magic_hour/types/models/post_v1_ai_image_upscaler_response.py +0 -25
- magic_hour/types/models/post_v1_ai_photo_editor_response.py +0 -25
- magic_hour/types/models/post_v1_ai_qr_code_generator_response.py +0 -25
- magic_hour/types/models/post_v1_animation_response.py +0 -25
- magic_hour/types/models/post_v1_face_swap_photo_response.py +0 -25
- magic_hour/types/models/post_v1_face_swap_response.py +0 -25
- magic_hour/types/models/post_v1_files_upload_urls_response.py +0 -21
- magic_hour/types/models/post_v1_image_background_remover_response.py +0 -25
- magic_hour/types/models/post_v1_image_to_video_response.py +0 -25
- magic_hour/types/models/post_v1_lip_sync_response.py +0 -25
- magic_hour/types/models/post_v1_text_to_video_response.py +0 -25
- magic_hour/types/models/post_v1_video_to_video_response.py +0 -25
- magic_hour/types/params/post_v1_ai_clothes_changer_body.py +0 -40
- magic_hour/types/params/post_v1_ai_clothes_changer_body_assets.py +0 -45
- magic_hour/types/params/post_v1_ai_headshot_generator_body.py +0 -40
- magic_hour/types/params/post_v1_ai_headshot_generator_body_assets.py +0 -28
- magic_hour/types/params/post_v1_ai_image_upscaler_body.py +0 -57
- magic_hour/types/params/post_v1_ai_image_upscaler_body_assets.py +0 -28
- magic_hour/types/params/post_v1_ai_photo_editor_body_assets.py +0 -28
- magic_hour/types/params/post_v1_ai_qr_code_generator_body.py +0 -45
- magic_hour/types/params/post_v1_face_swap_body.py +0 -72
- magic_hour/types/params/post_v1_face_swap_body_assets.py +0 -52
- magic_hour/types/params/post_v1_face_swap_photo_body.py +0 -40
- magic_hour/types/params/post_v1_face_swap_photo_body_assets.py +0 -36
- magic_hour/types/params/post_v1_files_upload_urls_body.py +0 -31
- magic_hour/types/params/post_v1_files_upload_urls_body_items_item.py +0 -38
- magic_hour/types/params/post_v1_image_background_remover_body.py +0 -40
- magic_hour/types/params/post_v1_image_background_remover_body_assets.py +0 -28
- magic_hour/types/params/post_v1_image_to_video_body.py +0 -73
- magic_hour/types/params/post_v1_image_to_video_body_assets.py +0 -28
- magic_hour/types/params/post_v1_image_to_video_body_style.py +0 -37
- magic_hour/types/params/post_v1_lip_sync_body.py +0 -80
- magic_hour/types/params/post_v1_text_to_video_body.py +0 -57
- magic_hour/types/params/post_v1_text_to_video_body_style.py +0 -28
- magic_hour/types/params/post_v1_video_to_video_body.py +0 -93
- magic_hour-0.9.5.dist-info/METADATA +0 -133
- magic_hour-0.9.5.dist-info/RECORD +0 -132
- {magic_hour-0.9.5.dist-info → magic_hour-0.44.0.dist-info}/LICENSE +0 -0
- {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,,
|
magic_hour/core/__init__.py
DELETED
|
@@ -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
|
-
]
|
magic_hour/core/api_error.py
DELETED
|
@@ -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")
|