fal 0.12.4__tar.gz → 0.12.5__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 (88) hide show
  1. {fal-0.12.4 → fal-0.12.5}/PKG-INFO +1 -1
  2. {fal-0.12.4 → fal-0.12.5}/pyproject.toml +1 -1
  3. {fal-0.12.4 → fal-0.12.5}/setup.py +1 -1
  4. {fal-0.12.4 → fal-0.12.5}/src/fal/cli.py +10 -5
  5. {fal-0.12.4 → fal-0.12.5}/README.md +0 -0
  6. {fal-0.12.4 → fal-0.12.5}/openapi-fal-rest/openapi_fal_rest/__init__.py +0 -0
  7. {fal-0.12.4 → fal-0.12.5}/openapi-fal-rest/openapi_fal_rest/api/__init__.py +0 -0
  8. {fal-0.12.4 → fal-0.12.5}/openapi-fal-rest/openapi_fal_rest/api/applications/__init__.py +0 -0
  9. {fal-0.12.4 → fal-0.12.5}/openapi-fal-rest/openapi_fal_rest/api/applications/app_metadata.py +0 -0
  10. {fal-0.12.4 → fal-0.12.5}/openapi-fal-rest/openapi_fal_rest/api/billing/__init__.py +0 -0
  11. {fal-0.12.4 → fal-0.12.5}/openapi-fal-rest/openapi_fal_rest/api/billing/get_user_details.py +0 -0
  12. {fal-0.12.4 → fal-0.12.5}/openapi-fal-rest/openapi_fal_rest/api/files/__init__.py +0 -0
  13. {fal-0.12.4 → fal-0.12.5}/openapi-fal-rest/openapi_fal_rest/api/files/check_dir_hash.py +0 -0
  14. {fal-0.12.4 → fal-0.12.5}/openapi-fal-rest/openapi_fal_rest/api/files/upload_local_file.py +0 -0
  15. {fal-0.12.4 → fal-0.12.5}/openapi-fal-rest/openapi_fal_rest/api/workflows/__init__.py +0 -0
  16. {fal-0.12.4 → fal-0.12.5}/openapi-fal-rest/openapi_fal_rest/api/workflows/create_or_update_workflow_workflows_post.py +0 -0
  17. {fal-0.12.4 → fal-0.12.5}/openapi-fal-rest/openapi_fal_rest/api/workflows/delete_workflow_workflows_user_id_workflow_name_delete.py +0 -0
  18. {fal-0.12.4 → fal-0.12.5}/openapi-fal-rest/openapi_fal_rest/api/workflows/execute_workflow_workflows_user_id_workflow_name_post.py +0 -0
  19. {fal-0.12.4 → fal-0.12.5}/openapi-fal-rest/openapi_fal_rest/api/workflows/get_workflow_workflows_user_id_workflow_name_get.py +0 -0
  20. {fal-0.12.4 → fal-0.12.5}/openapi-fal-rest/openapi_fal_rest/api/workflows/get_workflows_workflows_get.py +0 -0
  21. {fal-0.12.4 → fal-0.12.5}/openapi-fal-rest/openapi_fal_rest/client.py +0 -0
  22. {fal-0.12.4 → fal-0.12.5}/openapi-fal-rest/openapi_fal_rest/errors.py +0 -0
  23. {fal-0.12.4 → fal-0.12.5}/openapi-fal-rest/openapi_fal_rest/models/__init__.py +0 -0
  24. {fal-0.12.4 → fal-0.12.5}/openapi-fal-rest/openapi_fal_rest/models/app_metadata_response_app_metadata.py +0 -0
  25. {fal-0.12.4 → fal-0.12.5}/openapi-fal-rest/openapi_fal_rest/models/body_upload_local_file.py +0 -0
  26. {fal-0.12.4 → fal-0.12.5}/openapi-fal-rest/openapi_fal_rest/models/customer_details.py +0 -0
  27. {fal-0.12.4 → fal-0.12.5}/openapi-fal-rest/openapi_fal_rest/models/execute_workflow_workflows_user_id_workflow_name_post_json_body_type_0.py +0 -0
  28. {fal-0.12.4 → fal-0.12.5}/openapi-fal-rest/openapi_fal_rest/models/execute_workflow_workflows_user_id_workflow_name_post_response_200_type_0.py +0 -0
  29. {fal-0.12.4 → fal-0.12.5}/openapi-fal-rest/openapi_fal_rest/models/hash_check.py +0 -0
  30. {fal-0.12.4 → fal-0.12.5}/openapi-fal-rest/openapi_fal_rest/models/http_validation_error.py +0 -0
  31. {fal-0.12.4 → fal-0.12.5}/openapi-fal-rest/openapi_fal_rest/models/lock_reason.py +0 -0
  32. {fal-0.12.4 → fal-0.12.5}/openapi-fal-rest/openapi_fal_rest/models/page_workflow_item.py +0 -0
  33. {fal-0.12.4 → fal-0.12.5}/openapi-fal-rest/openapi_fal_rest/models/typed_workflow.py +0 -0
  34. {fal-0.12.4 → fal-0.12.5}/openapi-fal-rest/openapi_fal_rest/models/validation_error.py +0 -0
  35. {fal-0.12.4 → fal-0.12.5}/openapi-fal-rest/openapi_fal_rest/models/workflow_contents.py +0 -0
  36. {fal-0.12.4 → fal-0.12.5}/openapi-fal-rest/openapi_fal_rest/models/workflow_contents_nodes.py +0 -0
  37. {fal-0.12.4 → fal-0.12.5}/openapi-fal-rest/openapi_fal_rest/models/workflow_contents_output.py +0 -0
  38. {fal-0.12.4 → fal-0.12.5}/openapi-fal-rest/openapi_fal_rest/models/workflow_detail.py +0 -0
  39. {fal-0.12.4 → fal-0.12.5}/openapi-fal-rest/openapi_fal_rest/models/workflow_detail_contents_type_0.py +0 -0
  40. {fal-0.12.4 → fal-0.12.5}/openapi-fal-rest/openapi_fal_rest/models/workflow_item.py +0 -0
  41. {fal-0.12.4 → fal-0.12.5}/openapi-fal-rest/openapi_fal_rest/models/workflow_node.py +0 -0
  42. {fal-0.12.4 → fal-0.12.5}/openapi-fal-rest/openapi_fal_rest/models/workflow_node_type.py +0 -0
  43. {fal-0.12.4 → fal-0.12.5}/openapi-fal-rest/openapi_fal_rest/models/workflow_schema.py +0 -0
  44. {fal-0.12.4 → fal-0.12.5}/openapi-fal-rest/openapi_fal_rest/models/workflow_schema_input.py +0 -0
  45. {fal-0.12.4 → fal-0.12.5}/openapi-fal-rest/openapi_fal_rest/models/workflow_schema_output.py +0 -0
  46. {fal-0.12.4 → fal-0.12.5}/openapi-fal-rest/openapi_fal_rest/py.typed +0 -0
  47. {fal-0.12.4 → fal-0.12.5}/openapi-fal-rest/openapi_fal_rest/types.py +0 -0
  48. {fal-0.12.4 → fal-0.12.5}/src/fal/__init__.py +0 -0
  49. {fal-0.12.4 → fal-0.12.5}/src/fal/_serialization.py +0 -0
  50. {fal-0.12.4 → fal-0.12.5}/src/fal/api.py +0 -0
  51. {fal-0.12.4 → fal-0.12.5}/src/fal/app.py +0 -0
  52. {fal-0.12.4 → fal-0.12.5}/src/fal/apps.py +0 -0
  53. {fal-0.12.4 → fal-0.12.5}/src/fal/auth/__init__.py +0 -0
  54. {fal-0.12.4 → fal-0.12.5}/src/fal/auth/auth0.py +0 -0
  55. {fal-0.12.4 → fal-0.12.5}/src/fal/auth/local.py +0 -0
  56. {fal-0.12.4 → fal-0.12.5}/src/fal/console/__init__.py +0 -0
  57. {fal-0.12.4 → fal-0.12.5}/src/fal/console/icons.py +0 -0
  58. {fal-0.12.4 → fal-0.12.5}/src/fal/console/ux.py +0 -0
  59. {fal-0.12.4 → fal-0.12.5}/src/fal/env.py +0 -0
  60. {fal-0.12.4 → fal-0.12.5}/src/fal/exceptions/__init__.py +0 -0
  61. {fal-0.12.4 → fal-0.12.5}/src/fal/exceptions/_base.py +0 -0
  62. {fal-0.12.4 → fal-0.12.5}/src/fal/exceptions/auth.py +0 -0
  63. {fal-0.12.4 → fal-0.12.5}/src/fal/exceptions/handlers.py +0 -0
  64. {fal-0.12.4 → fal-0.12.5}/src/fal/flags.py +0 -0
  65. {fal-0.12.4 → fal-0.12.5}/src/fal/logging/__init__.py +0 -0
  66. {fal-0.12.4 → fal-0.12.5}/src/fal/logging/isolate.py +0 -0
  67. {fal-0.12.4 → fal-0.12.5}/src/fal/logging/style.py +0 -0
  68. {fal-0.12.4 → fal-0.12.5}/src/fal/logging/trace.py +0 -0
  69. {fal-0.12.4 → fal-0.12.5}/src/fal/logging/user.py +0 -0
  70. {fal-0.12.4 → fal-0.12.5}/src/fal/py.typed +0 -0
  71. {fal-0.12.4 → fal-0.12.5}/src/fal/rest_client.py +0 -0
  72. {fal-0.12.4 → fal-0.12.5}/src/fal/sdk.py +0 -0
  73. {fal-0.12.4 → fal-0.12.5}/src/fal/sync.py +0 -0
  74. {fal-0.12.4 → fal-0.12.5}/src/fal/toolkit/__init__.py +0 -0
  75. {fal-0.12.4 → fal-0.12.5}/src/fal/toolkit/exceptions.py +0 -0
  76. {fal-0.12.4 → fal-0.12.5}/src/fal/toolkit/file/__init__.py +0 -0
  77. {fal-0.12.4 → fal-0.12.5}/src/fal/toolkit/file/file.py +0 -0
  78. {fal-0.12.4 → fal-0.12.5}/src/fal/toolkit/file/providers/fal.py +0 -0
  79. {fal-0.12.4 → fal-0.12.5}/src/fal/toolkit/file/providers/gcp.py +0 -0
  80. {fal-0.12.4 → fal-0.12.5}/src/fal/toolkit/file/providers/r2.py +0 -0
  81. {fal-0.12.4 → fal-0.12.5}/src/fal/toolkit/file/types.py +0 -0
  82. {fal-0.12.4 → fal-0.12.5}/src/fal/toolkit/image/__init__.py +0 -0
  83. {fal-0.12.4 → fal-0.12.5}/src/fal/toolkit/image/image.py +0 -0
  84. {fal-0.12.4 → fal-0.12.5}/src/fal/toolkit/mainify.py +0 -0
  85. {fal-0.12.4 → fal-0.12.5}/src/fal/toolkit/optimize.py +0 -0
  86. {fal-0.12.4 → fal-0.12.5}/src/fal/toolkit/utils/__init__.py +0 -0
  87. {fal-0.12.4 → fal-0.12.5}/src/fal/toolkit/utils/download_utils.py +0 -0
  88. {fal-0.12.4 → fal-0.12.5}/src/fal/workflows.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fal
