fal 1.19.1__tar.gz → 1.19.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of fal might be problematic. Click here for more details.

Files changed (184) hide show
  1. {fal-1.19.1/fal.egg-info → fal-1.19.2}/PKG-INFO +1 -1
  2. {fal-1.19.1 → fal-1.19.2/fal.egg-info}/PKG-INFO +1 -1
  3. {fal-1.19.1 → fal-1.19.2}/src/fal/_fal_version.py +2 -2
  4. fal-1.19.2/src/fal/toolkit/audio/audio.py +12 -0
  5. {fal-1.19.1 → fal-1.19.2}/src/fal/toolkit/file/file.py +7 -0
  6. {fal-1.19.1 → fal-1.19.2}/src/fal/toolkit/image/image.py +15 -1
  7. fal-1.19.2/src/fal/toolkit/video/video.py +12 -0
  8. {fal-1.19.1 → fal-1.19.2}/tests/toolkit/file_test.py +25 -0
  9. fal-1.19.1/src/fal/toolkit/audio/audio.py +0 -5
  10. fal-1.19.1/src/fal/toolkit/video/video.py +0 -5
  11. {fal-1.19.1 → fal-1.19.2}/.gitignore +0 -0
  12. {fal-1.19.1 → fal-1.19.2}/Makefile +0 -0
  13. {fal-1.19.1 → fal-1.19.2}/README.md +0 -0
  14. {fal-1.19.1 → fal-1.19.2}/docs/conf.py +0 -0
  15. {fal-1.19.1 → fal-1.19.2}/docs/index.rst +0 -0
  16. {fal-1.19.1 → fal-1.19.2}/fal.egg-info/SOURCES.txt +0 -0
  17. {fal-1.19.1 → fal-1.19.2}/fal.egg-info/dependency_links.txt +0 -0
  18. {fal-1.19.1 → fal-1.19.2}/fal.egg-info/entry_points.txt +0 -0
  19. {fal-1.19.1 → fal-1.19.2}/fal.egg-info/requires.txt +0 -0
  20. {fal-1.19.1 → fal-1.19.2}/fal.egg-info/top_level.txt +0 -0
  21. {fal-1.19.1 → fal-1.19.2}/openapi-fal-rest/README.md +0 -0
  22. {fal-1.19.1 → fal-1.19.2}/openapi-fal-rest/openapi_fal_rest/__init__.py +0 -0
  23. {fal-1.19.1 → fal-1.19.2}/openapi-fal-rest/openapi_fal_rest/api/__init__.py +0 -0
  24. {fal-1.19.1 → fal-1.19.2}/openapi-fal-rest/openapi_fal_rest/api/applications/__init__.py +0 -0
  25. {fal-1.19.1 → fal-1.19.2}/openapi-fal-rest/openapi_fal_rest/api/applications/app_metadata.py +0 -0
  26. {fal-1.19.1 → fal-1.19.2}/openapi-fal-rest/openapi_fal_rest/api/billing/__init__.py +0 -0
  27. {fal-1.19.1 → fal-1.19.2}/openapi-fal-rest/openapi_fal_rest/api/billing/get_user_details.py +0 -0
  28. {fal-1.19.1 → fal-1.19.2}/openapi-fal-rest/openapi_fal_rest/api/comfy/__init__.py +0 -0
  29. {fal-1.19.1 → fal-1.19.2}/openapi-fal-rest/openapi_fal_rest/api/comfy/create_workflow.py +0 -0
  30. {fal-1.19.1 → fal-1.19.2}/openapi-fal-rest/openapi_fal_rest/api/comfy/delete_workflow.py +0 -0
  31. {fal-1.19.1 → fal-1.19.2}/openapi-fal-rest/openapi_fal_rest/api/comfy/get_workflow.py +0 -0
  32. {fal-1.19.1 → fal-1.19.2}/openapi-fal-rest/openapi_fal_rest/api/comfy/list_user_workflows.py +0 -0
  33. {fal-1.19.1 → fal-1.19.2}/openapi-fal-rest/openapi_fal_rest/api/comfy/update_workflow.py +0 -0
  34. {fal-1.19.1 → fal-1.19.2}/openapi-fal-rest/openapi_fal_rest/api/files/__init__.py +0 -0
  35. {fal-1.19.1 → fal-1.19.2}/openapi-fal-rest/openapi_fal_rest/api/files/check_dir_hash.py +0 -0
  36. {fal-1.19.1 → fal-1.19.2}/openapi-fal-rest/openapi_fal_rest/api/files/upload_local_file.py +0 -0
  37. {fal-1.19.1 → fal-1.19.2}/openapi-fal-rest/openapi_fal_rest/api/users/__init__.py +0 -0
  38. {fal-1.19.1 → fal-1.19.2}/openapi-fal-rest/openapi_fal_rest/api/users/get_current_user.py +0 -0
  39. {fal-1.19.1 → fal-1.19.2}/openapi-fal-rest/openapi_fal_rest/api/workflows/__init__.py +0 -0
  40. {fal-1.19.1 → fal-1.19.2}/openapi-fal-rest/openapi_fal_rest/api/workflows/create_workflow.py +0 -0
  41. {fal-1.19.1 → fal-1.19.2}/openapi-fal-rest/openapi_fal_rest/api/workflows/delete_workflow.py +0 -0
  42. {fal-1.19.1 → fal-1.19.2}/openapi-fal-rest/openapi_fal_rest/api/workflows/get_workflow.py +0 -0
  43. {fal-1.19.1 → fal-1.19.2}/openapi-fal-rest/openapi_fal_rest/api/workflows/list_user_workflows.py +0 -0
  44. {fal-1.19.1 → fal-1.19.2}/openapi-fal-rest/openapi_fal_rest/api/workflows/update_workflow.py +0 -0
  45. {fal-1.19.1 → fal-1.19.2}/openapi-fal-rest/openapi_fal_rest/client.py +0 -0
  46. {fal-1.19.1 → fal-1.19.2}/openapi-fal-rest/openapi_fal_rest/errors.py +0 -0
  47. {fal-1.19.1 → fal-1.19.2}/openapi-fal-rest/openapi_fal_rest/models/__init__.py +0 -0
  48. {fal-1.19.1 → fal-1.19.2}/openapi-fal-rest/openapi_fal_rest/models/app_metadata_response_app_metadata.py +0 -0
  49. {fal-1.19.1 → fal-1.19.2}/openapi-fal-rest/openapi_fal_rest/models/body_upload_local_file.py +0 -0
  50. {fal-1.19.1 → fal-1.19.2}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_detail.py +0 -0
  51. {fal-1.19.1 → fal-1.19.2}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_item.py +0 -0
  52. {fal-1.19.1 → fal-1.19.2}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_schema.py +0 -0
  53. {fal-1.19.1 → fal-1.19.2}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_schema_extra_data.py +0 -0
  54. {fal-1.19.1 → fal-1.19.2}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_schema_fal_inputs.py +0 -0
  55. {fal-1.19.1 → fal-1.19.2}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_schema_fal_inputs_dev_info.py +0 -0
  56. {fal-1.19.1 → fal-1.19.2}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_schema_prompt.py +0 -0
  57. {fal-1.19.1 → fal-1.19.2}/openapi-fal-rest/openapi_fal_rest/models/current_user.py +0 -0
  58. {fal-1.19.1 → fal-1.19.2}/openapi-fal-rest/openapi_fal_rest/models/customer_details.py +0 -0
  59. {fal-1.19.1 → fal-1.19.2}/openapi-fal-rest/openapi_fal_rest/models/hash_check.py +0 -0
  60. {fal-1.19.1 → fal-1.19.2}/openapi-fal-rest/openapi_fal_rest/models/http_validation_error.py +0 -0
  61. {fal-1.19.1 → fal-1.19.2}/openapi-fal-rest/openapi_fal_rest/models/lock_reason.py +0 -0
  62. {fal-1.19.1 → fal-1.19.2}/openapi-fal-rest/openapi_fal_rest/models/page_comfy_workflow_item.py +0 -0
  63. {fal-1.19.1 → fal-1.19.2}/openapi-fal-rest/openapi_fal_rest/models/page_workflow_item.py +0 -0
  64. {fal-1.19.1 → fal-1.19.2}/openapi-fal-rest/openapi_fal_rest/models/team_role.py +0 -0
  65. {fal-1.19.1 → fal-1.19.2}/openapi-fal-rest/openapi_fal_rest/models/typed_comfy_workflow.py +0 -0
  66. {fal-1.19.1 → fal-1.19.2}/openapi-fal-rest/openapi_fal_rest/models/typed_comfy_workflow_update.py +0 -0
  67. {fal-1.19.1 → fal-1.19.2}/openapi-fal-rest/openapi_fal_rest/models/typed_workflow.py +0 -0
  68. {fal-1.19.1 → fal-1.19.2}/openapi-fal-rest/openapi_fal_rest/models/typed_workflow_update.py +0 -0
  69. {fal-1.19.1 → fal-1.19.2}/openapi-fal-rest/openapi_fal_rest/models/user_member.py +0 -0
  70. {fal-1.19.1 → fal-1.19.2}/openapi-fal-rest/openapi_fal_rest/models/validation_error.py +0 -0
  71. {fal-1.19.1 → fal-1.19.2}/openapi-fal-rest/openapi_fal_rest/models/workflow_contents.py +0 -0
  72. {fal-1.19.1 → fal-1.19.2}/openapi-fal-rest/openapi_fal_rest/models/workflow_contents_metadata.py +0 -0
  73. {fal-1.19.1 → fal-1.19.2}/openapi-fal-rest/openapi_fal_rest/models/workflow_contents_nodes.py +0 -0
  74. {fal-1.19.1 → fal-1.19.2}/openapi-fal-rest/openapi_fal_rest/models/workflow_contents_output.py +0 -0
  75. {fal-1.19.1 → fal-1.19.2}/openapi-fal-rest/openapi_fal_rest/models/workflow_detail.py +0 -0
  76. {fal-1.19.1 → fal-1.19.2}/openapi-fal-rest/openapi_fal_rest/models/workflow_detail_contents.py +0 -0
  77. {fal-1.19.1 → fal-1.19.2}/openapi-fal-rest/openapi_fal_rest/models/workflow_item.py +0 -0
  78. {fal-1.19.1 → fal-1.19.2}/openapi-fal-rest/openapi_fal_rest/models/workflow_node.py +0 -0
  79. {fal-1.19.1 → fal-1.19.2}/openapi-fal-rest/openapi_fal_rest/models/workflow_node_type.py +0 -0
  80. {fal-1.19.1 → fal-1.19.2}/openapi-fal-rest/openapi_fal_rest/models/workflow_schema.py +0 -0
  81. {fal-1.19.1 → fal-1.19.2}/openapi-fal-rest/openapi_fal_rest/models/workflow_schema_input.py +0 -0
  82. {fal-1.19.1 → fal-1.19.2}/openapi-fal-rest/openapi_fal_rest/models/workflow_schema_output.py +0 -0
  83. {fal-1.19.1 → fal-1.19.2}/openapi-fal-rest/openapi_fal_rest/py.typed +0 -0
  84. {fal-1.19.1 → fal-1.19.2}/openapi-fal-rest/openapi_fal_rest/types.py +0 -0
  85. {fal-1.19.1 → fal-1.19.2}/openapi-fal-rest/pyproject.toml +0 -0
  86. {fal-1.19.1 → fal-1.19.2}/openapi_rest.config.yaml +0 -0
  87. {fal-1.19.1 → fal-1.19.2}/pyproject.toml +0 -0
  88. {fal-1.19.1 → fal-1.19.2}/setup.cfg +0 -0
  89. {fal-1.19.1 → fal-1.19.2}/src/fal/__init__.py +0 -0
  90. {fal-1.19.1 → fal-1.19.2}/src/fal/__main__.py +0 -0
  91. {fal-1.19.1 → fal-1.19.2}/src/fal/_serialization.py +0 -0
  92. {fal-1.19.1 → fal-1.19.2}/src/fal/_version.py +0 -0
  93. {fal-1.19.1 → fal-1.19.2}/src/fal/api.py +0 -0
  94. {fal-1.19.1 → fal-1.19.2}/src/fal/app.py +0 -0
  95. {fal-1.19.1 → fal-1.19.2}/src/fal/apps.py +0 -0
  96. {fal-1.19.1 → fal-1.19.2}/src/fal/auth/__init__.py +0 -0
  97. {fal-1.19.1 → fal-1.19.2}/src/fal/auth/auth0.py +0 -0
  98. {fal-1.19.1 → fal-1.19.2}/src/fal/auth/local.py +0 -0
  99. {fal-1.19.1 → fal-1.19.2}/src/fal/cli/__init__.py +0 -0
  100. {fal-1.19.1 → fal-1.19.2}/src/fal/cli/_utils.py +0 -0
  101. {fal-1.19.1 → fal-1.19.2}/src/fal/cli/api.py +0 -0
  102. {fal-1.19.1 → fal-1.19.2}/src/fal/cli/apps.py +0 -0
  103. {fal-1.19.1 → fal-1.19.2}/src/fal/cli/auth.py +0 -0
  104. {fal-1.19.1 → fal-1.19.2}/src/fal/cli/cli_nested_json.py +0 -0
  105. {fal-1.19.1 → fal-1.19.2}/src/fal/cli/create.py +0 -0
  106. {fal-1.19.1 → fal-1.19.2}/src/fal/cli/debug.py +0 -0
  107. {fal-1.19.1 → fal-1.19.2}/src/fal/cli/deploy.py +0 -0
  108. {fal-1.19.1 → fal-1.19.2}/src/fal/cli/doctor.py +0 -0
  109. {fal-1.19.1 → fal-1.19.2}/src/fal/cli/files.py +0 -0
  110. {fal-1.19.1 → fal-1.19.2}/src/fal/cli/keys.py +0 -0
  111. {fal-1.19.1 → fal-1.19.2}/src/fal/cli/main.py +0 -0
  112. {fal-1.19.1 → fal-1.19.2}/src/fal/cli/parser.py +0 -0
  113. {fal-1.19.1 → fal-1.19.2}/src/fal/cli/profile.py +0 -0
  114. {fal-1.19.1 → fal-1.19.2}/src/fal/cli/run.py +0 -0
  115. {fal-1.19.1 → fal-1.19.2}/src/fal/cli/runners.py +0 -0
  116. {fal-1.19.1 → fal-1.19.2}/src/fal/cli/secrets.py +0 -0
  117. {fal-1.19.1 → fal-1.19.2}/src/fal/cli/teams.py +0 -0
  118. {fal-1.19.1 → fal-1.19.2}/src/fal/config.py +0 -0
  119. {fal-1.19.1 → fal-1.19.2}/src/fal/console/__init__.py +0 -0
  120. {fal-1.19.1 → fal-1.19.2}/src/fal/console/icons.py +0 -0
  121. {fal-1.19.1 → fal-1.19.2}/src/fal/console/ux.py +0 -0
  122. {fal-1.19.1 → fal-1.19.2}/src/fal/container.py +0 -0
  123. {fal-1.19.1 → fal-1.19.2}/src/fal/exceptions/__init__.py +0 -0
  124. {fal-1.19.1 → fal-1.19.2}/src/fal/exceptions/_base.py +0 -0
  125. {fal-1.19.1 → fal-1.19.2}/src/fal/exceptions/_cuda.py +0 -0
  126. {fal-1.19.1 → fal-1.19.2}/src/fal/exceptions/auth.py +0 -0
  127. {fal-1.19.1 → fal-1.19.2}/src/fal/files.py +0 -0
  128. {fal-1.19.1 → fal-1.19.2}/src/fal/flags.py +0 -0
  129. {fal-1.19.1 → fal-1.19.2}/src/fal/logging/__init__.py +0 -0
  130. {fal-1.19.1 → fal-1.19.2}/src/fal/logging/isolate.py +0 -0
  131. {fal-1.19.1 → fal-1.19.2}/src/fal/logging/style.py +0 -0
  132. {fal-1.19.1 → fal-1.19.2}/src/fal/logging/trace.py +0 -0
  133. {fal-1.19.1 → fal-1.19.2}/src/fal/logging/user.py +0 -0
  134. {fal-1.19.1 → fal-1.19.2}/src/fal/project.py +0 -0
  135. {fal-1.19.1 → fal-1.19.2}/src/fal/py.typed +0 -0
  136. {fal-1.19.1 → fal-1.19.2}/src/fal/rest_client.py +0 -0
  137. {fal-1.19.1 → fal-1.19.2}/src/fal/sdk.py +0 -0
  138. {fal-1.19.1 → fal-1.19.2}/src/fal/sync.py +0 -0
  139. {fal-1.19.1 → fal-1.19.2}/src/fal/toolkit/__init__.py +0 -0
  140. {fal-1.19.1 → fal-1.19.2}/src/fal/toolkit/audio/__init__.py +0 -0
  141. {fal-1.19.1 → fal-1.19.2}/src/fal/toolkit/exceptions.py +0 -0
  142. {fal-1.19.1 → fal-1.19.2}/src/fal/toolkit/file/__init__.py +0 -0
  143. {fal-1.19.1 → fal-1.19.2}/src/fal/toolkit/file/providers/fal.py +0 -0
  144. {fal-1.19.1 → fal-1.19.2}/src/fal/toolkit/file/providers/gcp.py +0 -0
  145. {fal-1.19.1 → fal-1.19.2}/src/fal/toolkit/file/providers/r2.py +0 -0
  146. {fal-1.19.1 → fal-1.19.2}/src/fal/toolkit/file/providers/s3.py +0 -0
  147. {fal-1.19.1 → fal-1.19.2}/src/fal/toolkit/file/types.py +0 -0
  148. {fal-1.19.1 → fal-1.19.2}/src/fal/toolkit/image/__init__.py +0 -0
  149. {fal-1.19.1 → fal-1.19.2}/src/fal/toolkit/image/nsfw_filter/__init__.py +0 -0
  150. {fal-1.19.1 → fal-1.19.2}/src/fal/toolkit/image/nsfw_filter/env.py +0 -0
  151. {fal-1.19.1 → fal-1.19.2}/src/fal/toolkit/image/nsfw_filter/inference.py +0 -0
  152. {fal-1.19.1 → fal-1.19.2}/src/fal/toolkit/image/nsfw_filter/model.py +0 -0
  153. {fal-1.19.1 → fal-1.19.2}/src/fal/toolkit/image/nsfw_filter/requirements.txt +0 -0
  154. {fal-1.19.1 → fal-1.19.2}/src/fal/toolkit/image/safety_checker.py +0 -0
  155. {fal-1.19.1 → fal-1.19.2}/src/fal/toolkit/optimize.py +0 -0
  156. {fal-1.19.1 → fal-1.19.2}/src/fal/toolkit/types.py +0 -0
  157. {fal-1.19.1 → fal-1.19.2}/src/fal/toolkit/utils/__init__.py +0 -0
  158. {fal-1.19.1 → fal-1.19.2}/src/fal/toolkit/utils/download_utils.py +0 -0
  159. {fal-1.19.1 → fal-1.19.2}/src/fal/toolkit/utils/endpoint.py +0 -0
  160. {fal-1.19.1 → fal-1.19.2}/src/fal/toolkit/utils/retry.py +0 -0
  161. {fal-1.19.1 → fal-1.19.2}/src/fal/toolkit/video/__init__.py +0 -0
  162. {fal-1.19.1 → fal-1.19.2}/src/fal/utils.py +0 -0
  163. {fal-1.19.1 → fal-1.19.2}/src/fal/workflows.py +0 -0
  164. {fal-1.19.1 → fal-1.19.2}/tests/__init__.py +0 -0
  165. {fal-1.19.1 → fal-1.19.2}/tests/assets/cat.png +0 -0
  166. {fal-1.19.1 → fal-1.19.2}/tests/cli/__init__.py +0 -0
  167. {fal-1.19.1 → fal-1.19.2}/tests/cli/test_apps.py +0 -0
  168. {fal-1.19.1 → fal-1.19.2}/tests/cli/test_auth.py +0 -0
  169. {fal-1.19.1 → fal-1.19.2}/tests/cli/test_deploy.py +0 -0
  170. {fal-1.19.1 → fal-1.19.2}/tests/cli/test_keys.py +0 -0
  171. {fal-1.19.1 → fal-1.19.2}/tests/cli/test_run.py +0 -0
  172. {fal-1.19.1 → fal-1.19.2}/tests/cli/test_secrets.py +0 -0
  173. {fal-1.19.1 → fal-1.19.2}/tests/conftest.py +0 -0
  174. {fal-1.19.1 → fal-1.19.2}/tests/integration_test.py +0 -0
  175. {fal-1.19.1 → fal-1.19.2}/tests/mainify_package/__init__.py +0 -0
  176. {fal-1.19.1 → fal-1.19.2}/tests/mainify_package/impl.py +0 -0
  177. {fal-1.19.1 → fal-1.19.2}/tests/mainify_package/utils.py +0 -0
  178. {fal-1.19.1 → fal-1.19.2}/tests/mainify_target.py +0 -0
  179. {fal-1.19.1 → fal-1.19.2}/tests/test_apps.py +0 -0
  180. {fal-1.19.1 → fal-1.19.2}/tests/test_stability.py +0 -0
  181. {fal-1.19.1 → fal-1.19.2}/tests/toolkit/image_test.py +0 -0
  182. {fal-1.19.1 → fal-1.19.2}/tests/toolkit/test_types.py +0 -0
  183. {fal-1.19.1 → fal-1.19.2}/tests/toolkit/utils/retry.py +0 -0
  184. {fal-1.19.1 → fal-1.19.2}/tools/demo_script.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fal
