fal 1.5.6__tar.gz → 1.5.7__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 (166) hide show
  1. {fal-1.5.6/fal.egg-info → fal-1.5.7}/PKG-INFO +1 -1
  2. {fal-1.5.6 → fal-1.5.7/fal.egg-info}/PKG-INFO +1 -1
  3. {fal-1.5.6 → fal-1.5.7}/src/fal/_fal_version.py +2 -2
  4. {fal-1.5.6 → fal-1.5.7}/src/fal/toolkit/utils/download_utils.py +4 -0
  5. {fal-1.5.6 → fal-1.5.7}/tests/integration_test.py +19 -0
  6. {fal-1.5.6 → fal-1.5.7}/.gitignore +0 -0
  7. {fal-1.5.6 → fal-1.5.7}/Makefile +0 -0
  8. {fal-1.5.6 → fal-1.5.7}/README.md +0 -0
  9. {fal-1.5.6 → fal-1.5.7}/docs/conf.py +0 -0
  10. {fal-1.5.6 → fal-1.5.7}/docs/index.rst +0 -0
  11. {fal-1.5.6 → fal-1.5.7}/fal.egg-info/SOURCES.txt +0 -0
  12. {fal-1.5.6 → fal-1.5.7}/fal.egg-info/dependency_links.txt +0 -0
  13. {fal-1.5.6 → fal-1.5.7}/fal.egg-info/entry_points.txt +0 -0
  14. {fal-1.5.6 → fal-1.5.7}/fal.egg-info/requires.txt +0 -0
  15. {fal-1.5.6 → fal-1.5.7}/fal.egg-info/top_level.txt +0 -0
  16. {fal-1.5.6 → fal-1.5.7}/openapi-fal-rest/README.md +0 -0
  17. {fal-1.5.6 → fal-1.5.7}/openapi-fal-rest/openapi_fal_rest/__init__.py +0 -0
  18. {fal-1.5.6 → fal-1.5.7}/openapi-fal-rest/openapi_fal_rest/api/__init__.py +0 -0
  19. {fal-1.5.6 → fal-1.5.7}/openapi-fal-rest/openapi_fal_rest/api/applications/__init__.py +0 -0
  20. {fal-1.5.6 → fal-1.5.7}/openapi-fal-rest/openapi_fal_rest/api/applications/app_metadata.py +0 -0
  21. {fal-1.5.6 → fal-1.5.7}/openapi-fal-rest/openapi_fal_rest/api/billing/__init__.py +0 -0
  22. {fal-1.5.6 → fal-1.5.7}/openapi-fal-rest/openapi_fal_rest/api/billing/get_user_details.py +0 -0
  23. {fal-1.5.6 → fal-1.5.7}/openapi-fal-rest/openapi_fal_rest/api/comfy/__init__.py +0 -0
  24. {fal-1.5.6 → fal-1.5.7}/openapi-fal-rest/openapi_fal_rest/api/comfy/create_workflow.py +0 -0
  25. {fal-1.5.6 → fal-1.5.7}/openapi-fal-rest/openapi_fal_rest/api/comfy/delete_workflow.py +0 -0
  26. {fal-1.5.6 → fal-1.5.7}/openapi-fal-rest/openapi_fal_rest/api/comfy/get_workflow.py +0 -0
  27. {fal-1.5.6 → fal-1.5.7}/openapi-fal-rest/openapi_fal_rest/api/comfy/list_user_workflows.py +0 -0
  28. {fal-1.5.6 → fal-1.5.7}/openapi-fal-rest/openapi_fal_rest/api/comfy/update_workflow.py +0 -0
  29. {fal-1.5.6 → fal-1.5.7}/openapi-fal-rest/openapi_fal_rest/api/files/__init__.py +0 -0
  30. {fal-1.5.6 → fal-1.5.7}/openapi-fal-rest/openapi_fal_rest/api/files/check_dir_hash.py +0 -0
  31. {fal-1.5.6 → fal-1.5.7}/openapi-fal-rest/openapi_fal_rest/api/files/upload_local_file.py +0 -0
  32. {fal-1.5.6 → fal-1.5.7}/openapi-fal-rest/openapi_fal_rest/api/users/__init__.py +0 -0
  33. {fal-1.5.6 → fal-1.5.7}/openapi-fal-rest/openapi_fal_rest/api/users/get_current_user.py +0 -0
  34. {fal-1.5.6 → fal-1.5.7}/openapi-fal-rest/openapi_fal_rest/api/workflows/__init__.py +0 -0
  35. {fal-1.5.6 → fal-1.5.7}/openapi-fal-rest/openapi_fal_rest/api/workflows/create_workflow.py +0 -0
  36. {fal-1.5.6 → fal-1.5.7}/openapi-fal-rest/openapi_fal_rest/api/workflows/delete_workflow.py +0 -0
  37. {fal-1.5.6 → fal-1.5.7}/openapi-fal-rest/openapi_fal_rest/api/workflows/get_workflow.py +0 -0
  38. {fal-1.5.6 → fal-1.5.7}/openapi-fal-rest/openapi_fal_rest/api/workflows/list_user_workflows.py +0 -0
  39. {fal-1.5.6 → fal-1.5.7}/openapi-fal-rest/openapi_fal_rest/api/workflows/update_workflow.py +0 -0
  40. {fal-1.5.6 → fal-1.5.7}/openapi-fal-rest/openapi_fal_rest/client.py +0 -0
  41. {fal-1.5.6 → fal-1.5.7}/openapi-fal-rest/openapi_fal_rest/errors.py +0 -0
  42. {fal-1.5.6 → fal-1.5.7}/openapi-fal-rest/openapi_fal_rest/models/__init__.py +0 -0
  43. {fal-1.5.6 → fal-1.5.7}/openapi-fal-rest/openapi_fal_rest/models/app_metadata_response_app_metadata.py +0 -0
  44. {fal-1.5.6 → fal-1.5.7}/openapi-fal-rest/openapi_fal_rest/models/body_upload_local_file.py +0 -0
  45. {fal-1.5.6 → fal-1.5.7}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_detail.py +0 -0
  46. {fal-1.5.6 → fal-1.5.7}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_item.py +0 -0
  47. {fal-1.5.6 → fal-1.5.7}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_schema.py +0 -0
  48. {fal-1.5.6 → fal-1.5.7}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_schema_extra_data.py +0 -0
  49. {fal-1.5.6 → fal-1.5.7}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_schema_fal_inputs.py +0 -0
  50. {fal-1.5.6 → fal-1.5.7}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_schema_fal_inputs_dev_info.py +0 -0
  51. {fal-1.5.6 → fal-1.5.7}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_schema_prompt.py +0 -0
  52. {fal-1.5.6 → fal-1.5.7}/openapi-fal-rest/openapi_fal_rest/models/current_user.py +0 -0
  53. {fal-1.5.6 → fal-1.5.7}/openapi-fal-rest/openapi_fal_rest/models/customer_details.py +0 -0
  54. {fal-1.5.6 → fal-1.5.7}/openapi-fal-rest/openapi_fal_rest/models/hash_check.py +0 -0
  55. {fal-1.5.6 → fal-1.5.7}/openapi-fal-rest/openapi_fal_rest/models/http_validation_error.py +0 -0
  56. {fal-1.5.6 → fal-1.5.7}/openapi-fal-rest/openapi_fal_rest/models/lock_reason.py +0 -0
  57. {fal-1.5.6 → fal-1.5.7}/openapi-fal-rest/openapi_fal_rest/models/page_comfy_workflow_item.py +0 -0
  58. {fal-1.5.6 → fal-1.5.7}/openapi-fal-rest/openapi_fal_rest/models/page_workflow_item.py +0 -0
  59. {fal-1.5.6 → fal-1.5.7}/openapi-fal-rest/openapi_fal_rest/models/team_role.py +0 -0
  60. {fal-1.5.6 → fal-1.5.7}/openapi-fal-rest/openapi_fal_rest/models/typed_comfy_workflow.py +0 -0
  61. {fal-1.5.6 → fal-1.5.7}/openapi-fal-rest/openapi_fal_rest/models/typed_comfy_workflow_update.py +0 -0
  62. {fal-1.5.6 → fal-1.5.7}/openapi-fal-rest/openapi_fal_rest/models/typed_workflow.py +0 -0
  63. {fal-1.5.6 → fal-1.5.7}/openapi-fal-rest/openapi_fal_rest/models/typed_workflow_update.py +0 -0
  64. {fal-1.5.6 → fal-1.5.7}/openapi-fal-rest/openapi_fal_rest/models/user_member.py +0 -0
  65. {fal-1.5.6 → fal-1.5.7}/openapi-fal-rest/openapi_fal_rest/models/validation_error.py +0 -0
  66. {fal-1.5.6 → fal-1.5.7}/openapi-fal-rest/openapi_fal_rest/models/workflow_contents.py +0 -0
  67. {fal-1.5.6 → fal-1.5.7}/openapi-fal-rest/openapi_fal_rest/models/workflow_contents_metadata.py +0 -0
  68. {fal-1.5.6 → fal-1.5.7}/openapi-fal-rest/openapi_fal_rest/models/workflow_contents_nodes.py +0 -0
  69. {fal-1.5.6 → fal-1.5.7}/openapi-fal-rest/openapi_fal_rest/models/workflow_contents_output.py +0 -0
  70. {fal-1.5.6 → fal-1.5.7}/openapi-fal-rest/openapi_fal_rest/models/workflow_detail.py +0 -0
  71. {fal-1.5.6 → fal-1.5.7}/openapi-fal-rest/openapi_fal_rest/models/workflow_detail_contents.py +0 -0
  72. {fal-1.5.6 → fal-1.5.7}/openapi-fal-rest/openapi_fal_rest/models/workflow_item.py +0 -0
  73. {fal-1.5.6 → fal-1.5.7}/openapi-fal-rest/openapi_fal_rest/models/workflow_node.py +0 -0
  74. {fal-1.5.6 → fal-1.5.7}/openapi-fal-rest/openapi_fal_rest/models/workflow_node_type.py +0 -0
  75. {fal-1.5.6 → fal-1.5.7}/openapi-fal-rest/openapi_fal_rest/models/workflow_schema.py +0 -0
  76. {fal-1.5.6 → fal-1.5.7}/openapi-fal-rest/openapi_fal_rest/models/workflow_schema_input.py +0 -0
  77. {fal-1.5.6 → fal-1.5.7}/openapi-fal-rest/openapi_fal_rest/models/workflow_schema_output.py +0 -0
  78. {fal-1.5.6 → fal-1.5.7}/openapi-fal-rest/openapi_fal_rest/py.typed +0 -0
  79. {fal-1.5.6 → fal-1.5.7}/openapi-fal-rest/openapi_fal_rest/types.py +0 -0
  80. {fal-1.5.6 → fal-1.5.7}/openapi-fal-rest/pyproject.toml +0 -0
  81. {fal-1.5.6 → fal-1.5.7}/openapi_rest.config.yaml +0 -0
  82. {fal-1.5.6 → fal-1.5.7}/pyproject.toml +0 -0
  83. {fal-1.5.6 → fal-1.5.7}/setup.cfg +0 -0
  84. {fal-1.5.6 → fal-1.5.7}/src/fal/__init__.py +0 -0
  85. {fal-1.5.6 → fal-1.5.7}/src/fal/__main__.py +0 -0
  86. {fal-1.5.6 → fal-1.5.7}/src/fal/_serialization.py +0 -0
  87. {fal-1.5.6 → fal-1.5.7}/src/fal/_version.py +0 -0
  88. {fal-1.5.6 → fal-1.5.7}/src/fal/api.py +0 -0
  89. {fal-1.5.6 → fal-1.5.7}/src/fal/app.py +0 -0
  90. {fal-1.5.6 → fal-1.5.7}/src/fal/apps.py +0 -0
  91. {fal-1.5.6 → fal-1.5.7}/src/fal/auth/__init__.py +0 -0
  92. {fal-1.5.6 → fal-1.5.7}/src/fal/auth/auth0.py +0 -0
  93. {fal-1.5.6 → fal-1.5.7}/src/fal/auth/local.py +0 -0
  94. {fal-1.5.6 → fal-1.5.7}/src/fal/cli/__init__.py +0 -0
  95. {fal-1.5.6 → fal-1.5.7}/src/fal/cli/_utils.py +0 -0
  96. {fal-1.5.6 → fal-1.5.7}/src/fal/cli/apps.py +0 -0
  97. {fal-1.5.6 → fal-1.5.7}/src/fal/cli/auth.py +0 -0
  98. {fal-1.5.6 → fal-1.5.7}/src/fal/cli/create.py +0 -0
  99. {fal-1.5.6 → fal-1.5.7}/src/fal/cli/debug.py +0 -0
  100. {fal-1.5.6 → fal-1.5.7}/src/fal/cli/deploy.py +0 -0
  101. {fal-1.5.6 → fal-1.5.7}/src/fal/cli/doctor.py +0 -0
  102. {fal-1.5.6 → fal-1.5.7}/src/fal/cli/keys.py +0 -0
  103. {fal-1.5.6 → fal-1.5.7}/src/fal/cli/main.py +0 -0
  104. {fal-1.5.6 → fal-1.5.7}/src/fal/cli/parser.py +0 -0
  105. {fal-1.5.6 → fal-1.5.7}/src/fal/cli/run.py +0 -0
  106. {fal-1.5.6 → fal-1.5.7}/src/fal/cli/secrets.py +0 -0
  107. {fal-1.5.6 → fal-1.5.7}/src/fal/console/__init__.py +0 -0
  108. {fal-1.5.6 → fal-1.5.7}/src/fal/console/icons.py +0 -0
  109. {fal-1.5.6 → fal-1.5.7}/src/fal/console/ux.py +0 -0
  110. {fal-1.5.6 → fal-1.5.7}/src/fal/container.py +0 -0
  111. {fal-1.5.6 → fal-1.5.7}/src/fal/exceptions/__init__.py +0 -0
  112. {fal-1.5.6 → fal-1.5.7}/src/fal/exceptions/_base.py +0 -0
  113. {fal-1.5.6 → fal-1.5.7}/src/fal/exceptions/_cuda.py +0 -0
  114. {fal-1.5.6 → fal-1.5.7}/src/fal/exceptions/auth.py +0 -0
  115. {fal-1.5.6 → fal-1.5.7}/src/fal/files.py +0 -0
  116. {fal-1.5.6 → fal-1.5.7}/src/fal/flags.py +0 -0
  117. {fal-1.5.6 → fal-1.5.7}/src/fal/logging/__init__.py +0 -0
  118. {fal-1.5.6 → fal-1.5.7}/src/fal/logging/isolate.py +0 -0
  119. {fal-1.5.6 → fal-1.5.7}/src/fal/logging/style.py +0 -0
  120. {fal-1.5.6 → fal-1.5.7}/src/fal/logging/trace.py +0 -0
  121. {fal-1.5.6 → fal-1.5.7}/src/fal/logging/user.py +0 -0
  122. {fal-1.5.6 → fal-1.5.7}/src/fal/py.typed +0 -0
  123. {fal-1.5.6 → fal-1.5.7}/src/fal/rest_client.py +0 -0
  124. {fal-1.5.6 → fal-1.5.7}/src/fal/sdk.py +0 -0
  125. {fal-1.5.6 → fal-1.5.7}/src/fal/sync.py +0 -0
  126. {fal-1.5.6 → fal-1.5.7}/src/fal/toolkit/__init__.py +0 -0
  127. {fal-1.5.6 → fal-1.5.7}/src/fal/toolkit/exceptions.py +0 -0
  128. {fal-1.5.6 → fal-1.5.7}/src/fal/toolkit/file/__init__.py +0 -0
  129. {fal-1.5.6 → fal-1.5.7}/src/fal/toolkit/file/file.py +0 -0
  130. {fal-1.5.6 → fal-1.5.7}/src/fal/toolkit/file/providers/fal.py +0 -0
  131. {fal-1.5.6 → fal-1.5.7}/src/fal/toolkit/file/providers/gcp.py +0 -0
  132. {fal-1.5.6 → fal-1.5.7}/src/fal/toolkit/file/providers/r2.py +0 -0
  133. {fal-1.5.6 → fal-1.5.7}/src/fal/toolkit/file/types.py +0 -0
  134. {fal-1.5.6 → fal-1.5.7}/src/fal/toolkit/image/__init__.py +0 -0
  135. {fal-1.5.6 → fal-1.5.7}/src/fal/toolkit/image/image.py +0 -0
  136. {fal-1.5.6 → fal-1.5.7}/src/fal/toolkit/image/nsfw_filter/__init__.py +0 -0
  137. {fal-1.5.6 → fal-1.5.7}/src/fal/toolkit/image/nsfw_filter/env.py +0 -0
  138. {fal-1.5.6 → fal-1.5.7}/src/fal/toolkit/image/nsfw_filter/inference.py +0 -0
  139. {fal-1.5.6 → fal-1.5.7}/src/fal/toolkit/image/nsfw_filter/model.py +0 -0
  140. {fal-1.5.6 → fal-1.5.7}/src/fal/toolkit/image/nsfw_filter/requirements.txt +0 -0
  141. {fal-1.5.6 → fal-1.5.7}/src/fal/toolkit/image/safety_checker.py +0 -0
  142. {fal-1.5.6 → fal-1.5.7}/src/fal/toolkit/optimize.py +0 -0
  143. {fal-1.5.6 → fal-1.5.7}/src/fal/toolkit/utils/__init__.py +0 -0
  144. {fal-1.5.6 → fal-1.5.7}/src/fal/toolkit/utils/retry.py +0 -0
  145. {fal-1.5.6 → fal-1.5.7}/src/fal/utils.py +0 -0
  146. {fal-1.5.6 → fal-1.5.7}/src/fal/workflows.py +0 -0
  147. {fal-1.5.6 → fal-1.5.7}/tests/__init__.py +0 -0
  148. {fal-1.5.6 → fal-1.5.7}/tests/assets/cat.png +0 -0
  149. {fal-1.5.6 → fal-1.5.7}/tests/cli/__init__.py +0 -0
  150. {fal-1.5.6 → fal-1.5.7}/tests/cli/test_apps.py +0 -0
  151. {fal-1.5.6 → fal-1.5.7}/tests/cli/test_auth.py +0 -0
  152. {fal-1.5.6 → fal-1.5.7}/tests/cli/test_deploy.py +0 -0
  153. {fal-1.5.6 → fal-1.5.7}/tests/cli/test_keys.py +0 -0
  154. {fal-1.5.6 → fal-1.5.7}/tests/cli/test_run.py +0 -0
  155. {fal-1.5.6 → fal-1.5.7}/tests/cli/test_secrets.py +0 -0
  156. {fal-1.5.6 → fal-1.5.7}/tests/conftest.py +0 -0
  157. {fal-1.5.6 → fal-1.5.7}/tests/mainify_package/__init__.py +0 -0
  158. {fal-1.5.6 → fal-1.5.7}/tests/mainify_package/impl.py +0 -0
  159. {fal-1.5.6 → fal-1.5.7}/tests/mainify_package/utils.py +0 -0
  160. {fal-1.5.6 → fal-1.5.7}/tests/mainify_target.py +0 -0
  161. {fal-1.5.6 → fal-1.5.7}/tests/test_apps.py +0 -0
  162. {fal-1.5.6 → fal-1.5.7}/tests/test_stability.py +0 -0
  163. {fal-1.5.6 → fal-1.5.7}/tests/toolkit/file_test.py +0 -0
  164. {fal-1.5.6 → fal-1.5.7}/tests/toolkit/image_test.py +0 -0
  165. {fal-1.5.6 → fal-1.5.7}/tests/toolkit/utils/retry.py +0 -0
  166. {fal-1.5.6 → fal-1.5.7}/tools/demo_script.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fal
