fal 1.38.0__tar.gz → 1.39.0__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 (187) hide show
  1. {fal-1.38.0/fal.egg-info → fal-1.39.0}/PKG-INFO +3 -3
  2. {fal-1.38.0 → fal-1.39.0/fal.egg-info}/PKG-INFO +3 -3
  3. {fal-1.38.0 → fal-1.39.0}/fal.egg-info/requires.txt +2 -2
  4. {fal-1.38.0 → fal-1.39.0}/pyproject.toml +2 -2
  5. {fal-1.38.0 → fal-1.39.0}/src/fal/_fal_version.py +2 -2
  6. {fal-1.38.0 → fal-1.39.0}/src/fal/toolkit/image/__init__.py +6 -5
  7. {fal-1.38.0 → fal-1.39.0}/tests/test_stability.py +9 -7
  8. {fal-1.38.0 → fal-1.39.0}/.gitignore +0 -0
  9. {fal-1.38.0 → fal-1.39.0}/Makefile +0 -0
  10. {fal-1.38.0 → fal-1.39.0}/README.md +0 -0
  11. {fal-1.38.0 → fal-1.39.0}/docs/conf.py +0 -0
  12. {fal-1.38.0 → fal-1.39.0}/docs/index.rst +0 -0
  13. {fal-1.38.0 → fal-1.39.0}/fal.egg-info/SOURCES.txt +0 -0
  14. {fal-1.38.0 → fal-1.39.0}/fal.egg-info/dependency_links.txt +0 -0
  15. {fal-1.38.0 → fal-1.39.0}/fal.egg-info/entry_points.txt +0 -0
  16. {fal-1.38.0 → fal-1.39.0}/fal.egg-info/top_level.txt +0 -0
  17. {fal-1.38.0 → fal-1.39.0}/openapi-fal-rest/README.md +0 -0
  18. {fal-1.38.0 → fal-1.39.0}/openapi-fal-rest/openapi_fal_rest/__init__.py +0 -0
  19. {fal-1.38.0 → fal-1.39.0}/openapi-fal-rest/openapi_fal_rest/api/__init__.py +0 -0
  20. {fal-1.38.0 → fal-1.39.0}/openapi-fal-rest/openapi_fal_rest/api/applications/__init__.py +0 -0
  21. {fal-1.38.0 → fal-1.39.0}/openapi-fal-rest/openapi_fal_rest/api/applications/app_metadata.py +0 -0
  22. {fal-1.38.0 → fal-1.39.0}/openapi-fal-rest/openapi_fal_rest/api/billing/__init__.py +0 -0
  23. {fal-1.38.0 → fal-1.39.0}/openapi-fal-rest/openapi_fal_rest/api/billing/get_user_details.py +0 -0
  24. {fal-1.38.0 → fal-1.39.0}/openapi-fal-rest/openapi_fal_rest/api/comfy/__init__.py +0 -0
  25. {fal-1.38.0 → fal-1.39.0}/openapi-fal-rest/openapi_fal_rest/api/comfy/create_workflow.py +0 -0
  26. {fal-1.38.0 → fal-1.39.0}/openapi-fal-rest/openapi_fal_rest/api/comfy/delete_workflow.py +0 -0
  27. {fal-1.38.0 → fal-1.39.0}/openapi-fal-rest/openapi_fal_rest/api/comfy/get_workflow.py +0 -0
  28. {fal-1.38.0 → fal-1.39.0}/openapi-fal-rest/openapi_fal_rest/api/comfy/list_user_workflows.py +0 -0
  29. {fal-1.38.0 → fal-1.39.0}/openapi-fal-rest/openapi_fal_rest/api/comfy/update_workflow.py +0 -0
  30. {fal-1.38.0 → fal-1.39.0}/openapi-fal-rest/openapi_fal_rest/api/files/__init__.py +0 -0
  31. {fal-1.38.0 → fal-1.39.0}/openapi-fal-rest/openapi_fal_rest/api/files/check_dir_hash.py +0 -0
  32. {fal-1.38.0 → fal-1.39.0}/openapi-fal-rest/openapi_fal_rest/api/files/upload_local_file.py +0 -0
  33. {fal-1.38.0 → fal-1.39.0}/openapi-fal-rest/openapi_fal_rest/api/users/__init__.py +0 -0
  34. {fal-1.38.0 → fal-1.39.0}/openapi-fal-rest/openapi_fal_rest/api/users/get_current_user.py +0 -0
  35. {fal-1.38.0 → fal-1.39.0}/openapi-fal-rest/openapi_fal_rest/api/workflows/__init__.py +0 -0
  36. {fal-1.38.0 → fal-1.39.0}/openapi-fal-rest/openapi_fal_rest/api/workflows/create_workflow.py +0 -0
  37. {fal-1.38.0 → fal-1.39.0}/openapi-fal-rest/openapi_fal_rest/api/workflows/delete_workflow.py +0 -0
  38. {fal-1.38.0 → fal-1.39.0}/openapi-fal-rest/openapi_fal_rest/api/workflows/get_workflow.py +0 -0
  39. {fal-1.38.0 → fal-1.39.0}/openapi-fal-rest/openapi_fal_rest/api/workflows/list_user_workflows.py +0 -0
  40. {fal-1.38.0 → fal-1.39.0}/openapi-fal-rest/openapi_fal_rest/api/workflows/update_workflow.py +0 -0
  41. {fal-1.38.0 → fal-1.39.0}/openapi-fal-rest/openapi_fal_rest/client.py +0 -0
  42. {fal-1.38.0 → fal-1.39.0}/openapi-fal-rest/openapi_fal_rest/errors.py +0 -0
  43. {fal-1.38.0 → fal-1.39.0}/openapi-fal-rest/openapi_fal_rest/models/__init__.py +0 -0
  44. {fal-1.38.0 → fal-1.39.0}/openapi-fal-rest/openapi_fal_rest/models/app_metadata_response_app_metadata.py +0 -0
  45. {fal-1.38.0 → fal-1.39.0}/openapi-fal-rest/openapi_fal_rest/models/body_upload_local_file.py +0 -0
  46. {fal-1.38.0 → fal-1.39.0}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_detail.py +0 -0
  47. {fal-1.38.0 → fal-1.39.0}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_item.py +0 -0
  48. {fal-1.38.0 → fal-1.39.0}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_schema.py +0 -0
  49. {fal-1.38.0 → fal-1.39.0}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_schema_extra_data.py +0 -0
  50. {fal-1.38.0 → fal-1.39.0}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_schema_fal_inputs.py +0 -0
  51. {fal-1.38.0 → fal-1.39.0}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_schema_fal_inputs_dev_info.py +0 -0
  52. {fal-1.38.0 → fal-1.39.0}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_schema_prompt.py +0 -0
  53. {fal-1.38.0 → fal-1.39.0}/openapi-fal-rest/openapi_fal_rest/models/current_user.py +0 -0
  54. {fal-1.38.0 → fal-1.39.0}/openapi-fal-rest/openapi_fal_rest/models/customer_details.py +0 -0
  55. {fal-1.38.0 → fal-1.39.0}/openapi-fal-rest/openapi_fal_rest/models/hash_check.py +0 -0
  56. {fal-1.38.0 → fal-1.39.0}/openapi-fal-rest/openapi_fal_rest/models/http_validation_error.py +0 -0
  57. {fal-1.38.0 → fal-1.39.0}/openapi-fal-rest/openapi_fal_rest/models/lock_reason.py +0 -0
  58. {fal-1.38.0 → fal-1.39.0}/openapi-fal-rest/openapi_fal_rest/models/page_comfy_workflow_item.py +0 -0
  59. {fal-1.38.0 → fal-1.39.0}/openapi-fal-rest/openapi_fal_rest/models/page_workflow_item.py +0 -0
  60. {fal-1.38.0 → fal-1.39.0}/openapi-fal-rest/openapi_fal_rest/models/team_role.py +0 -0
  61. {fal-1.38.0 → fal-1.39.0}/openapi-fal-rest/openapi_fal_rest/models/typed_comfy_workflow.py +0 -0
  62. {fal-1.38.0 → fal-1.39.0}/openapi-fal-rest/openapi_fal_rest/models/typed_comfy_workflow_update.py +0 -0
  63. {fal-1.38.0 → fal-1.39.0}/openapi-fal-rest/openapi_fal_rest/models/typed_workflow.py +0 -0
  64. {fal-1.38.0 → fal-1.39.0}/openapi-fal-rest/openapi_fal_rest/models/typed_workflow_update.py +0 -0
  65. {fal-1.38.0 → fal-1.39.0}/openapi-fal-rest/openapi_fal_rest/models/user_member.py +0 -0
  66. {fal-1.38.0 → fal-1.39.0}/openapi-fal-rest/openapi_fal_rest/models/validation_error.py +0 -0
  67. {fal-1.38.0 → fal-1.39.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_contents.py +0 -0
  68. {fal-1.38.0 → fal-1.39.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_contents_metadata.py +0 -0
  69. {fal-1.38.0 → fal-1.39.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_contents_nodes.py +0 -0
  70. {fal-1.38.0 → fal-1.39.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_contents_output.py +0 -0
  71. {fal-1.38.0 → fal-1.39.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_detail.py +0 -0
  72. {fal-1.38.0 → fal-1.39.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_detail_contents.py +0 -0
  73. {fal-1.38.0 → fal-1.39.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_item.py +0 -0
  74. {fal-1.38.0 → fal-1.39.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_node.py +0 -0
  75. {fal-1.38.0 → fal-1.39.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_node_type.py +0 -0
  76. {fal-1.38.0 → fal-1.39.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_schema.py +0 -0
  77. {fal-1.38.0 → fal-1.39.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_schema_input.py +0 -0
  78. {fal-1.38.0 → fal-1.39.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_schema_output.py +0 -0
  79. {fal-1.38.0 → fal-1.39.0}/openapi-fal-rest/openapi_fal_rest/py.typed +0 -0
  80. {fal-1.38.0 → fal-1.39.0}/openapi-fal-rest/openapi_fal_rest/types.py +0 -0
  81. {fal-1.38.0 → fal-1.39.0}/openapi-fal-rest/pyproject.toml +0 -0
  82. {fal-1.38.0 → fal-1.39.0}/openapi_rest.config.yaml +0 -0
  83. {fal-1.38.0 → fal-1.39.0}/setup.cfg +0 -0
  84. {fal-1.38.0 → fal-1.39.0}/src/fal/__init__.py +0 -0
  85. {fal-1.38.0 → fal-1.39.0}/src/fal/__main__.py +0 -0
  86. {fal-1.38.0 → fal-1.39.0}/src/fal/_serialization.py +0 -0
  87. {fal-1.38.0 → fal-1.39.0}/src/fal/_version.py +0 -0
  88. {fal-1.38.0 → fal-1.39.0}/src/fal/api.py +0 -0
  89. {fal-1.38.0 → fal-1.39.0}/src/fal/app.py +0 -0
  90. {fal-1.38.0 → fal-1.39.0}/src/fal/apps.py +0 -0
  91. {fal-1.38.0 → fal-1.39.0}/src/fal/auth/__init__.py +0 -0
  92. {fal-1.38.0 → fal-1.39.0}/src/fal/auth/auth0.py +0 -0
  93. {fal-1.38.0 → fal-1.39.0}/src/fal/auth/local.py +0 -0
  94. {fal-1.38.0 → fal-1.39.0}/src/fal/cli/__init__.py +0 -0
  95. {fal-1.38.0 → fal-1.39.0}/src/fal/cli/_utils.py +0 -0
  96. {fal-1.38.0 → fal-1.39.0}/src/fal/cli/api.py +0 -0
  97. {fal-1.38.0 → fal-1.39.0}/src/fal/cli/apps.py +0 -0
  98. {fal-1.38.0 → fal-1.39.0}/src/fal/cli/auth.py +0 -0
  99. {fal-1.38.0 → fal-1.39.0}/src/fal/cli/cli_nested_json.py +0 -0
  100. {fal-1.38.0 → fal-1.39.0}/src/fal/cli/create.py +0 -0
  101. {fal-1.38.0 → fal-1.39.0}/src/fal/cli/debug.py +0 -0
  102. {fal-1.38.0 → fal-1.39.0}/src/fal/cli/deploy.py +0 -0
  103. {fal-1.38.0 → fal-1.39.0}/src/fal/cli/doctor.py +0 -0
  104. {fal-1.38.0 → fal-1.39.0}/src/fal/cli/files.py +0 -0
  105. {fal-1.38.0 → fal-1.39.0}/src/fal/cli/keys.py +0 -0
  106. {fal-1.38.0 → fal-1.39.0}/src/fal/cli/main.py +0 -0
  107. {fal-1.38.0 → fal-1.39.0}/src/fal/cli/parser.py +0 -0
  108. {fal-1.38.0 → fal-1.39.0}/src/fal/cli/profile.py +0 -0
  109. {fal-1.38.0 → fal-1.39.0}/src/fal/cli/run.py +0 -0
  110. {fal-1.38.0 → fal-1.39.0}/src/fal/cli/runners.py +0 -0
  111. {fal-1.38.0 → fal-1.39.0}/src/fal/cli/secrets.py +0 -0
  112. {fal-1.38.0 → fal-1.39.0}/src/fal/cli/teams.py +0 -0
  113. {fal-1.38.0 → fal-1.39.0}/src/fal/config.py +0 -0
  114. {fal-1.38.0 → fal-1.39.0}/src/fal/console/__init__.py +0 -0
  115. {fal-1.38.0 → fal-1.39.0}/src/fal/console/icons.py +0 -0
  116. {fal-1.38.0 → fal-1.39.0}/src/fal/console/ux.py +0 -0
  117. {fal-1.38.0 → fal-1.39.0}/src/fal/container.py +0 -0
  118. {fal-1.38.0 → fal-1.39.0}/src/fal/exceptions/__init__.py +0 -0
  119. {fal-1.38.0 → fal-1.39.0}/src/fal/exceptions/_base.py +0 -0
  120. {fal-1.38.0 → fal-1.39.0}/src/fal/exceptions/_cuda.py +0 -0
  121. {fal-1.38.0 → fal-1.39.0}/src/fal/exceptions/auth.py +0 -0
  122. {fal-1.38.0 → fal-1.39.0}/src/fal/files.py +0 -0
  123. {fal-1.38.0 → fal-1.39.0}/src/fal/flags.py +0 -0
  124. {fal-1.38.0 → fal-1.39.0}/src/fal/logging/__init__.py +0 -0
  125. {fal-1.38.0 → fal-1.39.0}/src/fal/logging/isolate.py +0 -0
  126. {fal-1.38.0 → fal-1.39.0}/src/fal/logging/style.py +0 -0
  127. {fal-1.38.0 → fal-1.39.0}/src/fal/logging/trace.py +0 -0
  128. {fal-1.38.0 → fal-1.39.0}/src/fal/logging/user.py +0 -0
  129. {fal-1.38.0 → fal-1.39.0}/src/fal/project.py +0 -0
  130. {fal-1.38.0 → fal-1.39.0}/src/fal/py.typed +0 -0
  131. {fal-1.38.0 → fal-1.39.0}/src/fal/rest_client.py +0 -0
  132. {fal-1.38.0 → fal-1.39.0}/src/fal/sdk.py +0 -0
  133. {fal-1.38.0 → fal-1.39.0}/src/fal/sync.py +0 -0
  134. {fal-1.38.0 → fal-1.39.0}/src/fal/toolkit/__init__.py +0 -0
  135. {fal-1.38.0 → fal-1.39.0}/src/fal/toolkit/audio/__init__.py +0 -0
  136. {fal-1.38.0 → fal-1.39.0}/src/fal/toolkit/audio/audio.py +0 -0
  137. {fal-1.38.0 → fal-1.39.0}/src/fal/toolkit/exceptions.py +0 -0
  138. {fal-1.38.0 → fal-1.39.0}/src/fal/toolkit/file/__init__.py +0 -0
  139. {fal-1.38.0 → fal-1.39.0}/src/fal/toolkit/file/file.py +0 -0
  140. {fal-1.38.0 → fal-1.39.0}/src/fal/toolkit/file/providers/fal.py +0 -0
  141. {fal-1.38.0 → fal-1.39.0}/src/fal/toolkit/file/providers/gcp.py +0 -0
  142. {fal-1.38.0 → fal-1.39.0}/src/fal/toolkit/file/providers/r2.py +0 -0
  143. {fal-1.38.0 → fal-1.39.0}/src/fal/toolkit/file/providers/s3.py +0 -0
  144. {fal-1.38.0 → fal-1.39.0}/src/fal/toolkit/file/types.py +0 -0
  145. {fal-1.38.0 → fal-1.39.0}/src/fal/toolkit/image/image.py +0 -0
  146. {fal-1.38.0 → fal-1.39.0}/src/fal/toolkit/image/nsfw_filter/__init__.py +0 -0
  147. {fal-1.38.0 → fal-1.39.0}/src/fal/toolkit/image/nsfw_filter/env.py +0 -0
  148. {fal-1.38.0 → fal-1.39.0}/src/fal/toolkit/image/nsfw_filter/inference.py +0 -0
  149. {fal-1.38.0 → fal-1.39.0}/src/fal/toolkit/image/nsfw_filter/model.py +0 -0
  150. {fal-1.38.0 → fal-1.39.0}/src/fal/toolkit/image/nsfw_filter/requirements.txt +0 -0
  151. {fal-1.38.0 → fal-1.39.0}/src/fal/toolkit/image/safety_checker.py +0 -0
  152. {fal-1.38.0 → fal-1.39.0}/src/fal/toolkit/kv.py +0 -0
  153. {fal-1.38.0 → fal-1.39.0}/src/fal/toolkit/optimize.py +0 -0
  154. {fal-1.38.0 → fal-1.39.0}/src/fal/toolkit/types.py +0 -0
  155. {fal-1.38.0 → fal-1.39.0}/src/fal/toolkit/utils/__init__.py +0 -0
  156. {fal-1.38.0 → fal-1.39.0}/src/fal/toolkit/utils/download_utils.py +0 -0
  157. {fal-1.38.0 → fal-1.39.0}/src/fal/toolkit/utils/endpoint.py +0 -0
  158. {fal-1.38.0 → fal-1.39.0}/src/fal/toolkit/utils/retry.py +0 -0
  159. {fal-1.38.0 → fal-1.39.0}/src/fal/toolkit/utils/setup_utils.py +0 -0
  160. {fal-1.38.0 → fal-1.39.0}/src/fal/toolkit/video/__init__.py +0 -0
  161. {fal-1.38.0 → fal-1.39.0}/src/fal/toolkit/video/video.py +0 -0
  162. {fal-1.38.0 → fal-1.39.0}/src/fal/utils.py +0 -0
  163. {fal-1.38.0 → fal-1.39.0}/src/fal/workflows.py +0 -0
  164. {fal-1.38.0 → fal-1.39.0}/tests/__init__.py +0 -0
  165. {fal-1.38.0 → fal-1.39.0}/tests/assets/cat.png +0 -0
  166. {fal-1.38.0 → fal-1.39.0}/tests/cli/__init__.py +0 -0
  167. {fal-1.38.0 → fal-1.39.0}/tests/cli/test_apps.py +0 -0
  168. {fal-1.38.0 → fal-1.39.0}/tests/cli/test_auth.py +0 -0
  169. {fal-1.38.0 → fal-1.39.0}/tests/cli/test_deploy.py +0 -0
  170. {fal-1.38.0 → fal-1.39.0}/tests/cli/test_keys.py +0 -0
  171. {fal-1.38.0 → fal-1.39.0}/tests/cli/test_run.py +0 -0
  172. {fal-1.38.0 → fal-1.39.0}/tests/cli/test_secrets.py +0 -0
  173. {fal-1.38.0 → fal-1.39.0}/tests/conftest.py +0 -0
  174. {fal-1.38.0 → fal-1.39.0}/tests/integration_test.py +0 -0
  175. {fal-1.38.0 → fal-1.39.0}/tests/mainify_package/__init__.py +0 -0
  176. {fal-1.38.0 → fal-1.39.0}/tests/mainify_package/impl.py +0 -0
  177. {fal-1.38.0 → fal-1.39.0}/tests/mainify_package/utils.py +0 -0
  178. {fal-1.38.0 → fal-1.39.0}/tests/mainify_target.py +0 -0
  179. {fal-1.38.0 → fal-1.39.0}/tests/test_apps.py +0 -0
  180. {fal-1.38.0 → fal-1.39.0}/tests/test_files.py +0 -0
  181. {fal-1.38.0 → fal-1.39.0}/tests/test_kv.py +0 -0
  182. {fal-1.38.0 → fal-1.39.0}/tests/toolkit/file/providers/test_fal_retry.py +0 -0
  183. {fal-1.38.0 → fal-1.39.0}/tests/toolkit/file_test.py +0 -0
  184. {fal-1.38.0 → fal-1.39.0}/tests/toolkit/image_test.py +0 -0
  185. {fal-1.38.0 → fal-1.39.0}/tests/toolkit/test_types.py +0 -0
  186. {fal-1.38.0 → fal-1.39.0}/tests/toolkit/utils/retry.py +0 -0
  187. {fal-1.38.0 → fal-1.39.0}/tools/demo_script.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fal
3
- Version: 1.38.0
3
+ Version: 1.39.0
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,7 +17,7 @@ Requires-Dist: opentelemetry-sdk<2,>=1.15.0
17
17
  Requires-Dist: grpc-interceptor<1,>=0.15.0
18
18
  Requires-Dist: colorama<1,>=0.4.6
19
19
  Requires-Dist: portalocker<3,>=2.7.0
20
- Requires-Dist: rich<14,>=13.3.2
20
+ Requires-Dist: rich<15,>=13.3.2
21
21
  Requires-Dist: rich_argparse
22
22
  Requires-Dist: packaging>=21.3
23
23
  Requires-Dist: pathspec<1,>=0.11.1
@@ -33,7 +33,7 @@ Requires-Dist: types-dateparser<2,>=1.2.0
33
33
  Requires-Dist: importlib-metadata>=4.4; python_version < "3.10"
34
34
  Requires-Dist: msgpack<2,>=1.0.7
35
35
  Requires-Dist: websockets>=12.0
36
- Requires-Dist: pillow<11,>=10.2.0
36
+ Requires-Dist: pillow<12,>=10.2.0
37
37
  Requires-Dist: pyjwt[crypto]<3,>=2.8.0
38
38
  Requires-Dist: uvicorn<1,>=0.29.0
39
39
  Requires-Dist: cookiecutter
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fal
3
- Version: 1.38.0
3
+ Version: 1.39.0
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,7 +17,7 @@ Requires-Dist: opentelemetry-sdk<2,>=1.15.0
17
17
  Requires-Dist: grpc-interceptor<1,>=0.15.0
18
18
  Requires-Dist: colorama<1,>=0.4.6
19
19
  Requires-Dist: portalocker<3,>=2.7.0
20
- Requires-Dist: rich<14,>=13.3.2
20
+ Requires-Dist: rich<15,>=13.3.2
21
21
  Requires-Dist: rich_argparse
22
22
  Requires-Dist: packaging>=21.3
23
23
  Requires-Dist: pathspec<1,>=0.11.1
@@ -33,7 +33,7 @@ Requires-Dist: types-dateparser<2,>=1.2.0
33
33
  Requires-Dist: importlib-metadata>=4.4; python_version < "3.10"
34
34
  Requires-Dist: msgpack<2,>=1.0.7
35
35
  Requires-Dist: websockets>=12.0
36
- Requires-Dist: pillow<11,>=10.2.0
36
+ Requires-Dist: pillow<12,>=10.2.0
37
37
  Requires-Dist: pyjwt[crypto]<3,>=2.8.0
38
38
  Requires-Dist: uvicorn<1,>=0.29.0
39
39
  Requires-Dist: cookiecutter
@@ -10,7 +10,7 @@ opentelemetry-sdk<2,>=1.15.0
10
10
  grpc-interceptor<1,>=0.15.0
11
11
  colorama<1,>=0.4.6
12
12
  portalocker<3,>=2.7.0
13
- rich<14,>=13.3.2
13
+ rich<15,>=13.3.2
14
14
  rich_argparse
15
15
  packaging>=21.3
16
16
  pathspec<1,>=0.11.1
@@ -25,7 +25,7 @@ dateparser<2,>=1.2.0
25
25
  types-dateparser<2,>=1.2.0
26
26
  msgpack<2,>=1.0.7
27
27
  websockets>=12.0
28
- pillow<11,>=10.2.0
28
+ pillow<12,>=10.2.0
29
29
  pyjwt[crypto]<3,>=2.8.0
30
30
  uvicorn<1,>=0.29.0
31
31
  cookiecutter
@@ -34,7 +34,7 @@ dependencies = [
34
34
  "grpc-interceptor>=0.15.0,<1",
35
35
  "colorama>=0.4.6,<1",
36
36
  "portalocker>=2.7.0,<3",
37
- "rich>=13.3.2,<14",
37
+ "rich>=13.3.2,<15",
38
38
  "rich_argparse",
39
39
  "packaging>=21.3",
40
40
  "pathspec>=0.11.1,<1",
@@ -53,7 +53,7 @@ dependencies = [
53
53
  'importlib-metadata>=4.4; python_version < "3.10"',
54
54
  "msgpack>=1.0.7,<2",
55
55
  "websockets>=12.0",
56
- "pillow>=10.2.0,<11",
56
+ "pillow>=10.2.0,<12",
57
57
  "pyjwt[crypto]>=2.8.0,<3",
58
58
  "uvicorn>=0.29.0,<1",
59
59
  "cookiecutter",
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
28
28
  commit_id: COMMIT_ID
29
29
  __commit_id__: COMMIT_ID
30
30
 
31
- __version__ = version = '1.38.0'
32
- __version_tuple__ = version_tuple = (1, 38, 0)
31
+ __version__ = version = '1.39.0'
32
+ __version_tuple__ = version_tuple = (1, 39, 0)
33
33
 
34
34
  __commit_id__ = commit_id = None
@@ -7,18 +7,19 @@ from typing import TYPE_CHECKING
7
7
  from .image import * # noqa: F403
8
8
 
9
9
  if TYPE_CHECKING:
10
- from PIL.Image import Image as PILImage
10
+ # suffix so we don't clash with PILImage from .image
11
+ from PIL.Image import Image as PILImage2
11
12
 
12
13
 
13
14
  def filter_by(
14
15
  has_nsfw_concepts: list[bool],
15
- images: list[PILImage],
16
- ) -> list[PILImage]:
17
- from PIL import Image as PILImage
16
+ images: list[PILImage2],
17
+ ) -> list[PILImage2]:
18
+ from PIL import Image as PILImageModule
18
19
 
19
20
  return [
20
21
  (
21
- PILImage.new("RGB", (image.width, image.height), (0, 0, 0))
22
+ PILImageModule.new("RGB", (image.width, image.height), (0, 0, 0))
22
23
  if has_nsfw
23
24
  else image
24
25
  )
@@ -619,21 +619,23 @@ def test_worker_env_vars(isolated_client):
619
619
 
620
620
 
621
621
  @pytest.mark.parametrize(
622
- "repo_type, url_prefix",
622
+ "repo_type, url_prefixes",
623
623
  [
624
624
  (
625
625
  "fal",
626
- "https://storage.googleapis.com/isolate-dev-smiling-shark_toolkit_public_bucket/",
626
+ [
627
+ "https://storage.googleapis.com/isolate-dev-smiling-shark_toolkit_public_bucket/"
628
+ ],
627
629
  ),
628
- ("fal_v2", "https://v2.fal.media/files"),
629
- ("fal_v3", "https://v3.fal.media/files"),
630
+ ("fal_v2", ["https://v2.fal.media/files"]),
631
+ ("fal_v3", ["https://v3.fal.media/files", "https://v3b.fal.media/files"]),
630
632
  ],
631
633
  )
632
- def test_fal_storage(isolated_client, repo_type, url_prefix):
634
+ def test_fal_storage(isolated_client, repo_type, url_prefixes):
633
635
  file = File.from_bytes(
634
636
  b"Hello fal storage from local", repository=repo_type, fallback_repository=None
635
637
  )
636
- assert file.url.startswith(url_prefix)
638
+ assert any(file.url.startswith(url_prefix) for url_prefix in url_prefixes)
637
639
  assert file.as_bytes().decode().endswith("local")
638
640
 
639
641
  @isolated_client(
@@ -656,7 +658,7 @@ def test_fal_storage(isolated_client, repo_type, url_prefix):
656
658
 
657
659
  local_fn = hello_file.on(serve=False)
658
660
  file = local_fn()
659
- assert file.url.startswith(url_prefix)
661
+ assert any(file.url.startswith(url_prefix) for url_prefix in url_prefixes)
660
662
  assert file.as_bytes().decode().endswith("isolated")
661
663
 
662
664
 
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
File without changes
File without changes