3
- Version: 0.12.4
3
+ Version: 0.12.5
4
4
  Summary: fal is an easy-to-use Serverless Python Framework
5
5
  Author: Features & Labels
6
6
  Author-email: hello@fal.ai
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "fal"
3
- version = "0.12.4"
3
+ version = "0.12.5"
4
4
  description = "fal is an easy-to-use Serverless Python Framework"
5
5
  authors = ["Features & Labels <hello@fal.ai>"]
6
6
  readme = "README.md"
@@ -68,7 +68,7 @@ entry_points = \
68
68
 
69
69
  setup_kwargs = {
70
70
  'name': 'fal',
71
- 'version': '0.12.4',
71
+ 'version': '0.12.5',
72
72
  'description': 'fal is an easy-to-use Serverless Python Framework',
73
73
  'long_description': '# fal\n\nfal is a serverless Python runtime that lets you run and scale code in the cloud with no infra management.\n\nWith fal, you can build pipelines, serve ML models and scale them up to many users. You scale down to 0 when you don\'t use any resources.\n\n## Quickstart\n\nFirst, you need to install the `fal` package. You can do so using pip:\n```shell\npip install fal\n```\n\nThen you need to authenticate:\n```shell\nfal auth login\n```\n\nYou can also use fal keys that you can get from [our dashboard](https://fal.ai/dashboard/keys).\n\nNow can use the fal package in your Python scripts as follows:\n\n```py\nimport fal\n\n@fal.function(\n "virtualenv",\n requirements=["pyjokes"],\n)\ndef tell_joke() -> str:\n import pyjokes\n\n joke = pyjokes.get_joke()\n return joke\n\nprint("Joke from the clouds: ", tell_joke())\n```\n\nA new virtual environment will be created by fal in the cloud and the set of requirements that we passed will be installed as soon as this function is called. From that point on, our code will be executed as if it were running locally, and the joke prepared by the pyjokes library will be returned.\n\n## Next steps\n\nIf you would like to find out more about the capabilities of fal, check out to the [docs](https://fal.ai/docs). You can learn more about persistent storage, function caches and deploying your functions as API endpoints.\n',
74
74
  'author': 'Features & Labels',
@@ -54,6 +54,8 @@ class MainGroup(click.Group):
54
54
  _tracer = get_tracer(__name__)
55
55
 
56
56
  def invoke(self, ctx):
57
+ from click.exceptions import Abort, ClickException, Exit
58
+
57
59
  execution_info = ExecutionInfo(debug=ctx.params["debug"])
58
60
  qualified_name = " ".join([ctx.info_name] + argv[1:])
59
61
  invocation_id = execution_info.invocation_id
@@ -68,6 +70,9 @@ class MainGroup(click.Group):
68
70
  command=qualified_name,
69
71
  )