3
- Version: 1.5.6
3
+ Version: 1.5.7
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.1
2
2
  Name: fal
3
- Version: 1.5.6
3
+ Version: 1.5.7
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
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '1.5.6'
16
- __version_tuple__ = version_tuple = (1, 5, 6)
15
+ __version__ = version = '1.5.7'
16
+ __version_tuple__ = version_tuple = (1, 5, 7)
@@ -84,6 +84,9 @@ def _get_remote_file_properties(
84
84
  url_path = parsed_url.path
85
85
  file_name = Path(url_path).name or _hash_url(url)
86
86
 
87
+ # file name can still contain a forward slash if the server returns a relative path
88
+ file_name = Path(file_name).name
89
+
87
90
  return file_name, content_length
88
91
 
89
92
 
@@ -159,6 +162,7 @@ def download_file(
159
162
  try:
160
163
  file_name = _get_remote_file_properties(url, request_headers)[0]
161
164
  except Exception as e:
165
+ print(f"GOt error: {e}")
162
166
  raise DownloadError(f"Failed to get remote file properties for {url}") from e
163
167
 
164
168
  if "/" in file_name:
@@ -1,6 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import tempfile
4
+ import unittest.mock
4
5
  from pathlib import Path
5
6
  from typing import Callable
6
7
  from uuid import uuid4
@@ -562,3 +563,21 @@ def test_fal_cdn(isolated_client):
562
563
  uploaded_image = upload_to_fal_cdn()
563
564
 
564
565
  assert uploaded_image
566
+
567
+
568
+ def test_download_file_with_slash_in_filename():
569
+ from fal.toolkit.utils.download_utils import _get_remote_file_properties
570
+
571
+ test_url = "https://example.com/file/with/slash.txt"
572
+
573
+ with unittest.mock.patch(
574
+ "fal.toolkit.utils.download_utils.urlopen"
575
+ ) as mock_urlopen:
576
+ # urlopen is a context manager, so we need to mock the __enter__ method
577
+ mock_response = mock_urlopen.return_value.__enter__.return_value
578
+ mock_response.headers.get_filename.return_value = "file/with/slash.txt"
579
+ mock_response.headers.get.return_value = "100"
580
+
581
+ file_name, _ = _get_remote_file_properties(test_url)
582
+
583
+ assert "/" not in file_name
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