3
- Version: 1.19.1
3
+ Version: 1.19.2
4
4
  Summary: fal is an easy-to-use Serverless Python Framework
5
5
  Author: Features & Labels <support@fal.ai>
6
6
  Requires-Python: >=3.8
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fal
3
- Version: 1.19.1
3
+ Version: 1.19.2
4
4
  Summary: fal is an easy-to-use Serverless Python Framework
5
5
  Author: Features & Labels <support@fal.ai>
6
6
  Requires-Python: >=3.8
@@ -17,5 +17,5 @@ __version__: str
17
17
  __version_tuple__: VERSION_TUPLE
18
18
  version_tuple: VERSION_TUPLE
19
19
 
20
- __version__ = version = '1.19.1'
21
- __version_tuple__ = version_tuple = (1, 19, 1)
20
+ __version__ = version = '1.19.2'
21
+ __version_tuple__ = version_tuple = (1, 19, 2)
@@ -0,0 +1,12 @@
1
+ from fal.toolkit.file.file import IS_PYDANTIC_V2, File
2
+
3
+
4
+ class Audio(File):
5
+ if IS_PYDANTIC_V2:
6
+ model_config = {"json_schema_extra": {"ui": {"field": "audio"}}}
7
+ else:
8
+
9
+ class Config:
10
+ @staticmethod
11
+ def schema_extra(schema, model_type):
12
+ schema.setdefault("ui", {})["field"] = "audio"
@@ -102,8 +102,15 @@ class File(BaseModel):
102
102
 
103
103
  else:
104
104
 
105
+ @classmethod
106
+ def __convert_from_dict(cls, value: Any):
107
+ if isinstance(value, dict):
108
+ return cls(**value)
109
+ return value
110
+
105
111
  @classmethod
106
112
  def __get_validators__(cls):
113
+ yield cls.__convert_from_dict
107
114
  yield cls.__convert_from_str
108
115
 
109
116
  @classmethod
@@ -7,7 +7,12 @@ from typing import TYPE_CHECKING, Literal, Optional, Union
7
7
  from fastapi import Request
8
8
  from pydantic import BaseModel, Field
9
9
 
10
- from fal.toolkit.file.file import DEFAULT_REPOSITORY, FALLBACK_REPOSITORY, File
10
+ from fal.toolkit.file.file import (
11
+ DEFAULT_REPOSITORY,
12
+ FALLBACK_REPOSITORY,
13
+ IS_PYDANTIC_V2,
14
+ File,
15
+ )
11
16
  from fal.toolkit.file.types import FileRepository, RepositoryId
12
17
  from fal.toolkit.utils.download_utils import _download_file_python
13
18
 
@@ -72,6 +77,15 @@ class Image(File):
72
77
  None, description="The height of the image in pixels.", examples=[1024]
73
78
  )