70
72
  return super().invoke(ctx)
73
+ except (EOFError, KeyboardInterrupt, ClickException, Exit, Abort):
74
+ # let click's main handle these
75
+ raise
71
76
  except Exception as exception:
72
77
  logger.error(exception)
73
78
  if execution_info.debug:
@@ -123,10 +128,7 @@ class AliasCommand(click.Command):
123
128
  return self._wrapped.__getattribute__(__name)
124
129
 
125
130
 
126
- @click.group(
127
- cls=MainGroup,
128
- context_settings={"allow_interspersed_args": True},
129
- )
131
+ @click.group(cls=MainGroup)
130
132
  @click.option(
131
133
  "--debug", is_flag=True, help="Enable detailed errors and verbose logging."
132
134
  )
@@ -574,7 +576,10 @@ def _get_user_id() -> str:
574
576
  raise api.FalServerlessError(content["detail"])
575
577
  try:
576
578
  full_user_id = user_details_response.parsed.user_id
577
- user_id = full_user_id.split("|")[1]
579
+ _provider, _, user_id = full_user_id.partition("|")
580
+ if not user_id:
581
+ user_id = full_user_id
582
+
578
583
  return user_id
579
584
  except Exception as e:
580
585
  raise api.FalServerlessError(f"Could not parse the user data: {e}")
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes