fal 0.15.0__py3-none-any.whl → 1.0.0__py3-none-any.whl
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.
- fal/__init__.py +5 -13
- fal/__main__.py +2 -2
- fal/_fal_version.py +16 -0
- fal/_serialization.py +15 -9
- fal/_version.py +6 -0
- fal/api.py +32 -14
- fal/app.py +54 -5
- fal/auth/__init__.py +2 -1
- fal/auth/auth0.py +4 -2
- fal/auth/local.py +2 -1
- fal/cli/__init__.py +1 -0
- fal/cli/apps.py +313 -0
- fal/cli/auth.py +59 -0
- fal/cli/debug.py +65 -0
- fal/cli/deploy.py +146 -0
- fal/cli/keys.py +118 -0
- fal/cli/main.py +82 -0
- fal/cli/parser.py +74 -0
- fal/cli/run.py +33 -0
- fal/cli/secrets.py +107 -0
- fal/exceptions/__init__.py +0 -28
- fal/flags.py +0 -3
- fal/logging/isolate.py +4 -4
- fal/sdk.py +39 -2
- fal/sync.py +7 -3
- fal/toolkit/file/file.py +14 -6
- fal/toolkit/file/providers/fal.py +20 -3
- fal/toolkit/image/image.py +1 -1
- fal/toolkit/optimize.py +0 -1
- fal/toolkit/utils/download_utils.py +6 -3
- fal/utils.py +55 -0
- fal/workflows.py +7 -2
- {fal-0.15.0.dist-info → fal-1.0.0.dist-info}/METADATA +33 -5
- {fal-0.15.0.dist-info → fal-1.0.0.dist-info}/RECORD +37 -26
- fal-1.0.0.dist-info/entry_points.txt +2 -0
- fal/cli.py +0 -619
- fal/exceptions/handlers.py +0 -58
- fal-0.15.0.dist-info/entry_points.txt +0 -2
- {fal-0.15.0.dist-info → fal-1.0.0.dist-info}/WHEEL +0 -0
- {fal-0.15.0.dist-info → fal-1.0.0.dist-info}/top_level.txt +0 -0
fal/workflows.py
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
import graphlib
|
|
4
3
|
import json
|
|
5
4
|
import webbrowser
|
|
6
5
|
from argparse import ArgumentParser
|
|
@@ -8,6 +7,7 @@ from collections import Counter
|
|
|
8
7
|
from dataclasses import dataclass, field
|
|
9
8
|
from typing import Any, Iterator, Union, cast
|
|
10
9
|
|
|
10
|
+
import graphlib
|
|
11
11
|
import rich
|
|
12
12
|
from openapi_fal_rest.api.workflows import (
|
|
13
13
|
create_or_update_workflow_workflows_post as publish_workflow,
|
|
@@ -450,7 +450,12 @@ def main() -> None:
|
|
|
450
450
|
for event in handle.iter_events(logs=True):
|
|
451
451
|
if isinstance(event, fal.apps.Queued):
|
|
452
452
|
status.update(
|
|
453
|
-
status=
|
|
453
|
+
status=(
|
|
454
|
+
"Queued for "
|
|
455
|
+
f"{node_id!r} "
|
|
456
|
+
f"(position={event.position}) "
|
|
457
|
+
f"({n}/{len(workflow.nodes)})",
|
|
458
|
+
),
|
|
454
459
|
spinner="dots",
|
|
455
460
|
)
|
|
456
461
|
elif isinstance(event, fal.apps.InProgress):
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: fal
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 1.0.0
|
|
4
4
|
Summary: fal is an easy-to-use Serverless Python Framework
|
|
5
5
|
Author: Features & Labels <hello@fal.ai>
|
|
6
6
|
Requires-Python: >=3.8
|
|
7
7
|
Description-Content-Type: text/markdown
|
|
8
8
|
Requires-Dist: isolate[build] <1.0,>=0.12.3
|
|
9
|
-
Requires-Dist: isolate-proto ==0.
|
|
9
|
+
Requires-Dist: isolate-proto ==0.4.0
|
|
10
10
|
Requires-Dist: grpcio <2,>=1.50.0
|
|
11
11
|
Requires-Dist: dill ==0.3.7
|
|
12
12
|
Requires-Dist: cloudpickle ==3.0.0
|
|
@@ -19,7 +19,7 @@ Requires-Dist: grpc-interceptor <1,>=0.15.0
|
|
|
19
19
|
Requires-Dist: colorama <1,>=0.4.6
|
|
20
20
|
Requires-Dist: portalocker <3,>=2.7.0
|
|
21
21
|
Requires-Dist: rich <14,>=13.3.2
|
|
22
|
-
Requires-Dist: rich-
|
|
22
|
+
Requires-Dist: rich-argparse
|
|
23
23
|
Requires-Dist: packaging <22,>=21.3
|
|
24
24
|
Requires-Dist: pathspec <1,>=0.11.1
|
|
25
25
|
Requires-Dist: pydantic !=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,<3
|
|
@@ -39,9 +39,10 @@ Provides-Extra: dev
|
|
|
39
39
|
Requires-Dist: fal[test] ; extra == 'dev'
|
|
40
40
|
Requires-Dist: openapi-python-client <1,>=0.14.1 ; extra == 'dev'
|
|
41
41
|
Provides-Extra: test
|
|
42
|
-
Requires-Dist: pytest ; extra == 'test'
|
|
43
|
-
Requires-Dist: pytest-xdist ; extra == 'test'
|
|
42
|
+
Requires-Dist: pytest <8 ; extra == 'test'
|
|
44
43
|
Requires-Dist: pytest-asyncio ; extra == 'test'
|
|
44
|
+
Requires-Dist: pytest-xdist ; extra == 'test'
|
|
45
|
+
Requires-Dist: flaky ; extra == 'test'
|
|
45
46
|
|
|
46
47
|
[](https://pypi.org/project/fal)
|
|
47
48
|
[](https://github.com/fal-ai/fal/actions)
|
|
@@ -89,3 +90,30 @@ A new virtual environment will be created by fal in the cloud and the set of req
|
|
|
89
90
|
## Next steps
|
|
90
91
|
|
|
91
92
|
If 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.
|
|
93
|
+
|
|
94
|
+
## Contributing
|
|
95
|
+
|
|
96
|
+
### Installing in editable mode with dev dependencies
|
|
97
|
+
|
|
98
|
+
```py
|
|
99
|
+
pip install -e 'projects/fal[dev]'
|
|
100
|
+
pip install -e 'projects/fal_client[dev]'
|
|
101
|
+
pip install -e 'projects/isolate_proto[dev]'
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### Running tests
|
|
105
|
+
|
|
106
|
+
```py
|
|
107
|
+
pytest
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### Pre-commit
|
|
111
|
+
|
|
112
|
+
```
|
|
113
|
+
cd projects/fal
|
|
114
|
+
pre-commit install
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### Commit format
|
|
118
|
+
|
|
119
|
+
Please follow [conventional commits specification](https://www.conventionalcommits.org/) for descriptions/messages.
|
|
@@ -1,44 +1,55 @@
|
|
|
1
|
-
fal/__init__.py,sha256=
|
|
2
|
-
fal/__main__.py,sha256=
|
|
3
|
-
fal/
|
|
4
|
-
fal/
|
|
5
|
-
fal/
|
|
1
|
+
fal/__init__.py,sha256=suif79hYcYwlZ8dAaVXCErKhuD2AYf8uU78rty8jow8,721
|
|
2
|
+
fal/__main__.py,sha256=MSmt_5Xg84uHqzTN38JwgseJK8rsJn_11A8WD99VtEo,61
|
|
3
|
+
fal/_fal_version.py,sha256=DGJ4pj32xs3_DRJhSzQwCiRNnAQrMgo09USYpyMZsKc,411
|
|
4
|
+
fal/_serialization.py,sha256=Tx_c_mpJ8dYAVmPwdLkwgozSqfdvdFyWRYx3lH3-koQ,7595
|
|
5
|
+
fal/_version.py,sha256=EBGqrknaf1WygENX-H4fBefLvHryvJBBGtVJetaB0NY,266
|
|
6
|
+
fal/api.py,sha256=g8ypixM_3AZMdDbGQTUkBE92kphGE3dpLJPsY2cJMIk,36287
|
|
7
|
+
fal/app.py,sha256=s9ba4t4D5KJrPFGKeRzL3XsdKH-W1Be6NmDQgYjPnCw,13826
|
|
6
8
|
fal/apps.py,sha256=UhR6mq8jBiTAp-QvUnvbnMNcuJ5wHIKSqdlfyx8aBQ8,6829
|
|
7
|
-
fal/
|
|
8
|
-
fal/flags.py,sha256=AATQO65M4C87dGp0j7o6cSQWcr62xE-8DnJYsUjFFbw,942
|
|
9
|
+
fal/flags.py,sha256=oWN_eidSUOcE9wdPK_77si3A1fpgOC0UEERPsvNLIMc,842
|
|
9
10
|
fal/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10
11
|
fal/rest_client.py,sha256=kGBGmuyHfX1lR910EoKCYPjsyU8MdXawT_cW2q8Sajc,568
|
|
11
|
-
fal/sdk.py,sha256=
|
|
12
|
-
fal/sync.py,sha256=
|
|
13
|
-
fal/
|
|
14
|
-
fal/
|
|
15
|
-
fal/auth/
|
|
16
|
-
fal/auth/
|
|
12
|
+
fal/sdk.py,sha256=eHcg5TRouGL5d_9-p44x6lQUCYXVXdul6iEETCUov5Q,19976
|
|
13
|
+
fal/sync.py,sha256=ZuIJA2-hTPNANG9B_NNJZUsO68EIdTH0dc9MzeVE2VU,4340
|
|
14
|
+
fal/utils.py,sha256=PfmRrW3EFJ4Y07XsRRfydS1NT4Fll5t7oChmFvusr3g,1793
|
|
15
|
+
fal/workflows.py,sha256=4rjqL4xB6GHLJsqTplJmAvpd6uHZJ28sc8su33BFXEo,14682
|
|
16
|
+
fal/auth/__init__.py,sha256=r8iA2-5ih7-Fik3gEC4HEWNFbGoxpYnXpZu1icPIoS0,3561
|
|
17
|
+
fal/auth/auth0.py,sha256=rSG1mgH-QGyKfzd7XyAaj1AYsWt-ho8Y_LZ-FUVWzh4,5421
|
|
18
|
+
fal/auth/local.py,sha256=sndkM6vKpeVny6NHTacVlTbiIFqaksOmw0Viqs_RN1U,1790
|
|
19
|
+
fal/cli/__init__.py,sha256=padK4o0BFqq61kxAA1qQ0jYr2SuhA2mf90B3AaRkmJA,37
|
|
20
|
+
fal/cli/apps.py,sha256=HKQDOiTlLUKrJ2oVABRdKhB2842l1zA0eB2p-4XczAo,8060
|
|
21
|
+
fal/cli/auth.py,sha256=--MhfHGwxmtHbRkGioyn1prKn_U-pBzbz0G_QeZou-U,1352
|
|
22
|
+
fal/cli/debug.py,sha256=1doDNwoaPDfLQginGNBxpC20dZYs5UxIojflDvV1Q04,1342
|
|
23
|
+
fal/cli/deploy.py,sha256=S_HIMLqDpGyzDdbiIxudRizwjGoAaHpN-sXcl2uCaQ4,4329
|
|
24
|
+
fal/cli/keys.py,sha256=-9N6ZY6rW-_IE9tpupgaBPDGjGdKB3HKqU2g9daM3Xc,3109
|
|
25
|
+
fal/cli/main.py,sha256=RSMXLUyzYmZhS0Wcq9phXJcMJM_UpQD3su7F7j8Wr3M,1933
|
|
26
|
+
fal/cli/parser.py,sha256=8W9VhxDBOSru6Vs_HsUm_RA7_YMnzXLTzUrXA0mGVRA,2109
|
|
27
|
+
fal/cli/run.py,sha256=NXwzkAWCKrRwgoMLsBOgW7RJPJW4IgSTrG85q2iePyk,894
|
|
28
|
+
fal/cli/secrets.py,sha256=mgHp3gBr8d2su7wBApeADKWHPkYu2ueB6gG3eNMETh8,2595
|
|
17
29
|
fal/console/__init__.py,sha256=ernZ4bzvvliQh5SmrEqQ7lA5eVcbw6Ra2jalKtA7dxg,132
|
|
18
30
|
fal/console/icons.py,sha256=De9MfFaSkO2Lqfne13n3PrYfTXJVIzYZVqYn5BWsdrA,108
|
|
19
31
|
fal/console/ux.py,sha256=KMQs3UHQvVHDxDQQqlot-WskVKoMQXOE3jiVkkfmIMY,356
|
|
20
|
-
fal/exceptions/__init__.py,sha256=
|
|
32
|
+
fal/exceptions/__init__.py,sha256=x3fp97qMr5zCQJghMq6k2ESXWSrkWumO1BZebh3pWsI,92
|
|
21
33
|
fal/exceptions/_base.py,sha256=U3n_4OtUx5MvfT2eol_a-N0dV9_eYFMvdbrhP-b_NXg,160
|
|
22
34
|
fal/exceptions/auth.py,sha256=gxRago5coI__vSIcdcsqhhq1lRPkvCnwPAueIaXTAdw,329
|
|
23
|
-
fal/exceptions/handlers.py,sha256=nZCmmWU47k4P9NBISNqn0b6-L53KMoNuuGBW4G9Bweo,1674
|
|
24
35
|
fal/logging/__init__.py,sha256=snqprf7-sKw6oAATS_Yxklf-a3XhLg0vIHICPwLp6TM,1583
|
|
25
|
-
fal/logging/isolate.py,sha256=
|
|
36
|
+
fal/logging/isolate.py,sha256=Gj_xylXc0ulGIyozLwTWisIclP7-du4tvhJWyPilrgo,1742
|
|
26
37
|
fal/logging/style.py,sha256=ckIgHzvF4DShM5kQh8F133X53z_vF46snuDHVmo_h9g,386
|
|
27
38
|
fal/logging/trace.py,sha256=OhzB6d4rQZimBc18WFLqH_9BGfqFFumKKTAGSsmWRMg,1904
|
|
28
39
|
fal/logging/user.py,sha256=0Xvb8n6tSb9l_V51VDzv6SOdYEFNouV_6nF_W9e7uNQ,642
|
|
29
40
|
fal/toolkit/__init__.py,sha256=sV95wiUzKoiDqF9vDgq4q-BLa2sD6IpuKSqp5kdTQNE,658
|
|
30
41
|
fal/toolkit/exceptions.py,sha256=elHZ7dHCJG5zlHGSBbz-ilkZe9QUvQMomJFi8Pt91LA,198
|
|
31
|
-
fal/toolkit/optimize.py,sha256=
|
|
42
|
+
fal/toolkit/optimize.py,sha256=p75sovF0SmRP6zxzpIaaOmqlxvXB_xEz3XPNf59EF7w,1339
|
|
32
43
|
fal/toolkit/file/__init__.py,sha256=FbNl6wD-P0aSSTUwzHt4HujBXrbC3ABmaigPQA4hRfg,70
|
|
33
|
-
fal/toolkit/file/file.py,sha256=
|
|
44
|
+
fal/toolkit/file/file.py,sha256=r8PzNCgv8Gkj6s1zM0yW-pcMKIouyaiEH06iBue8MwM,6066
|
|
34
45
|
fal/toolkit/file/types.py,sha256=9CqDh8SmNJNzfsrvtj468uo2SprJH9rOk8KMhhfU73c,1050
|
|
35
|
-
fal/toolkit/file/providers/fal.py,sha256=
|
|
46
|
+
fal/toolkit/file/providers/fal.py,sha256=AfNwdnvt_IIFrzvNZPFjGwfVOQ2OzPfG1ySz6-2tnvc,3690
|
|
36
47
|
fal/toolkit/file/providers/gcp.py,sha256=7Lg7BXoHKkFu0jkGv3_vKh2Ks6eRfDMbw31N3mvDUtk,1913
|
|
37
48
|
fal/toolkit/file/providers/r2.py,sha256=YW5aJBOX41MQxfx1rA_f-IiJhAPMZ5md0cxBcg3y08I,2537
|
|
38
49
|
fal/toolkit/image/__init__.py,sha256=qNLyXsBWysionUjbeWbohLqWlw3G_UpzunamkZd_JLQ,71
|
|
39
|
-
fal/toolkit/image/image.py,sha256=
|
|
50
|
+
fal/toolkit/image/image.py,sha256=2q1ZCBSSdmDx9q1S4ahoCOniNaRcfSFnCS31f3b8ZZ0,4252
|
|
40
51
|
fal/toolkit/utils/__init__.py,sha256=CrmM9DyCz5-SmcTzRSm5RaLgxy3kf0ZsSEN9uhnX2Xo,97
|
|
41
|
-
fal/toolkit/utils/download_utils.py,sha256=
|
|
52
|
+
fal/toolkit/utils/download_utils.py,sha256=M-xUAV8kX6o1zcojozSTaArGIC_LgQriagCC8AoG0mM,15487
|
|
42
53
|
openapi_fal_rest/__init__.py,sha256=ziculmF_i6trw63LzZGFX-6W3Lwq9mCR8_UpkpvpaHI,152
|
|
43
54
|
openapi_fal_rest/client.py,sha256=G6BpJg9j7-JsrAUGddYwkzeWRYickBjPdcVgXoPzxuE,2817
|
|
44
55
|
openapi_fal_rest/errors.py,sha256=8mXSxdfSGzxT82srdhYbR0fHfgenxJXaUtMkaGgb6iU,470
|
|
@@ -81,8 +92,8 @@ openapi_fal_rest/models/workflow_node_type.py,sha256=-FzyeY2bxcNmizKbJI8joG7byRi
|
|
|
81
92
|
openapi_fal_rest/models/workflow_schema.py,sha256=4K5gsv9u9pxx2ItkffoyHeNjBBYf6ur5bN4m_zePZNY,2019
|
|
82
93
|
openapi_fal_rest/models/workflow_schema_input.py,sha256=2OkOXWHTNsCXHWS6EGDFzcJKkW5FIap-2gfO233EvZQ,1191
|
|
83
94
|
openapi_fal_rest/models/workflow_schema_output.py,sha256=EblwSPAGfWfYVWw_WSSaBzQVju296is9o28rMBAd0mc,1196
|
|
84
|
-
fal-0.
|
|
85
|
-
fal-0.
|
|
86
|
-
fal-0.
|
|
87
|
-
fal-0.
|
|
88
|
-
fal-0.
|
|
95
|
+
fal-1.0.0.dist-info/METADATA,sha256=1n_Jk_wpas1IT64tggvZhChSuT1QvP6TJ17T35mxpp4,3740
|
|
96
|
+
fal-1.0.0.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
|
97
|
+
fal-1.0.0.dist-info/entry_points.txt,sha256=32zwTUC1U1E7nSTIGCoANQOQ3I7-qHG5wI6gsVz5pNU,37
|
|
98
|
+
fal-1.0.0.dist-info/top_level.txt,sha256=r257X1L57oJL8_lM0tRrfGuXFwm66i1huwQygbpLmHw,21
|
|
99
|
+
fal-1.0.0.dist-info/RECORD,,
|