74
79
 
80
+ if IS_PYDANTIC_V2:
81
+ model_config = {"json_schema_extra": {"ui": {"field": "image"}}}
82
+ else:
83
+
84
+ class Config:
85
+ @staticmethod
86
+ def schema_extra(schema, model_type):
87
+ schema.setdefault("ui", {})["field"] = "image"
88
+
75
89
  @classmethod
76
90
  def from_bytes( # type: ignore[override]
77
91
  cls,
@@ -0,0 +1,12 @@
1
+ from fal.toolkit.file.file import IS_PYDANTIC_V2, File
2
+
3
+
4
+ class Video(File):
5
+ if IS_PYDANTIC_V2:
6
+ model_config = {"json_schema_extra": {"ui": {"field": "video"}}}
7
+ else:
8
+
9
+ class Config:
10
+ @staticmethod
11
+ def schema_extra(schema, model_type):
12
+ schema.setdefault("ui", {})["field"] = "video"
@@ -4,6 +4,7 @@ import os
4
4
  from base64 import b64encode
5
5
 
6
6
  import pytest
7
+ from pydantic import BaseModel
7
8
 
8
9
  from fal.toolkit.file.file import File, GoogleStorageRepository
9
10
 
@@ -65,3 +66,27 @@ def test_gcp_storage_if_available():
65
66
  assert file.url.startswith(
66
67
  "https://storage.googleapis.com/fal_registry_image_results/"
67
68
  )
69
+
70
+
71
+ def test_load_nested():
72
+ class Input(BaseModel):
73
+ file: File
74
+
75
+ assert (
76
+ Input(file="https://example.com/somefile.txt").file.url
77
+ == "https://example.com/somefile.txt"
78
+ )
79
+
80
+ with pytest.raises(ValueError, match="value must be a valid URL"):
81
+ Input(file="not_a_valid_url")
82
+
83
+ file_dict = {
84
+ "url": "https://example.com/somefile.txt",
85
+ "content_type": "text/plain",
86
+ "file_name": "somefile.txt",
87
+ }
88
+
89
+ parsed_input = Input(file=file_dict)
90
+ assert parsed_input.file.url == file_dict["url"]
91
+ assert parsed_input.file.content_type == file_dict["content_type"]
92
+ assert parsed_input.file.file_name == file_dict["file_name"]
@@ -1,5 +0,0 @@
1
- from fal.toolkit.file.file import File
2
-
3
-
4
- class Audio(File):
5
- pass
@@ -1,5 +0,0 @@
1
- from fal.toolkit.file.file import File
2
-
3
-
4
- class Video(File):
5
- pass
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes