fal 1.47.0__tar.gz → 1.49.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 (201) hide show
  1. {fal-1.47.0/fal.egg-info → fal-1.49.0}/PKG-INFO +2 -1
  2. {fal-1.47.0 → fal-1.49.0/fal.egg-info}/PKG-INFO +2 -1
  3. {fal-1.47.0 → fal-1.49.0}/fal.egg-info/requires.txt +1 -0
  4. {fal-1.47.0 → fal-1.49.0}/pyproject.toml +1 -0
  5. {fal-1.47.0 → fal-1.49.0}/src/fal/_fal_version.py +2 -2
  6. {fal-1.47.0 → fal-1.49.0}/src/fal/api/client.py +8 -1
  7. {fal-1.47.0 → fal-1.49.0}/src/fal/api/deploy.py +2 -2
  8. {fal-1.47.0 → fal-1.49.0}/src/fal/cli/files.py +17 -0
  9. {fal-1.47.0 → fal-1.49.0}/src/fal/cli/run.py +3 -2
  10. {fal-1.47.0 → fal-1.49.0}/tests/cli/test_run.py +4 -4
  11. {fal-1.47.0 → fal-1.49.0}/.gitignore +0 -0
  12. {fal-1.47.0 → fal-1.49.0}/Makefile +0 -0
  13. {fal-1.47.0 → fal-1.49.0}/README.md +0 -0
  14. {fal-1.47.0 → fal-1.49.0}/docs/conf.py +0 -0
  15. {fal-1.47.0 → fal-1.49.0}/docs/index.rst +0 -0
  16. {fal-1.47.0 → fal-1.49.0}/fal.egg-info/SOURCES.txt +0 -0
  17. {fal-1.47.0 → fal-1.49.0}/fal.egg-info/dependency_links.txt +0 -0
  18. {fal-1.47.0 → fal-1.49.0}/fal.egg-info/entry_points.txt +0 -0
  19. {fal-1.47.0 → fal-1.49.0}/fal.egg-info/top_level.txt +0 -0
  20. {fal-1.47.0 → fal-1.49.0}/openapi-fal-rest/README.md +0 -0
  21. {fal-1.47.0 → fal-1.49.0}/openapi-fal-rest/openapi_fal_rest/__init__.py +0 -0
  22. {fal-1.47.0 → fal-1.49.0}/openapi-fal-rest/openapi_fal_rest/api/__init__.py +0 -0
  23. {fal-1.47.0 → fal-1.49.0}/openapi-fal-rest/openapi_fal_rest/api/applications/__init__.py +0 -0
  24. {fal-1.47.0 → fal-1.49.0}/openapi-fal-rest/openapi_fal_rest/api/applications/app_metadata.py +0 -0
  25. {fal-1.47.0 → fal-1.49.0}/openapi-fal-rest/openapi_fal_rest/api/billing/__init__.py +0 -0
  26. {fal-1.47.0 → fal-1.49.0}/openapi-fal-rest/openapi_fal_rest/api/billing/get_user_details.py +0 -0
  27. {fal-1.47.0 → fal-1.49.0}/openapi-fal-rest/openapi_fal_rest/api/comfy/__init__.py +0 -0
  28. {fal-1.47.0 → fal-1.49.0}/openapi-fal-rest/openapi_fal_rest/api/comfy/create_workflow.py +0 -0
  29. {fal-1.47.0 → fal-1.49.0}/openapi-fal-rest/openapi_fal_rest/api/comfy/delete_workflow.py +0 -0
  30. {fal-1.47.0 → fal-1.49.0}/openapi-fal-rest/openapi_fal_rest/api/comfy/get_workflow.py +0 -0
  31. {fal-1.47.0 → fal-1.49.0}/openapi-fal-rest/openapi_fal_rest/api/comfy/list_user_workflows.py +0 -0
  32. {fal-1.47.0 → fal-1.49.0}/openapi-fal-rest/openapi_fal_rest/api/comfy/update_workflow.py +0 -0
  33. {fal-1.47.0 → fal-1.49.0}/openapi-fal-rest/openapi_fal_rest/api/files/__init__.py +0 -0
  34. {fal-1.47.0 → fal-1.49.0}/openapi-fal-rest/openapi_fal_rest/api/files/check_dir_hash.py +0 -0
  35. {fal-1.47.0 → fal-1.49.0}/openapi-fal-rest/openapi_fal_rest/api/files/upload_local_file.py +0 -0
  36. {fal-1.47.0 → fal-1.49.0}/openapi-fal-rest/openapi_fal_rest/api/users/__init__.py +0 -0
  37. {fal-1.47.0 → fal-1.49.0}/openapi-fal-rest/openapi_fal_rest/api/users/get_current_user.py +0 -0
  38. {fal-1.47.0 → fal-1.49.0}/openapi-fal-rest/openapi_fal_rest/api/workflows/__init__.py +0 -0
  39. {fal-1.47.0 → fal-1.49.0}/openapi-fal-rest/openapi_fal_rest/api/workflows/create_workflow.py +0 -0
  40. {fal-1.47.0 → fal-1.49.0}/openapi-fal-rest/openapi_fal_rest/api/workflows/delete_workflow.py +0 -0
  41. {fal-1.47.0 → fal-1.49.0}/openapi-fal-rest/openapi_fal_rest/api/workflows/get_workflow.py +0 -0
  42. {fal-1.47.0 → fal-1.49.0}/openapi-fal-rest/openapi_fal_rest/api/workflows/list_user_workflows.py +0 -0
  43. {fal-1.47.0 → fal-1.49.0}/openapi-fal-rest/openapi_fal_rest/api/workflows/update_workflow.py +0 -0
  44. {fal-1.47.0 → fal-1.49.0}/openapi-fal-rest/openapi_fal_rest/client.py +0 -0
  45. {fal-1.47.0 → fal-1.49.0}/openapi-fal-rest/openapi_fal_rest/errors.py +0 -0
  46. {fal-1.47.0 → fal-1.49.0}/openapi-fal-rest/openapi_fal_rest/models/__init__.py +0 -0
  47. {fal-1.47.0 → fal-1.49.0}/openapi-fal-rest/openapi_fal_rest/models/app_metadata_response_app_metadata.py +0 -0
  48. {fal-1.47.0 → fal-1.49.0}/openapi-fal-rest/openapi_fal_rest/models/body_upload_local_file.py +0 -0
  49. {fal-1.47.0 → fal-1.49.0}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_detail.py +0 -0
  50. {fal-1.47.0 → fal-1.49.0}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_item.py +0 -0
  51. {fal-1.47.0 → fal-1.49.0}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_schema.py +0 -0
  52. {fal-1.47.0 → fal-1.49.0}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_schema_extra_data.py +0 -0
  53. {fal-1.47.0 → fal-1.49.0}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_schema_fal_inputs.py +0 -0
  54. {fal-1.47.0 → fal-1.49.0}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_schema_fal_inputs_dev_info.py +0 -0
  55. {fal-1.47.0 → fal-1.49.0}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_schema_prompt.py +0 -0
  56. {fal-1.47.0 → fal-1.49.0}/openapi-fal-rest/openapi_fal_rest/models/current_user.py +0 -0
  57. {fal-1.47.0 → fal-1.49.0}/openapi-fal-rest/openapi_fal_rest/models/customer_details.py +0 -0
  58. {fal-1.47.0 → fal-1.49.0}/openapi-fal-rest/openapi_fal_rest/models/hash_check.py +0 -0
  59. {fal-1.47.0 → fal-1.49.0}/openapi-fal-rest/openapi_fal_rest/models/http_validation_error.py +0 -0
  60. {fal-1.47.0 → fal-1.49.0}/openapi-fal-rest/openapi_fal_rest/models/lock_reason.py +0 -0
  61. {fal-1.47.0 → fal-1.49.0}/openapi-fal-rest/openapi_fal_rest/models/page_comfy_workflow_item.py +0 -0
  62. {fal-1.47.0 → fal-1.49.0}/openapi-fal-rest/openapi_fal_rest/models/page_workflow_item.py +0 -0
  63. {fal-1.47.0 → fal-1.49.0}/openapi-fal-rest/openapi_fal_rest/models/team_role.py +0 -0
  64. {fal-1.47.0 → fal-1.49.0}/openapi-fal-rest/openapi_fal_rest/models/typed_comfy_workflow.py +0 -0
  65. {fal-1.47.0 → fal-1.49.0}/openapi-fal-rest/openapi_fal_rest/models/typed_comfy_workflow_update.py +0 -0
  66. {fal-1.47.0 → fal-1.49.0}/openapi-fal-rest/openapi_fal_rest/models/typed_workflow.py +0 -0
  67. {fal-1.47.0 → fal-1.49.0}/openapi-fal-rest/openapi_fal_rest/models/typed_workflow_update.py +0 -0
  68. {fal-1.47.0 → fal-1.49.0}/openapi-fal-rest/openapi_fal_rest/models/user_member.py +0 -0
  69. {fal-1.47.0 → fal-1.49.0}/openapi-fal-rest/openapi_fal_rest/models/validation_error.py +0 -0
  70. {fal-1.47.0 → fal-1.49.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_contents.py +0 -0
  71. {fal-1.47.0 → fal-1.49.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_contents_metadata.py +0 -0
  72. {fal-1.47.0 → fal-1.49.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_contents_nodes.py +0 -0
  73. {fal-1.47.0 → fal-1.49.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_contents_output.py +0 -0
  74. {fal-1.47.0 → fal-1.49.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_detail.py +0 -0
  75. {fal-1.47.0 → fal-1.49.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_detail_contents.py +0 -0
  76. {fal-1.47.0 → fal-1.49.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_item.py +0 -0
  77. {fal-1.47.0 → fal-1.49.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_node.py +0 -0
  78. {fal-1.47.0 → fal-1.49.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_node_type.py +0 -0
  79. {fal-1.47.0 → fal-1.49.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_schema.py +0 -0
  80. {fal-1.47.0 → fal-1.49.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_schema_input.py +0 -0
  81. {fal-1.47.0 → fal-1.49.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_schema_output.py +0 -0
  82. {fal-1.47.0 → fal-1.49.0}/openapi-fal-rest/openapi_fal_rest/py.typed +0 -0
  83. {fal-1.47.0 → fal-1.49.0}/openapi-fal-rest/openapi_fal_rest/types.py +0 -0
  84. {fal-1.47.0 → fal-1.49.0}/openapi-fal-rest/pyproject.toml +0 -0
  85. {fal-1.47.0 → fal-1.49.0}/openapi_rest.config.yaml +0 -0
  86. {fal-1.47.0 → fal-1.49.0}/setup.cfg +0 -0
  87. {fal-1.47.0 → fal-1.49.0}/src/fal/__init__.py +0 -0
  88. {fal-1.47.0 → fal-1.49.0}/src/fal/__main__.py +0 -0
  89. {fal-1.47.0 → fal-1.49.0}/src/fal/_serialization.py +0 -0
  90. {fal-1.47.0 → fal-1.49.0}/src/fal/_version.py +0 -0
  91. {fal-1.47.0 → fal-1.49.0}/src/fal/api/__init__.py +0 -0
  92. {fal-1.47.0 → fal-1.49.0}/src/fal/api/api.py +0 -0
  93. {fal-1.47.0 → fal-1.49.0}/src/fal/api/apps.py +0 -0
  94. {fal-1.47.0 → fal-1.49.0}/src/fal/api/runners.py +0 -0
  95. {fal-1.47.0 → fal-1.49.0}/src/fal/app.py +0 -0
  96. {fal-1.47.0 → fal-1.49.0}/src/fal/apps.py +0 -0
  97. {fal-1.47.0 → fal-1.49.0}/src/fal/auth/__init__.py +0 -0
  98. {fal-1.47.0 → fal-1.49.0}/src/fal/auth/auth0.py +0 -0
  99. {fal-1.47.0 → fal-1.49.0}/src/fal/auth/local.py +0 -0
  100. {fal-1.47.0 → fal-1.49.0}/src/fal/cli/__init__.py +0 -0
  101. {fal-1.47.0 → fal-1.49.0}/src/fal/cli/_utils.py +0 -0
  102. {fal-1.47.0 → fal-1.49.0}/src/fal/cli/api.py +0 -0
  103. {fal-1.47.0 → fal-1.49.0}/src/fal/cli/apps.py +0 -0
  104. {fal-1.47.0 → fal-1.49.0}/src/fal/cli/auth.py +0 -0
  105. {fal-1.47.0 → fal-1.49.0}/src/fal/cli/cli_nested_json.py +0 -0
  106. {fal-1.47.0 → fal-1.49.0}/src/fal/cli/create.py +0 -0
  107. {fal-1.47.0 → fal-1.49.0}/src/fal/cli/debug.py +0 -0
  108. {fal-1.47.0 → fal-1.49.0}/src/fal/cli/deploy.py +0 -0
  109. {fal-1.47.0 → fal-1.49.0}/src/fal/cli/doctor.py +0 -0
  110. {fal-1.47.0 → fal-1.49.0}/src/fal/cli/keys.py +0 -0
  111. {fal-1.47.0 → fal-1.49.0}/src/fal/cli/main.py +0 -0
  112. {fal-1.47.0 → fal-1.49.0}/src/fal/cli/parser.py +0 -0
  113. {fal-1.47.0 → fal-1.49.0}/src/fal/cli/profile.py +0 -0
  114. {fal-1.47.0 → fal-1.49.0}/src/fal/cli/queue.py +0 -0
  115. {fal-1.47.0 → fal-1.49.0}/src/fal/cli/runners.py +0 -0
  116. {fal-1.47.0 → fal-1.49.0}/src/fal/cli/secrets.py +0 -0
  117. {fal-1.47.0 → fal-1.49.0}/src/fal/cli/teams.py +0 -0
  118. {fal-1.47.0 → fal-1.49.0}/src/fal/config.py +0 -0
  119. {fal-1.47.0 → fal-1.49.0}/src/fal/console/__init__.py +0 -0
  120. {fal-1.47.0 → fal-1.49.0}/src/fal/console/icons.py +0 -0
  121. {fal-1.47.0 → fal-1.49.0}/src/fal/console/ux.py +0 -0
  122. {fal-1.47.0 → fal-1.49.0}/src/fal/container.py +0 -0
  123. {fal-1.47.0 → fal-1.49.0}/src/fal/distributed/__init__.py +0 -0
  124. {fal-1.47.0 → fal-1.49.0}/src/fal/distributed/utils.py +0 -0
  125. {fal-1.47.0 → fal-1.49.0}/src/fal/distributed/worker.py +0 -0
  126. {fal-1.47.0 → fal-1.49.0}/src/fal/exceptions/__init__.py +0 -0
  127. {fal-1.47.0 → fal-1.49.0}/src/fal/exceptions/_base.py +0 -0
  128. {fal-1.47.0 → fal-1.49.0}/src/fal/exceptions/_cuda.py +0 -0
  129. {fal-1.47.0 → fal-1.49.0}/src/fal/exceptions/auth.py +0 -0
  130. {fal-1.47.0 → fal-1.49.0}/src/fal/file_sync.py +0 -0
  131. {fal-1.47.0 → fal-1.49.0}/src/fal/files.py +0 -0
  132. {fal-1.47.0 → fal-1.49.0}/src/fal/flags.py +0 -0
  133. {fal-1.47.0 → fal-1.49.0}/src/fal/logging/__init__.py +0 -0
  134. {fal-1.47.0 → fal-1.49.0}/src/fal/logging/isolate.py +0 -0
  135. {fal-1.47.0 → fal-1.49.0}/src/fal/logging/style.py +0 -0
  136. {fal-1.47.0 → fal-1.49.0}/src/fal/logging/trace.py +0 -0
  137. {fal-1.47.0 → fal-1.49.0}/src/fal/project.py +0 -0
  138. {fal-1.47.0 → fal-1.49.0}/src/fal/py.typed +0 -0
  139. {fal-1.47.0 → fal-1.49.0}/src/fal/rest_client.py +0 -0
  140. {fal-1.47.0 → fal-1.49.0}/src/fal/sdk.py +0 -0
  141. {fal-1.47.0 → fal-1.49.0}/src/fal/sync.py +0 -0
  142. {fal-1.47.0 → fal-1.49.0}/src/fal/toolkit/__init__.py +0 -0
  143. {fal-1.47.0 → fal-1.49.0}/src/fal/toolkit/audio/__init__.py +0 -0
  144. {fal-1.47.0 → fal-1.49.0}/src/fal/toolkit/audio/audio.py +0 -0
  145. {fal-1.47.0 → fal-1.49.0}/src/fal/toolkit/exceptions.py +0 -0
  146. {fal-1.47.0 → fal-1.49.0}/src/fal/toolkit/file/__init__.py +0 -0
  147. {fal-1.47.0 → fal-1.49.0}/src/fal/toolkit/file/file.py +0 -0
  148. {fal-1.47.0 → fal-1.49.0}/src/fal/toolkit/file/providers/fal.py +0 -0
  149. {fal-1.47.0 → fal-1.49.0}/src/fal/toolkit/file/providers/gcp.py +0 -0
  150. {fal-1.47.0 → fal-1.49.0}/src/fal/toolkit/file/providers/r2.py +0 -0
  151. {fal-1.47.0 → fal-1.49.0}/src/fal/toolkit/file/providers/s3.py +0 -0
  152. {fal-1.47.0 → fal-1.49.0}/src/fal/toolkit/file/types.py +0 -0
  153. {fal-1.47.0 → fal-1.49.0}/src/fal/toolkit/image/__init__.py +0 -0
  154. {fal-1.47.0 → fal-1.49.0}/src/fal/toolkit/image/image.py +0 -0
  155. {fal-1.47.0 → fal-1.49.0}/src/fal/toolkit/image/nsfw_filter/__init__.py +0 -0
  156. {fal-1.47.0 → fal-1.49.0}/src/fal/toolkit/image/nsfw_filter/env.py +0 -0
  157. {fal-1.47.0 → fal-1.49.0}/src/fal/toolkit/image/nsfw_filter/inference.py +0 -0
  158. {fal-1.47.0 → fal-1.49.0}/src/fal/toolkit/image/nsfw_filter/model.py +0 -0
  159. {fal-1.47.0 → fal-1.49.0}/src/fal/toolkit/image/nsfw_filter/requirements.txt +0 -0
  160. {fal-1.47.0 → fal-1.49.0}/src/fal/toolkit/image/safety_checker.py +0 -0
  161. {fal-1.47.0 → fal-1.49.0}/src/fal/toolkit/kv.py +0 -0
  162. {fal-1.47.0 → fal-1.49.0}/src/fal/toolkit/optimize.py +0 -0
  163. {fal-1.47.0 → fal-1.49.0}/src/fal/toolkit/types.py +0 -0
  164. {fal-1.47.0 → fal-1.49.0}/src/fal/toolkit/utils/__init__.py +0 -0
  165. {fal-1.47.0 → fal-1.49.0}/src/fal/toolkit/utils/download_utils.py +0 -0
  166. {fal-1.47.0 → fal-1.49.0}/src/fal/toolkit/utils/endpoint.py +0 -0
  167. {fal-1.47.0 → fal-1.49.0}/src/fal/toolkit/utils/retry.py +0 -0
  168. {fal-1.47.0 → fal-1.49.0}/src/fal/toolkit/utils/setup_utils.py +0 -0
  169. {fal-1.47.0 → fal-1.49.0}/src/fal/toolkit/video/__init__.py +0 -0
  170. {fal-1.47.0 → fal-1.49.0}/src/fal/toolkit/video/video.py +0 -0
  171. {fal-1.47.0 → fal-1.49.0}/src/fal/utils.py +0 -0
  172. {fal-1.47.0 → fal-1.49.0}/src/fal/workflows.py +0 -0
  173. {fal-1.47.0 → fal-1.49.0}/tests/__init__.py +0 -0
  174. {fal-1.47.0 → fal-1.49.0}/tests/assets/cat.png +0 -0
  175. {fal-1.47.0 → fal-1.49.0}/tests/cli/__init__.py +0 -0
  176. {fal-1.47.0 → fal-1.49.0}/tests/cli/test_apps.py +0 -0
  177. {fal-1.47.0 → fal-1.49.0}/tests/cli/test_auth.py +0 -0
  178. {fal-1.47.0 → fal-1.49.0}/tests/cli/test_deploy.py +0 -0
  179. {fal-1.47.0 → fal-1.49.0}/tests/cli/test_keys.py +0 -0
  180. {fal-1.47.0 → fal-1.49.0}/tests/cli/test_secrets.py +0 -0
  181. {fal-1.47.0 → fal-1.49.0}/tests/conftest.py +0 -0
  182. {fal-1.47.0 → fal-1.49.0}/tests/integration_test.py +0 -0
  183. {fal-1.47.0 → fal-1.49.0}/tests/mainify_package/__init__.py +0 -0
  184. {fal-1.47.0 → fal-1.49.0}/tests/mainify_package/impl.py +0 -0
  185. {fal-1.47.0 → fal-1.49.0}/tests/mainify_package/utils.py +0 -0
  186. {fal-1.47.0 → fal-1.49.0}/tests/mainify_target.py +0 -0
  187. {fal-1.47.0 → fal-1.49.0}/tests/test_apps.py +0 -0
  188. {fal-1.47.0 → fal-1.49.0}/tests/test_file_sync.py +0 -0
  189. {fal-1.47.0 → fal-1.49.0}/tests/test_files.py +0 -0
  190. {fal-1.47.0 → fal-1.49.0}/tests/test_kv.py +0 -0
  191. {fal-1.47.0 → fal-1.49.0}/tests/test_stability.py +0 -0
  192. {fal-1.47.0 → fal-1.49.0}/tests/toolkit/file/providers/test_fal_retry.py +0 -0
  193. {fal-1.47.0 → fal-1.49.0}/tests/toolkit/file_test.py +0 -0
  194. {fal-1.47.0 → fal-1.49.0}/tests/toolkit/image_test.py +0 -0
  195. {fal-1.47.0 → fal-1.49.0}/tests/toolkit/test_types.py +0 -0
  196. {fal-1.47.0 → fal-1.49.0}/tests/toolkit/utils/retry.py +0 -0
  197. {fal-1.47.0 → fal-1.49.0}/tests/unit/distributed/test_integration.py +0 -0
  198. {fal-1.47.0 → fal-1.49.0}/tests/unit/distributed/test_utils.py +0 -0
  199. {fal-1.47.0 → fal-1.49.0}/tests/unit/distributed/test_worker.py +0 -0
  200. {fal-1.47.0 → fal-1.49.0}/tests/unit/test_app.py +0 -0
  201. {fal-1.47.0 → fal-1.49.0}/tools/demo_script.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fal
3
- Version: 1.47.0
3
+ Version: 1.49.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
@@ -42,6 +42,7 @@ Requires-Dist: cookiecutter
42
42
  Requires-Dist: tomli<3,>2
43
43
  Requires-Dist: tomli-w<2,>=1
44
44
  Requires-Dist: fsspec
45
+ Requires-Dist: tblib<3.2.0
45
46
  Provides-Extra: docs
46
47
  Requires-Dist: sphinx<8.2.0; extra == "docs"
47
48
  Requires-Dist: sphinx-rtd-theme; extra == "docs"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fal
3
- Version: 1.47.0
3
+ Version: 1.49.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
@@ -42,6 +42,7 @@ Requires-Dist: cookiecutter
42
42
  Requires-Dist: tomli<3,>2
43
43
  Requires-Dist: tomli-w<2,>=1
44
44
  Requires-Dist: fsspec
45
+ Requires-Dist: tblib<3.2.0
45
46
  Provides-Extra: docs
46
47
  Requires-Dist: sphinx<8.2.0; extra == "docs"
47
48
  Requires-Dist: sphinx-rtd-theme; extra == "docs"
@@ -34,6 +34,7 @@ cookiecutter
34
34
  tomli<3,>2
35
35
  tomli-w<2,>=1
36
36
  fsspec
37
+ tblib<3.2.0
37
38
 
38
39
  [:python_version < "3.10"]
39
40
  importlib-metadata>=4.4
@@ -62,6 +62,7 @@ dependencies = [
62
62
  "tomli>2,<3",
63
63
  "tomli-w>=1,<2",
64
64
  "fsspec",
65
+ "tblib<3.2.0",
65
66
  ]
66
67
 
67
68
  [project.optional-dependencies]
@@ -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.47.0'
32
- __version_tuple__ = version_tuple = (1, 47, 0)
31
+ __version__ = version = '1.49.0'
32
+ __version_tuple__ = version_tuple = (1, 49, 0)
33
33
 
34
34
  __commit_id__ = commit_id = None
@@ -4,7 +4,7 @@ import os
4
4
  from dataclasses import dataclass
5
5
  from typing import List, Optional
6
6
 
7
- from fal.api import FAL_SERVERLESS_DEFAULT_URL
7
+ from fal.api import FAL_SERVERLESS_DEFAULT_URL, FalServerlessHost
8
8
  from fal.sdk import (
9
9
  AliasInfo,
10
10
  Credentials,
@@ -114,3 +114,10 @@ class SyncServerlessClient:
114
114
  os.environ["FAL_PROFILE"] = prev
115
115
 
116
116
  return get_default_credentials(team=self.team)
117
+
118
+ def _create_host(self, *, local_file_path: str = "") -> FalServerlessHost:
119
+ return FalServerlessHost(
120
+ self._grpc_host,
121
+ local_file_path=local_file_path,
122
+ credentials=self._credentials,
123
+ )
@@ -87,7 +87,7 @@ def _deploy_from_reference(
87
87
  strategy: Optional[DeploymentStrategyLiteral],
88
88
  scale: bool,
89
89
  ) -> DeploymentResult:
90
- from fal.api import FalServerlessError, FalServerlessHost
90
+ from fal.api import FalServerlessError
91
91
  from fal.utils import load_function_from
92
92
 
93
93
  file_path, func_name = app_ref
@@ -106,7 +106,7 @@ def _deploy_from_reference(
106
106
  file_path = str(file_path) # type: ignore
107
107
 
108
108
  user = _get_user()
109
- host = FalServerlessHost(client._grpc_host, local_file_path=str(file_path))
109
+ host = client._create_host(local_file_path=str(file_path))
110
110
  loaded = load_function_from(
111
111
  host,
112
112
  file_path, # type: ignore
@@ -42,6 +42,13 @@ def _mv(args):
42
42
  fs.mv(args.source, args.destination)
43
43
 
44
44
 
45
+ def _rm(args):
46
+ from fal.files import FalFileSystem
47
+
48
+ fs = FalFileSystem()
49
+ fs.rm(args.path)
50
+
51
+
45
52
  def add_parser(main_subparsers, parents):
46
53
  files_help = "Manage fal files."
47
54
  parser = main_subparsers.add_parser(
@@ -126,3 +133,13 @@ def add_parser(main_subparsers, parents):
126
133
  mv_parser.add_argument("source", type=str, help="Remote source path")
127
134
  mv_parser.add_argument("destination", type=str, help="Remote destination path")
128
135
  mv_parser.set_defaults(func=_mv)
136
+
137
+ rm_help = "Recursively remove a remote file or directory."
138
+ rm_parser = subparsers.add_parser(
139
+ "rm",
140
+ description=rm_help,
141
+ help=rm_help,
142
+ parents=parents,
143
+ )
144
+ rm_parser.add_argument("path", type=str, help="Remote path")
145
+ rm_parser.set_defaults(func=_rm)
@@ -5,7 +5,7 @@ from .parser import FalClientParser, RefAction
5
5
 
6
6
 
7
7
  def _run(args):
8
- from fal.api import FalServerlessHost
8
+ from fal.api.client import SyncServerlessClient
9
9
  from fal.utils import load_function_from
10
10
 
11
11
  if is_app_name(args.func_ref):
@@ -17,7 +17,8 @@ def _run(args):
17
17
  # Turn relative path into absolute path for files
18
18
  file_path = str(Path(file_path).absolute())
19
19
 
20
- host = FalServerlessHost(args.host, local_file_path=file_path)
20
+ client = SyncServerlessClient(host=args.host, team=args.team)
21
+ host = client._create_host(local_file_path=file_path)
21
22
 
22
23
  loaded = load_function_from(host, file_path, func_name)
23
24
 
@@ -45,11 +45,11 @@ def mock_args(host, func_ref: Tuple[str, Optional[str]]):
45
45
 
46
46
  @patch("fal.cli._utils.find_pyproject_toml", return_value="pyproject.toml")
47
47
  @patch("fal.cli._utils.parse_pyproject_toml")
48
- @patch("fal.api.FalServerlessHost")
48
+ @patch("fal.api.client.SyncServerlessClient._create_host")
49
49
  @patch("fal.utils.load_function_from")
50
50
  def test_run_with_toml_success(
51
51
  mock_load_function_from,
52
- mock_fal_serverless_host,
52
+ mock_create_host,
53
53
  mock_parse_toml,
54
54
  mock_find_toml,
55
55
  mock_parse_pyproject_toml,
@@ -57,9 +57,9 @@ def test_run_with_toml_success(
57
57
  mock_parse_toml.return_value = mock_parse_pyproject_toml
58
58
 
59
59
  host = mocked_fal_serverless_host("my-host")
60
- mock_fal_serverless_host.return_value = host
60
+ mock_create_host.return_value = host
61
61
 
62
- args = mock_args(func_ref=("my-app", None), host=host)
62
+ args = mock_args(func_ref=("my-app", None), host="my-host")
63
63
 
64
64
  _run(args)
65
65
 
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
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes