fal 1.30.1__tar.gz → 1.32.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.30.1/fal.egg-info → fal-1.32.0}/PKG-INFO +1 -1
  2. {fal-1.30.1 → fal-1.32.0/fal.egg-info}/PKG-INFO +1 -1
  3. {fal-1.30.1 → fal-1.32.0}/src/fal/_fal_version.py +2 -2
  4. {fal-1.30.1 → fal-1.32.0}/src/fal/api.py +20 -0
  5. {fal-1.30.1 → fal-1.32.0}/src/fal/app.py +1 -0
  6. {fal-1.30.1 → fal-1.32.0}/src/fal/cli/files.py +18 -0
  7. {fal-1.30.1 → fal-1.32.0}/src/fal/files.py +14 -0
  8. {fal-1.30.1 → fal-1.32.0}/.gitignore +0 -0
  9. {fal-1.30.1 → fal-1.32.0}/Makefile +0 -0
  10. {fal-1.30.1 → fal-1.32.0}/README.md +0 -0
  11. {fal-1.30.1 → fal-1.32.0}/docs/conf.py +0 -0
  12. {fal-1.30.1 → fal-1.32.0}/docs/index.rst +0 -0
  13. {fal-1.30.1 → fal-1.32.0}/fal.egg-info/SOURCES.txt +0 -0
  14. {fal-1.30.1 → fal-1.32.0}/fal.egg-info/dependency_links.txt +0 -0
  15. {fal-1.30.1 → fal-1.32.0}/fal.egg-info/entry_points.txt +0 -0
  16. {fal-1.30.1 → fal-1.32.0}/fal.egg-info/requires.txt +0 -0
  17. {fal-1.30.1 → fal-1.32.0}/fal.egg-info/top_level.txt +0 -0
  18. {fal-1.30.1 → fal-1.32.0}/openapi-fal-rest/README.md +0 -0
  19. {fal-1.30.1 → fal-1.32.0}/openapi-fal-rest/openapi_fal_rest/__init__.py +0 -0
  20. {fal-1.30.1 → fal-1.32.0}/openapi-fal-rest/openapi_fal_rest/api/__init__.py +0 -0
  21. {fal-1.30.1 → fal-1.32.0}/openapi-fal-rest/openapi_fal_rest/api/applications/__init__.py +0 -0
  22. {fal-1.30.1 → fal-1.32.0}/openapi-fal-rest/openapi_fal_rest/api/applications/app_metadata.py +0 -0
  23. {fal-1.30.1 → fal-1.32.0}/openapi-fal-rest/openapi_fal_rest/api/billing/__init__.py +0 -0
  24. {fal-1.30.1 → fal-1.32.0}/openapi-fal-rest/openapi_fal_rest/api/billing/get_user_details.py +0 -0
  25. {fal-1.30.1 → fal-1.32.0}/openapi-fal-rest/openapi_fal_rest/api/comfy/__init__.py +0 -0
  26. {fal-1.30.1 → fal-1.32.0}/openapi-fal-rest/openapi_fal_rest/api/comfy/create_workflow.py +0 -0
  27. {fal-1.30.1 → fal-1.32.0}/openapi-fal-rest/openapi_fal_rest/api/comfy/delete_workflow.py +0 -0
  28. {fal-1.30.1 → fal-1.32.0}/openapi-fal-rest/openapi_fal_rest/api/comfy/get_workflow.py +0 -0
  29. {fal-1.30.1 → fal-1.32.0}/openapi-fal-rest/openapi_fal_rest/api/comfy/list_user_workflows.py +0 -0
  30. {fal-1.30.1 → fal-1.32.0}/openapi-fal-rest/openapi_fal_rest/api/comfy/update_workflow.py +0 -0
  31. {fal-1.30.1 → fal-1.32.0}/openapi-fal-rest/openapi_fal_rest/api/files/__init__.py +0 -0
  32. {fal-1.30.1 → fal-1.32.0}/openapi-fal-rest/openapi_fal_rest/api/files/check_dir_hash.py +0 -0
  33. {fal-1.30.1 → fal-1.32.0}/openapi-fal-rest/openapi_fal_rest/api/files/upload_local_file.py +0 -0
  34. {fal-1.30.1 → fal-1.32.0}/openapi-fal-rest/openapi_fal_rest/api/users/__init__.py +0 -0
  35. {fal-1.30.1 → fal-1.32.0}/openapi-fal-rest/openapi_fal_rest/api/users/get_current_user.py +0 -0
  36. {fal-1.30.1 → fal-1.32.0}/openapi-fal-rest/openapi_fal_rest/api/workflows/__init__.py +0 -0
  37. {fal-1.30.1 → fal-1.32.0}/openapi-fal-rest/openapi_fal_rest/api/workflows/create_workflow.py +0 -0
  38. {fal-1.30.1 → fal-1.32.0}/openapi-fal-rest/openapi_fal_rest/api/workflows/delete_workflow.py +0 -0
  39. {fal-1.30.1 → fal-1.32.0}/openapi-fal-rest/openapi_fal_rest/api/workflows/get_workflow.py +0 -0
  40. {fal-1.30.1 → fal-1.32.0}/openapi-fal-rest/openapi_fal_rest/api/workflows/list_user_workflows.py +0 -0
  41. {fal-1.30.1 → fal-1.32.0}/openapi-fal-rest/openapi_fal_rest/api/workflows/update_workflow.py +0 -0
  42. {fal-1.30.1 → fal-1.32.0}/openapi-fal-rest/openapi_fal_rest/client.py +0 -0
  43. {fal-1.30.1 → fal-1.32.0}/openapi-fal-rest/openapi_fal_rest/errors.py +0 -0
  44. {fal-1.30.1 → fal-1.32.0}/openapi-fal-rest/openapi_fal_rest/models/__init__.py +0 -0
  45. {fal-1.30.1 → fal-1.32.0}/openapi-fal-rest/openapi_fal_rest/models/app_metadata_response_app_metadata.py +0 -0
  46. {fal-1.30.1 → fal-1.32.0}/openapi-fal-rest/openapi_fal_rest/models/body_upload_local_file.py +0 -0
  47. {fal-1.30.1 → fal-1.32.0}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_detail.py +0 -0
  48. {fal-1.30.1 → fal-1.32.0}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_item.py +0 -0
  49. {fal-1.30.1 → fal-1.32.0}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_schema.py +0 -0
  50. {fal-1.30.1 → fal-1.32.0}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_schema_extra_data.py +0 -0
  51. {fal-1.30.1 → fal-1.32.0}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_schema_fal_inputs.py +0 -0
  52. {fal-1.30.1 → fal-1.32.0}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_schema_fal_inputs_dev_info.py +0 -0
  53. {fal-1.30.1 → fal-1.32.0}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_schema_prompt.py +0 -0
  54. {fal-1.30.1 → fal-1.32.0}/openapi-fal-rest/openapi_fal_rest/models/current_user.py +0 -0
  55. {fal-1.30.1 → fal-1.32.0}/openapi-fal-rest/openapi_fal_rest/models/customer_details.py +0 -0
  56. {fal-1.30.1 → fal-1.32.0}/openapi-fal-rest/openapi_fal_rest/models/hash_check.py +0 -0
  57. {fal-1.30.1 → fal-1.32.0}/openapi-fal-rest/openapi_fal_rest/models/http_validation_error.py +0 -0
  58. {fal-1.30.1 → fal-1.32.0}/openapi-fal-rest/openapi_fal_rest/models/lock_reason.py +0 -0
  59. {fal-1.30.1 → fal-1.32.0}/openapi-fal-rest/openapi_fal_rest/models/page_comfy_workflow_item.py +0 -0
  60. {fal-1.30.1 → fal-1.32.0}/openapi-fal-rest/openapi_fal_rest/models/page_workflow_item.py +0 -0
  61. {fal-1.30.1 → fal-1.32.0}/openapi-fal-rest/openapi_fal_rest/models/team_role.py +0 -0
  62. {fal-1.30.1 → fal-1.32.0}/openapi-fal-rest/openapi_fal_rest/models/typed_comfy_workflow.py +0 -0
  63. {fal-1.30.1 → fal-1.32.0}/openapi-fal-rest/openapi_fal_rest/models/typed_comfy_workflow_update.py +0 -0
  64. {fal-1.30.1 → fal-1.32.0}/openapi-fal-rest/openapi_fal_rest/models/typed_workflow.py +0 -0
  65. {fal-1.30.1 → fal-1.32.0}/openapi-fal-rest/openapi_fal_rest/models/typed_workflow_update.py +0 -0
  66. {fal-1.30.1 → fal-1.32.0}/openapi-fal-rest/openapi_fal_rest/models/user_member.py +0 -0
  67. {fal-1.30.1 → fal-1.32.0}/openapi-fal-rest/openapi_fal_rest/models/validation_error.py +0 -0
  68. {fal-1.30.1 → fal-1.32.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_contents.py +0 -0
  69. {fal-1.30.1 → fal-1.32.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_contents_metadata.py +0 -0
  70. {fal-1.30.1 → fal-1.32.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_contents_nodes.py +0 -0
  71. {fal-1.30.1 → fal-1.32.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_contents_output.py +0 -0
  72. {fal-1.30.1 → fal-1.32.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_detail.py +0 -0
  73. {fal-1.30.1 → fal-1.32.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_detail_contents.py +0 -0
  74. {fal-1.30.1 → fal-1.32.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_item.py +0 -0
  75. {fal-1.30.1 → fal-1.32.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_node.py +0 -0
  76. {fal-1.30.1 → fal-1.32.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_node_type.py +0 -0
  77. {fal-1.30.1 → fal-1.32.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_schema.py +0 -0
  78. {fal-1.30.1 → fal-1.32.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_schema_input.py +0 -0
  79. {fal-1.30.1 → fal-1.32.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_schema_output.py +0 -0
  80. {fal-1.30.1 → fal-1.32.0}/openapi-fal-rest/openapi_fal_rest/py.typed +0 -0
  81. {fal-1.30.1 → fal-1.32.0}/openapi-fal-rest/openapi_fal_rest/types.py +0 -0
  82. {fal-1.30.1 → fal-1.32.0}/openapi-fal-rest/pyproject.toml +0 -0
  83. {fal-1.30.1 → fal-1.32.0}/openapi_rest.config.yaml +0 -0
  84. {fal-1.30.1 → fal-1.32.0}/pyproject.toml +0 -0
  85. {fal-1.30.1 → fal-1.32.0}/setup.cfg +0 -0
  86. {fal-1.30.1 → fal-1.32.0}/src/fal/__init__.py +0 -0
  87. {fal-1.30.1 → fal-1.32.0}/src/fal/__main__.py +0 -0
  88. {fal-1.30.1 → fal-1.32.0}/src/fal/_serialization.py +0 -0
  89. {fal-1.30.1 → fal-1.32.0}/src/fal/_version.py +0 -0
  90. {fal-1.30.1 → fal-1.32.0}/src/fal/apps.py +0 -0
  91. {fal-1.30.1 → fal-1.32.0}/src/fal/auth/__init__.py +0 -0
  92. {fal-1.30.1 → fal-1.32.0}/src/fal/auth/auth0.py +0 -0
  93. {fal-1.30.1 → fal-1.32.0}/src/fal/auth/local.py +0 -0
  94. {fal-1.30.1 → fal-1.32.0}/src/fal/cli/__init__.py +0 -0
  95. {fal-1.30.1 → fal-1.32.0}/src/fal/cli/_utils.py +0 -0
  96. {fal-1.30.1 → fal-1.32.0}/src/fal/cli/api.py +0 -0
  97. {fal-1.30.1 → fal-1.32.0}/src/fal/cli/apps.py +0 -0
  98. {fal-1.30.1 → fal-1.32.0}/src/fal/cli/auth.py +0 -0
  99. {fal-1.30.1 → fal-1.32.0}/src/fal/cli/cli_nested_json.py +0 -0
  100. {fal-1.30.1 → fal-1.32.0}/src/fal/cli/create.py +0 -0
  101. {fal-1.30.1 → fal-1.32.0}/src/fal/cli/debug.py +0 -0
  102. {fal-1.30.1 → fal-1.32.0}/src/fal/cli/deploy.py +0 -0
  103. {fal-1.30.1 → fal-1.32.0}/src/fal/cli/doctor.py +0 -0
  104. {fal-1.30.1 → fal-1.32.0}/src/fal/cli/keys.py +0 -0
  105. {fal-1.30.1 → fal-1.32.0}/src/fal/cli/main.py +0 -0
  106. {fal-1.30.1 → fal-1.32.0}/src/fal/cli/parser.py +0 -0
  107. {fal-1.30.1 → fal-1.32.0}/src/fal/cli/profile.py +0 -0
  108. {fal-1.30.1 → fal-1.32.0}/src/fal/cli/run.py +0 -0
  109. {fal-1.30.1 → fal-1.32.0}/src/fal/cli/runners.py +0 -0
  110. {fal-1.30.1 → fal-1.32.0}/src/fal/cli/secrets.py +0 -0
  111. {fal-1.30.1 → fal-1.32.0}/src/fal/cli/teams.py +0 -0
  112. {fal-1.30.1 → fal-1.32.0}/src/fal/config.py +0 -0
  113. {fal-1.30.1 → fal-1.32.0}/src/fal/console/__init__.py +0 -0
  114. {fal-1.30.1 → fal-1.32.0}/src/fal/console/icons.py +0 -0
  115. {fal-1.30.1 → fal-1.32.0}/src/fal/console/ux.py +0 -0
  116. {fal-1.30.1 → fal-1.32.0}/src/fal/container.py +0 -0
  117. {fal-1.30.1 → fal-1.32.0}/src/fal/exceptions/__init__.py +0 -0
  118. {fal-1.30.1 → fal-1.32.0}/src/fal/exceptions/_base.py +0 -0
  119. {fal-1.30.1 → fal-1.32.0}/src/fal/exceptions/_cuda.py +0 -0
  120. {fal-1.30.1 → fal-1.32.0}/src/fal/exceptions/auth.py +0 -0
  121. {fal-1.30.1 → fal-1.32.0}/src/fal/flags.py +0 -0
  122. {fal-1.30.1 → fal-1.32.0}/src/fal/logging/__init__.py +0 -0
  123. {fal-1.30.1 → fal-1.32.0}/src/fal/logging/isolate.py +0 -0
  124. {fal-1.30.1 → fal-1.32.0}/src/fal/logging/style.py +0 -0
  125. {fal-1.30.1 → fal-1.32.0}/src/fal/logging/trace.py +0 -0
  126. {fal-1.30.1 → fal-1.32.0}/src/fal/logging/user.py +0 -0
  127. {fal-1.30.1 → fal-1.32.0}/src/fal/project.py +0 -0
  128. {fal-1.30.1 → fal-1.32.0}/src/fal/py.typed +0 -0
  129. {fal-1.30.1 → fal-1.32.0}/src/fal/rest_client.py +0 -0
  130. {fal-1.30.1 → fal-1.32.0}/src/fal/sdk.py +0 -0
  131. {fal-1.30.1 → fal-1.32.0}/src/fal/sync.py +0 -0
  132. {fal-1.30.1 → fal-1.32.0}/src/fal/toolkit/__init__.py +0 -0
  133. {fal-1.30.1 → fal-1.32.0}/src/fal/toolkit/audio/__init__.py +0 -0
  134. {fal-1.30.1 → fal-1.32.0}/src/fal/toolkit/audio/audio.py +0 -0
  135. {fal-1.30.1 → fal-1.32.0}/src/fal/toolkit/exceptions.py +0 -0
  136. {fal-1.30.1 → fal-1.32.0}/src/fal/toolkit/file/__init__.py +0 -0
  137. {fal-1.30.1 → fal-1.32.0}/src/fal/toolkit/file/file.py +0 -0
  138. {fal-1.30.1 → fal-1.32.0}/src/fal/toolkit/file/providers/fal.py +0 -0
  139. {fal-1.30.1 → fal-1.32.0}/src/fal/toolkit/file/providers/gcp.py +0 -0
  140. {fal-1.30.1 → fal-1.32.0}/src/fal/toolkit/file/providers/r2.py +0 -0
  141. {fal-1.30.1 → fal-1.32.0}/src/fal/toolkit/file/providers/s3.py +0 -0
  142. {fal-1.30.1 → fal-1.32.0}/src/fal/toolkit/file/types.py +0 -0
  143. {fal-1.30.1 → fal-1.32.0}/src/fal/toolkit/image/__init__.py +0 -0
  144. {fal-1.30.1 → fal-1.32.0}/src/fal/toolkit/image/image.py +0 -0
  145. {fal-1.30.1 → fal-1.32.0}/src/fal/toolkit/image/nsfw_filter/__init__.py +0 -0
  146. {fal-1.30.1 → fal-1.32.0}/src/fal/toolkit/image/nsfw_filter/env.py +0 -0
  147. {fal-1.30.1 → fal-1.32.0}/src/fal/toolkit/image/nsfw_filter/inference.py +0 -0
  148. {fal-1.30.1 → fal-1.32.0}/src/fal/toolkit/image/nsfw_filter/model.py +0 -0
  149. {fal-1.30.1 → fal-1.32.0}/src/fal/toolkit/image/nsfw_filter/requirements.txt +0 -0
  150. {fal-1.30.1 → fal-1.32.0}/src/fal/toolkit/image/safety_checker.py +0 -0
  151. {fal-1.30.1 → fal-1.32.0}/src/fal/toolkit/kv.py +0 -0
  152. {fal-1.30.1 → fal-1.32.0}/src/fal/toolkit/optimize.py +0 -0
  153. {fal-1.30.1 → fal-1.32.0}/src/fal/toolkit/types.py +0 -0
  154. {fal-1.30.1 → fal-1.32.0}/src/fal/toolkit/utils/__init__.py +0 -0
  155. {fal-1.30.1 → fal-1.32.0}/src/fal/toolkit/utils/download_utils.py +0 -0
  156. {fal-1.30.1 → fal-1.32.0}/src/fal/toolkit/utils/endpoint.py +0 -0
  157. {fal-1.30.1 → fal-1.32.0}/src/fal/toolkit/utils/retry.py +0 -0
  158. {fal-1.30.1 → fal-1.32.0}/src/fal/toolkit/utils/setup_utils.py +0 -0
  159. {fal-1.30.1 → fal-1.32.0}/src/fal/toolkit/video/__init__.py +0 -0
  160. {fal-1.30.1 → fal-1.32.0}/src/fal/toolkit/video/video.py +0 -0
  161. {fal-1.30.1 → fal-1.32.0}/src/fal/utils.py +0 -0
  162. {fal-1.30.1 → fal-1.32.0}/src/fal/workflows.py +0 -0
  163. {fal-1.30.1 → fal-1.32.0}/tests/__init__.py +0 -0
  164. {fal-1.30.1 → fal-1.32.0}/tests/assets/cat.png +0 -0
  165. {fal-1.30.1 → fal-1.32.0}/tests/cli/__init__.py +0 -0
  166. {fal-1.30.1 → fal-1.32.0}/tests/cli/test_apps.py +0 -0
  167. {fal-1.30.1 → fal-1.32.0}/tests/cli/test_auth.py +0 -0
  168. {fal-1.30.1 → fal-1.32.0}/tests/cli/test_deploy.py +0 -0
  169. {fal-1.30.1 → fal-1.32.0}/tests/cli/test_keys.py +0 -0
  170. {fal-1.30.1 → fal-1.32.0}/tests/cli/test_run.py +0 -0
  171. {fal-1.30.1 → fal-1.32.0}/tests/cli/test_secrets.py +0 -0
  172. {fal-1.30.1 → fal-1.32.0}/tests/conftest.py +0 -0
  173. {fal-1.30.1 → fal-1.32.0}/tests/integration_test.py +0 -0
  174. {fal-1.30.1 → fal-1.32.0}/tests/mainify_package/__init__.py +0 -0
  175. {fal-1.30.1 → fal-1.32.0}/tests/mainify_package/impl.py +0 -0
  176. {fal-1.30.1 → fal-1.32.0}/tests/mainify_package/utils.py +0 -0
  177. {fal-1.30.1 → fal-1.32.0}/tests/mainify_target.py +0 -0
  178. {fal-1.30.1 → fal-1.32.0}/tests/test_apps.py +0 -0
  179. {fal-1.30.1 → fal-1.32.0}/tests/test_files.py +0 -0
  180. {fal-1.30.1 → fal-1.32.0}/tests/test_kv.py +0 -0
  181. {fal-1.30.1 → fal-1.32.0}/tests/test_stability.py +0 -0
  182. {fal-1.30.1 → fal-1.32.0}/tests/toolkit/file/providers/test_fal_retry.py +0 -0
  183. {fal-1.30.1 → fal-1.32.0}/tests/toolkit/file_test.py +0 -0
  184. {fal-1.30.1 → fal-1.32.0}/tests/toolkit/image_test.py +0 -0
  185. {fal-1.30.1 → fal-1.32.0}/tests/toolkit/test_types.py +0 -0
  186. {fal-1.30.1 → fal-1.32.0}/tests/toolkit/utils/retry.py +0 -0
  187. {fal-1.30.1 → fal-1.32.0}/tools/demo_script.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fal
3
- Version: 1.30.1
3
+ Version: 1.32.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
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fal
3
- Version: 1.30.1
3
+ Version: 1.32.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
@@ -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.30.1'
32
- __version_tuple__ = version_tuple = (1, 30, 1)
31
+ __version__ = version = '1.32.0'
32
+ __version_tuple__ = version_tuple = (1, 32, 0)
33
33
 
34
34
  __commit_id__ = commit_id = None
@@ -600,7 +600,27 @@ class FalServerlessHost(Host):
600
600
  kwargs: dict[str, Any],
601
601
  ) -> ReturnT:
602
602
  def result_handler(partial_result):
603
+ from fal.console import console
604
+
605
+ if service_urls := partial_result.service_urls:
606
+ console.print("Playground:")
607
+ endpoints = getattr(func, "_routes", ["/"]) # type: ignore[attr-defined]
608
+ for endpoint in endpoints:
609
+ console.print(f"\t{service_urls.playground}{endpoint}")
610
+ console.print("Synchronous Endpoints:")
611
+ for endpoint in endpoints:
612
+ console.print(f"\t{service_urls.run}{endpoint}")
613
+ console.print("Asynchronous Endpoints (Recommended):")
614
+ for endpoint in endpoints:
615
+ console.print(f"\t{service_urls.queue}{endpoint}")
616
+
603
617
  for log in partial_result.logs:
618
+ if (
619
+ "Access the playground at" in log.message
620
+ or "And API access through" in log.message
621
+ ):
622
+ # Obsolete messages from before service_urls were added.
623
+ continue
604
624
  self._log_printer.print(log)
605
625
 
606
626
  return self._run(func, options, args, kwargs, result_handler=result_handler)
@@ -110,6 +110,7 @@ def wrap_app(cls: type[App], **kwargs) -> IsolatedFunction:
110
110
  metadata["openapi"] = app.openapi()
111
111
 
112
112
  routes = app.collect_routes()
113
+ initialize_and_serve._routes = [r.path for r in routes.keys()] or ["/"] # type: ignore[attr-defined]
113
114
  realtime_app = any(route.is_websocket for route in routes)
114
115
 
115
116
  kind = cls.host_kwargs.pop("kind", "virtualenv")
@@ -35,6 +35,13 @@ def _upload_url(args):
35
35
  fs.put_file_from_url(args.url, args.remote_path)
36
36
 
37
37
 
38
+ def _mv(args):
39
+ from fal.files import FalFileSystem
40
+
41
+ fs = FalFileSystem()
42
+ fs.mv(args.source, args.destination)
43
+
44
+
38
45
  def add_parser(main_subparsers, parents):
39
46
  files_help = "Manage fal files."
40
47
  parser = main_subparsers.add_parser(
@@ -108,3 +115,14 @@ def add_parser(main_subparsers, parents):
108
115
  "remote_path", type=str, help="Remote path to upload to"
109
116
  )
110
117
  upload_url_parser.set_defaults(func=_upload_url)
118
+
119
+ mv_help = "Move or rename a remote file or directory."
120
+ mv_parser = subparsers.add_parser(
121
+ "mv",
122
+ description=mv_help,
123
+ help=mv_help,
124
+ parents=parents,
125
+ )
126
+ mv_parser.add_argument("source", type=str, help="Remote source path")
127
+ mv_parser.add_argument("destination", type=str, help="Remote destination path")
128
+ mv_parser.set_defaults(func=_mv)
@@ -234,3 +234,17 @@ class FalFileSystem(AbstractFileSystem):
234
234
  f"/files/file/{abs_path}",
235
235
  )
236
236
  self.dircache.clear()
237
+
238
+ def rename(self, path, destination, **kwargs):
239
+ abs_path = self._abspath(path)
240
+ abs_dest = self._abspath(destination)
241
+ self._request(
242
+ "POST",
243
+ f"/files/rename/{abs_path}",
244
+ json={"destination": abs_dest},
245
+ )
246
+ self.dircache.clear()
247
+
248
+ def mv(self, path1, path2, recursive=False, maxdepth=None, **kwargs):
249
+ # Delegate to server-side rename
250
+ self.rename(path1, path2)
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes