fal 1.11.3__py3-none-any.whl → 1.11.5__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/_fal_version.py +2 -2
- fal/api.py +4 -1
- fal/app.py +1 -1
- fal/auth/__init__.py +2 -3
- fal/auth/auth0.py +6 -6
- fal/cli/apps.py +9 -49
- fal/cli/auth.py +21 -6
- fal/cli/deploy.py +1 -1
- fal/cli/main.py +1 -1
- fal/cli/runners.py +90 -0
- fal/config.py +1 -1
- fal/sdk.py +11 -1
- {fal-1.11.3.dist-info → fal-1.11.5.dist-info}/METADATA +3 -3
- {fal-1.11.3.dist-info → fal-1.11.5.dist-info}/RECORD +17 -17
- {fal-1.11.3.dist-info → fal-1.11.5.dist-info}/WHEEL +0 -0
- {fal-1.11.3.dist-info → fal-1.11.5.dist-info}/entry_points.txt +0 -0
- {fal-1.11.3.dist-info → fal-1.11.5.dist-info}/top_level.txt +0 -0
fal/_fal_version.py
CHANGED
fal/api.py
CHANGED
|
@@ -1088,7 +1088,10 @@ class BaseServable:
|
|
|
1088
1088
|
type(exc), exc, exc.__traceback__
|
|
1089
1089
|
)
|
|
1090
1090
|
|
|
1091
|
-
print(
|
|
1091
|
+
print(
|
|
1092
|
+
json.dumps({"traceback": "".join(formatted_exception[::-1])}),
|
|
1093
|
+
flush=True,
|
|
1094
|
+
)
|
|
1092
1095
|
|
|
1093
1096
|
if _is_cuda_oom_exception(exc):
|
|
1094
1097
|
return await cuda_out_of_memory_exception_handler(
|
fal/app.py
CHANGED
|
@@ -268,7 +268,7 @@ class App(fal.api.BaseServable):
|
|
|
268
268
|
"keep_alive": 60,
|
|
269
269
|
}
|
|
270
270
|
app_name: ClassVar[str]
|
|
271
|
-
app_auth: ClassVar[Literal["private", "public", "shared"]] =
|
|
271
|
+
app_auth: ClassVar[Literal["private", "public", "shared", None]] = None
|
|
272
272
|
request_timeout: ClassVar[int | None] = None
|
|
273
273
|
startup_timeout: ClassVar[int | None] = None
|
|
274
274
|
|
fal/auth/__init__.py
CHANGED
|
@@ -5,12 +5,11 @@ from dataclasses import dataclass, field
|
|
|
5
5
|
from threading import Lock
|
|
6
6
|
from typing import Optional
|
|
7
7
|
|
|
8
|
-
import click
|
|
9
|
-
|
|
10
8
|
from fal.auth import auth0, local
|
|
11
9
|
from fal.config import Config
|
|
12
10
|
from fal.console import console
|
|
13
11
|
from fal.console.icons import CHECK_ICON
|
|
12
|
+
from fal.exceptions import FalServerlessException
|
|
14
13
|
from fal.exceptions.auth import UnauthenticatedException
|
|
15
14
|
|
|
16
15
|
|
|
@@ -85,7 +84,7 @@ def login():
|
|
|
85
84
|
def logout():
|
|
86
85
|
refresh_token, _ = local.load_token()
|
|
87
86
|
if refresh_token is None:
|
|
88
|
-
raise
|
|
87
|
+
raise FalServerlessException("You're not logged in")
|
|
89
88
|
auth0.revoke(refresh_token)
|
|
90
89
|
with local.lock_token():
|
|
91
90
|
local.delete_token()
|
fal/auth/auth0.py
CHANGED
|
@@ -4,12 +4,12 @@ import functools
|
|
|
4
4
|
import time
|
|
5
5
|
import warnings
|
|
6
6
|
|
|
7
|
-
import click
|
|
8
7
|
import httpx
|
|
9
8
|
|
|
10
9
|
from fal.console import console
|
|
11
10
|
from fal.console.icons import CHECK_ICON
|
|
12
11
|
from fal.console.ux import maybe_open_browser_tab
|
|
12
|
+
from fal.exceptions import FalServerlessException
|
|
13
13
|
|
|
14
14
|
WEBSITE_URL = "https://fal.ai"
|
|
15
15
|
|
|
@@ -55,7 +55,7 @@ def login() -> dict:
|
|
|
55
55
|
)
|
|
56
56
|
|
|
57
57
|
if device_code_response.status_code != 200:
|
|
58
|
-
raise
|
|
58
|
+
raise FalServerlessException("Error generating the device code")
|
|
59
59
|
|
|
60
60
|
device_code_data = device_code_response.json()
|
|
61
61
|
device_user_code = device_code_data["user_code"]
|
|
@@ -92,7 +92,7 @@ def login() -> dict:
|
|
|
92
92
|
|
|
93
93
|
elif token_data["error"] not in ("authorization_pending", "slow_down"):
|
|
94
94
|
status.update(spinner=None)
|
|
95
|
-
raise
|
|
95
|
+
raise FalServerlessException(token_data["error_description"])
|
|
96
96
|
|
|
97
97
|
else:
|
|
98
98
|
time.sleep(device_code_data["interval"])
|
|
@@ -115,7 +115,7 @@ def refresh(token: str) -> dict:
|
|
|
115
115
|
|
|
116
116
|
return token_data
|
|
117
117
|
else:
|
|
118
|
-
raise
|
|
118
|
+
raise FalServerlessException(token_data["error_description"])
|
|
119
119
|
|
|
120
120
|
|
|
121
121
|
def revoke(token: str):
|
|
@@ -130,7 +130,7 @@ def revoke(token: str):
|
|
|
130
130
|
|
|
131
131
|
if token_response.status_code != 200:
|
|
132
132
|
token_data = token_response.json()
|
|
133
|
-
raise
|
|
133
|
+
raise FalServerlessException(token_data["error_description"])
|
|
134
134
|
|
|
135
135
|
_open_browser(logout_url(WEBSITE_URL), None)
|
|
136
136
|
|
|
@@ -142,7 +142,7 @@ def get_user_info(bearer_token: str) -> dict:
|
|
|
142
142
|
)
|
|
143
143
|
|
|
144
144
|
if userinfo_response.status_code != 200:
|
|
145
|
-
raise
|
|
145
|
+
raise FalServerlessException(userinfo_response.content.decode("utf-8"))
|
|
146
146
|
|
|
147
147
|
return userinfo_response.json()
|
|
148
148
|
|
fal/cli/apps.py
CHANGED
|
@@ -2,6 +2,8 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
from typing import TYPE_CHECKING
|
|
4
4
|
|
|
5
|
+
import fal.cli.runners as runners
|
|
6
|
+
|
|
5
7
|
from ._utils import get_client
|
|
6
8
|
from .parser import FalClientParser
|
|
7
9
|
|
|
@@ -268,59 +270,17 @@ def _add_set_rev_parser(subparsers, parents):
|
|
|
268
270
|
|
|
269
271
|
|
|
270
272
|
def _runners(args):
|
|
271
|
-
from rich.table import Table
|
|
272
|
-
|
|
273
273
|
client = get_client(args.host, args.team)
|
|
274
274
|
with client.connect() as connection:
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
table = Table()
|
|
278
|
-
table.add_column("Runner ID")
|
|
279
|
-
table.add_column("In Flight Requests")
|
|
280
|
-
table.add_column("Missing Leases")
|
|
281
|
-
table.add_column("Expires In")
|
|
282
|
-
table.add_column("Uptime")
|
|
283
|
-
|
|
284
|
-
for runner in runners:
|
|
285
|
-
num_leases_with_request = len(
|
|
286
|
-
[
|
|
287
|
-
lease
|
|
288
|
-
for lease in runner.external_metadata.get("leases", [])
|
|
289
|
-
if lease.get("request_id") is not None
|
|
290
|
-
]
|
|
291
|
-
)
|
|
292
|
-
|
|
293
|
-
table.add_row(
|
|
294
|
-
runner.runner_id,
|
|
295
|
-
str(runner.in_flight_requests),
|
|
296
|
-
str(runner.in_flight_requests - num_leases_with_request),
|
|
297
|
-
(
|
|
298
|
-
"N/A (active)"
|
|
299
|
-
if runner.expiration_countdown is None
|
|
300
|
-
else f"{runner.expiration_countdown}s"
|
|
301
|
-
),
|
|
302
|
-
f"{runner.uptime} ({runner.uptime.total_seconds()}s)",
|
|
303
|
-
)
|
|
304
|
-
|
|
305
|
-
args.console.print(f"Runners: {len(runners)}")
|
|
306
|
-
args.console.print(table)
|
|
307
|
-
|
|
308
|
-
requests_table = Table()
|
|
309
|
-
requests_table.add_column("Runner ID")
|
|
310
|
-
requests_table.add_column("Request ID")
|
|
311
|
-
requests_table.add_column("Caller ID")
|
|
312
|
-
|
|
313
|
-
for runner in runners:
|
|
314
|
-
for lease in runner.external_metadata.get("leases", []):
|
|
315
|
-
if not (req_id := lease.get("request_id")):
|
|
316
|
-
continue
|
|
275
|
+
alias_runners = connection.list_alias_runners(alias=args.app_name)
|
|
317
276
|
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
277
|
+
runners_table = runners.runners_table(alias_runners)
|
|
278
|
+
args.console.print(f"Runners: {len(alias_runners)}")
|
|
279
|
+
# Drop the alias column, which is the first column
|
|
280
|
+
runners_table.columns.pop(0)
|
|
281
|
+
args.console.print(runners_table)
|
|
323
282
|
|
|
283
|
+
requests_table = runners.runners_requests_table(alias_runners)
|
|
324
284
|
args.console.print(f"Requests: {len(requests_table.rows)}")
|
|
325
285
|
args.console.print(requests_table)
|
|
326
286
|
|
fal/cli/auth.py
CHANGED
|
@@ -2,29 +2,44 @@ from fal.auth import USER, login, logout
|
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
def _login(args):
|
|
5
|
-
from rich.prompt import Prompt
|
|
6
|
-
|
|
7
5
|
from fal.config import Config
|
|
6
|
+
from fal.console.prompt import prompt
|
|
8
7
|
|
|
9
8
|
login()
|
|
9
|
+
|
|
10
10
|
teams = [team["nickname"].lower() for team in USER.teams]
|
|
11
11
|
if not teams:
|
|
12
12
|
return
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
"
|
|
14
|
+
args.console.print("")
|
|
15
|
+
args.console.print(
|
|
16
|
+
f"You ({USER.info['name']}) are a member of the following teams:\n",
|
|
17
|
+
)
|
|
18
|
+
for idx, team in enumerate(USER.teams):
|
|
19
|
+
args.console.print(f" {idx + 1}. {team['nickname']}")
|
|
20
|
+
args.console.print("")
|
|
21
|
+
|
|
22
|
+
team_choice = prompt(
|
|
23
|
+
args.console,
|
|
24
|
+
"Pick a team account to use (leave blank for personal account)",
|
|
17
25
|
choices=teams,
|
|
26
|
+
show_choices=False,
|
|
18
27
|
default=None,
|
|
19
28
|
)
|
|
29
|
+
args.console.print("")
|
|
30
|
+
|
|
20
31
|
with Config().edit() as config:
|
|
21
|
-
if
|
|
32
|
+
if team_choice:
|
|
22
33
|
args.console.print(
|
|
23
34
|
f"Setting team to [cyan]{team}[/]. "
|
|
24
35
|
"You can change this later with [bold]fal team set[/]."
|
|
25
36
|
)
|
|
26
37
|
config.set("team", team)
|
|
27
38
|
else:
|
|
39
|
+
args.console.print(
|
|
40
|
+
"Using your personal account. "
|
|
41
|
+
"You can change this later with [bold]fal team set[/]."
|
|
42
|
+
)
|
|
28
43
|
config.unset("team")
|
|
29
44
|
|
|
30
45
|
|
fal/cli/deploy.py
CHANGED
|
@@ -97,7 +97,7 @@ def _deploy_from_reference(
|
|
|
97
97
|
)
|
|
98
98
|
isolated_function = loaded.function
|
|
99
99
|
app_name = app_name or loaded.app_name # type: ignore
|
|
100
|
-
app_auth = auth or loaded.app_auth
|
|
100
|
+
app_auth = auth or loaded.app_auth
|
|
101
101
|
deployment_strategy = deployment_strategy or "recreate"
|
|
102
102
|
|
|
103
103
|
app_id = host.register(
|
fal/cli/main.py
CHANGED
fal/cli/runners.py
CHANGED
|
@@ -1,13 +1,91 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import List
|
|
4
|
+
|
|
5
|
+
from fal.sdk import RunnerInfo
|
|
6
|
+
|
|
1
7
|
from ._utils import get_client
|
|
2
8
|
from .parser import FalClientParser
|
|
3
9
|
|
|
4
10
|
|
|
11
|
+
def runners_table(runners: List[RunnerInfo]):
|
|
12
|
+
from rich.table import Table
|
|
13
|
+
|
|
14
|
+
table = Table()
|
|
15
|
+
table.add_column("Alias")
|
|
16
|
+
table.add_column("Runner ID")
|
|
17
|
+
table.add_column("In Flight Requests")
|
|
18
|
+
table.add_column("Missing Leases")
|
|
19
|
+
table.add_column("Expires In")
|
|
20
|
+
table.add_column("Uptime")
|
|
21
|
+
table.add_column("Revision")
|
|
22
|
+
|
|
23
|
+
for runner in runners:
|
|
24
|
+
num_leases_with_request = len(
|
|
25
|
+
[
|
|
26
|
+
lease
|
|
27
|
+
for lease in runner.external_metadata.get("leases", [])
|
|
28
|
+
if lease.get("request_id") is not None
|
|
29
|
+
]
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
table.add_row(
|
|
33
|
+
runner.alias,
|
|
34
|
+
runner.runner_id,
|
|
35
|
+
str(runner.in_flight_requests),
|
|
36
|
+
str(runner.in_flight_requests - num_leases_with_request),
|
|
37
|
+
(
|
|
38
|
+
"N/A (active)"
|
|
39
|
+
if runner.expiration_countdown is None
|
|
40
|
+
else f"{runner.expiration_countdown}s"
|
|
41
|
+
),
|
|
42
|
+
f"{runner.uptime} ({runner.uptime.total_seconds()}s)",
|
|
43
|
+
runner.revision,
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
return table
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def runners_requests_table(runners: list[RunnerInfo]):
|
|
50
|
+
from rich.table import Table
|
|
51
|
+
|
|
52
|
+
table = Table()
|
|
53
|
+
table.add_column("Runner ID")
|
|
54
|
+
table.add_column("Request ID")
|
|
55
|
+
table.add_column("Caller ID")
|
|
56
|
+
|
|
57
|
+
for runner in runners:
|
|
58
|
+
for lease in runner.external_metadata.get("leases", []):
|
|
59
|
+
if not (req_id := lease.get("request_id")):
|
|
60
|
+
continue
|
|
61
|
+
|
|
62
|
+
table.add_row(
|
|
63
|
+
runner.runner_id,
|
|
64
|
+
req_id,
|
|
65
|
+
lease.get("caller_user_id") or "",
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
return table
|
|
69
|
+
|
|
70
|
+
|
|
5
71
|
def _kill(args):
|
|
6
72
|
client = get_client(args.host, args.team)
|
|
7
73
|
with client.connect() as connection:
|
|
8
74
|
connection.kill_runner(args.id)
|
|
9
75
|
|
|
10
76
|
|
|
77
|
+
def _list(args):
|
|
78
|
+
client = get_client(args.host, args.team)
|
|
79
|
+
with client.connect() as connection:
|
|
80
|
+
runners = connection.list_runners()
|
|
81
|
+
args.console.print(f"Runners: {len(runners)}")
|
|
82
|
+
args.console.print(runners_table(runners))
|
|
83
|
+
|
|
84
|
+
requests_table = runners_requests_table(runners)
|
|
85
|
+
args.console.print(f"Requests: {len(requests_table.rows)}")
|
|
86
|
+
args.console.print(requests_table)
|
|
87
|
+
|
|
88
|
+
|
|
11
89
|
def _add_kill_parser(subparsers, parents):
|
|
12
90
|
kill_help = "Kill a runner."
|
|
13
91
|
parser = subparsers.add_parser(
|
|
@@ -23,6 +101,17 @@ def _add_kill_parser(subparsers, parents):
|
|
|
23
101
|
parser.set_defaults(func=_kill)
|
|
24
102
|
|
|
25
103
|
|
|
104
|
+
def _add_list_parser(subparsers, parents):
|
|
105
|
+
list_help = "List runners."
|
|
106
|
+
parser = subparsers.add_parser(
|
|
107
|
+
"list",
|
|
108
|
+
description=list_help,
|
|
109
|
+
help=list_help,
|
|
110
|
+
parents=parents,
|
|
111
|
+
)
|
|
112
|
+
parser.set_defaults(func=_list)
|
|
113
|
+
|
|
114
|
+
|
|
26
115
|
def add_parser(main_subparsers, parents):
|
|
27
116
|
runners_help = "Manage fal runners."
|
|
28
117
|
parser = main_subparsers.add_parser(
|
|
@@ -41,3 +130,4 @@ def add_parser(main_subparsers, parents):
|
|
|
41
130
|
)
|
|
42
131
|
|
|
43
132
|
_add_kill_parser(subparsers, parents)
|
|
133
|
+
_add_list_parser(subparsers, parents)
|
fal/config.py
CHANGED
|
@@ -72,7 +72,7 @@ class Config:
|
|
|
72
72
|
if not self.profile:
|
|
73
73
|
raise ValueError("No profile set.")
|
|
74
74
|
|
|
75
|
-
|
|
75
|
+
self._config.get(self.profile, {}).pop(key, None)
|
|
76
76
|
|
|
77
77
|
def get_internal(self, key: str) -> Optional[str]:
|
|
78
78
|
if SETTINGS_SECTION not in self._config:
|
fal/sdk.py
CHANGED
|
@@ -246,6 +246,8 @@ class RunnerInfo:
|
|
|
246
246
|
expiration_countdown: Optional[int]
|
|
247
247
|
uptime: timedelta
|
|
248
248
|
external_metadata: dict[str, Any]
|
|
249
|
+
revision: str
|
|
250
|
+
alias: str
|
|
249
251
|
|
|
250
252
|
|
|
251
253
|
@dataclass
|
|
@@ -392,6 +394,8 @@ def _from_grpc_runner_info(message: isolate_proto.RunnerInfo) -> RunnerInfo:
|
|
|
392
394
|
),
|
|
393
395
|
uptime=timedelta(seconds=message.uptime),
|
|
394
396
|
external_metadata=external_metadata,
|
|
397
|
+
revision=message.revision,
|
|
398
|
+
alias=message.alias,
|
|
395
399
|
)
|
|
396
400
|
|
|
397
401
|
|
|
@@ -571,11 +575,12 @@ class FalServerlessConnection:
|
|
|
571
575
|
else:
|
|
572
576
|
wrapped_requirements = None
|
|
573
577
|
|
|
578
|
+
auth_mode = None
|
|
574
579
|
if application_auth_mode == "public":
|
|
575
580
|
auth_mode = isolate_proto.ApplicationAuthMode.PUBLIC
|
|
576
581
|
elif application_auth_mode == "shared":
|
|
577
582
|
auth_mode = isolate_proto.ApplicationAuthMode.SHARED
|
|
578
|
-
|
|
583
|
+
elif application_auth_mode == "private":
|
|
579
584
|
auth_mode = isolate_proto.ApplicationAuthMode.PRIVATE
|
|
580
585
|
|
|
581
586
|
struct_metadata = None
|
|
@@ -750,3 +755,8 @@ class FalServerlessConnection:
|
|
|
750
755
|
def kill_runner(self, runner_id: str) -> None:
|
|
751
756
|
request = isolate_proto.KillRunnerRequest(runner_id=runner_id)
|
|
752
757
|
self.stub.KillRunner(request)
|
|
758
|
+
|
|
759
|
+
def list_runners(self) -> list[RunnerInfo]:
|
|
760
|
+
request = isolate_proto.ListRunnersRequest()
|
|
761
|
+
response = self.stub.ListRunners(request)
|
|
762
|
+
return [from_grpc(runner) for runner in response.runners]
|
|
@@ -1,17 +1,16 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: fal
|
|
3
|
-
Version: 1.11.
|
|
3
|
+
Version: 1.11.5
|
|
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
|
|
7
7
|
Description-Content-Type: text/markdown
|
|
8
8
|
Requires-Dist: isolate[build]<0.17.0,>=0.16.1
|
|
9
|
-
Requires-Dist: isolate-proto<0.8.0,>=0.7.
|
|
9
|
+
Requires-Dist: isolate-proto<0.8.0,>=0.7.2
|
|
10
10
|
Requires-Dist: grpcio==1.64.0
|
|
11
11
|
Requires-Dist: dill==0.3.7
|
|
12
12
|
Requires-Dist: cloudpickle==3.0.0
|
|
13
13
|
Requires-Dist: typing-extensions<5,>=4.7.1
|
|
14
|
-
Requires-Dist: click<9,>=8.1.3
|
|
15
14
|
Requires-Dist: structlog<23,>=22.3.0
|
|
16
15
|
Requires-Dist: opentelemetry-api<2,>=1.15.0
|
|
17
16
|
Requires-Dist: opentelemetry-sdk<2,>=1.15.0
|
|
@@ -47,6 +46,7 @@ Provides-Extra: test
|
|
|
47
46
|
Requires-Dist: pytest<8; extra == "test"
|
|
48
47
|
Requires-Dist: pytest-asyncio; extra == "test"
|
|
49
48
|
Requires-Dist: pytest-xdist; extra == "test"
|
|
49
|
+
Requires-Dist: pytest-timeout; extra == "test"
|
|
50
50
|
Requires-Dist: flaky; extra == "test"
|
|
51
51
|
Requires-Dist: boto3; extra == "test"
|
|
52
52
|
Provides-Extra: dev
|
|
@@ -1,40 +1,40 @@
|
|
|
1
1
|
fal/__init__.py,sha256=wXs1G0gSc7ZK60-bHe-B2m0l_sA6TrFk4BxY0tMoLe8,784
|
|
2
2
|
fal/__main__.py,sha256=4JMK66Wj4uLZTKbF-sT3LAxOsr6buig77PmOkJCRRxw,83
|
|
3
|
-
fal/_fal_version.py,sha256=
|
|
3
|
+
fal/_fal_version.py,sha256=C9jc23h2VfZSE0orSfoOaBMqebv8jMlmnPO1wUWfXak,513
|
|
4
4
|
fal/_serialization.py,sha256=rD2YiSa8iuzCaZohZwN_MPEB-PpSKbWRDeaIDpTEjyY,7653
|
|
5
5
|
fal/_version.py,sha256=EBGqrknaf1WygENX-H4fBefLvHryvJBBGtVJetaB0NY,266
|
|
6
|
-
fal/api.py,sha256=
|
|
7
|
-
fal/app.py,sha256=
|
|
6
|
+
fal/api.py,sha256=aoA0-7JsO6dWhudzmDOidbPwxnJmIJaQWhGV1kqLCbw,44814
|
|
7
|
+
fal/app.py,sha256=YZBmQ45QbWCO7OmbNhlzM0AMI6STog3fMjdEtpkAS5g,23309
|
|
8
8
|
fal/apps.py,sha256=RpmElElJnDYjsTRQOdNYiJwd74GEOGYA38L5O5GzNEg,11068
|
|
9
|
-
fal/config.py,sha256=
|
|
9
|
+
fal/config.py,sha256=26IrSU5LYOGVSULrolAWe6oa7NE8Vk1DLI0-RwS2NIs,2596
|
|
10
10
|
fal/container.py,sha256=PM7e1RloTCexZ64uAv7sa2RSZxPI-X8KcxkdaZqEfjw,1914
|
|
11
11
|
fal/files.py,sha256=QgfYfMKmNobMPufrAP_ga1FKcIAlSbw18Iar1-0qepo,2650
|
|
12
12
|
fal/flags.py,sha256=oWN_eidSUOcE9wdPK_77si3A1fpgOC0UEERPsvNLIMc,842
|
|
13
13
|
fal/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
14
14
|
fal/rest_client.py,sha256=kGBGmuyHfX1lR910EoKCYPjsyU8MdXawT_cW2q8Sajc,568
|
|
15
|
-
fal/sdk.py,sha256=
|
|
15
|
+
fal/sdk.py,sha256=b-1J3nO5I4f69L2APqDZ0hLNo7qVhWA2bhCvrjhpQV4,25420
|
|
16
16
|
fal/sync.py,sha256=ZuIJA2-hTPNANG9B_NNJZUsO68EIdTH0dc9MzeVE2VU,4340
|
|
17
17
|
fal/utils.py,sha256=9q_QrQBlQN3nZYA1kEGRfhJWi4RjnO4H1uQswfaei9w,2146
|
|
18
18
|
fal/workflows.py,sha256=Zl4f6Bs085hY40zmqScxDUyCu7zXkukDbW02iYOLTTI,14805
|
|
19
|
-
fal/auth/__init__.py,sha256=
|
|
20
|
-
fal/auth/auth0.py,sha256=
|
|
19
|
+
fal/auth/__init__.py,sha256=zk0CqYxwTFud-9vdh3og6zMWkFf_1gM5CbLrAP49lcQ,5837
|
|
20
|
+
fal/auth/auth0.py,sha256=_OhfrqF41odNebFTr8SvUm-d9REVG6wfQBHhPIQxsZU,5468
|
|
21
21
|
fal/auth/local.py,sha256=sndkM6vKpeVny6NHTacVlTbiIFqaksOmw0Viqs_RN1U,1790
|
|
22
22
|
fal/cli/__init__.py,sha256=padK4o0BFqq61kxAA1qQ0jYr2SuhA2mf90B3AaRkmJA,37
|
|
23
23
|
fal/cli/_utils.py,sha256=pHmKzpUWc2n4yPv4R0Y6DuZC5j-rVKU8oqdQDVW_-Lo,1591
|
|
24
24
|
fal/cli/api.py,sha256=-rl50A00CxqVZtDh0iZmpCHMFY0jZySaumbPCe3MSoQ,2090
|
|
25
|
-
fal/cli/apps.py,sha256=
|
|
26
|
-
fal/cli/auth.py,sha256=
|
|
25
|
+
fal/cli/apps.py,sha256=vKeTUw_uUxz5M9hlP0jcJ23qjR0GTz7ifeS4HBjKECo,10101
|
|
26
|
+
fal/cli/auth.py,sha256=3wq2NYhlA3tFOSQOhQQnbzcPBMVWTU2IZzTEVWke1BY,2604
|
|
27
27
|
fal/cli/cli_nested_json.py,sha256=veSZU8_bYV3Iu1PAoxt-4BMBraNIqgH5nughbs2UKvE,13539
|
|
28
28
|
fal/cli/create.py,sha256=a8WDq-nJLFTeoIXqpb5cr7GR7YR9ZZrQCawNm34KXXE,627
|
|
29
29
|
fal/cli/debug.py,sha256=u_urnyFzSlNnrq93zz_GXE9FX4VyVxDoamJJyrZpFI0,1312
|
|
30
|
-
fal/cli/deploy.py,sha256=
|
|
30
|
+
fal/cli/deploy.py,sha256=CWf0Y56w-hNCrht-qrfgiOi9nuvve1Kl5NFZJpt_oRA,7770
|
|
31
31
|
fal/cli/doctor.py,sha256=U4ne9LX5gQwNblsYQ27XdO8AYDgbYjTO39EtxhwexRM,983
|
|
32
32
|
fal/cli/keys.py,sha256=7Sf4DT4le89G42eAOt0ltRjbZAtE70AVQ62hmjZhUy0,3059
|
|
33
|
-
fal/cli/main.py,sha256=
|
|
33
|
+
fal/cli/main.py,sha256=4TnIno7fvFJbMPlpb8mnT7meKAR-UAOerxuo5qqPZRQ,2234
|
|
34
34
|
fal/cli/parser.py,sha256=jYsGQ0BLQuKI7KtN1jnLVYKMbLtez7hPjwTNfG3UPSk,2964
|
|
35
35
|
fal/cli/profile.py,sha256=vWngqkX7UizQIUQOpXauFz1UGJwDeh38Si6wXcIj3Eo,3396
|
|
36
36
|
fal/cli/run.py,sha256=nAC12Qss4Fg1XmV0qOS9RdGNLYcdoHeRgQMvbTN4P9I,1202
|
|
37
|
-
fal/cli/runners.py,sha256=
|
|
37
|
+
fal/cli/runners.py,sha256=z7WkZZC9rCW2mU5enowVQsxd1W18iBtLNOnPjrzhEf0,3491
|
|
38
38
|
fal/cli/secrets.py,sha256=QKSmazu-wiNF6fOpGL9v2TDYxAjX9KTi7ot7vnv6f5E,2474
|
|
39
39
|
fal/cli/teams.py,sha256=ZrWdMvLRqPt1EuxoOKAfbP6sxJeOCaMeZ2LgZqw2S_w,2153
|
|
40
40
|
fal/console/__init__.py,sha256=ernZ4bzvvliQh5SmrEqQ7lA5eVcbw6Ra2jalKtA7dxg,132
|
|
@@ -134,8 +134,8 @@ openapi_fal_rest/models/workflow_node_type.py,sha256=-FzyeY2bxcNmizKbJI8joG7byRi
|
|
|
134
134
|
openapi_fal_rest/models/workflow_schema.py,sha256=4K5gsv9u9pxx2ItkffoyHeNjBBYf6ur5bN4m_zePZNY,2019
|
|
135
135
|
openapi_fal_rest/models/workflow_schema_input.py,sha256=2OkOXWHTNsCXHWS6EGDFzcJKkW5FIap-2gfO233EvZQ,1191
|
|
136
136
|
openapi_fal_rest/models/workflow_schema_output.py,sha256=EblwSPAGfWfYVWw_WSSaBzQVju296is9o28rMBAd0mc,1196
|
|
137
|
-
fal-1.11.
|
|
138
|
-
fal-1.11.
|
|
139
|
-
fal-1.11.
|
|
140
|
-
fal-1.11.
|
|
141
|
-
fal-1.11.
|
|
137
|
+
fal-1.11.5.dist-info/METADATA,sha256=9ObQ73Rb1oolmwZPfD6veK3oeb0AGJ6EVq-QrxTXU28,4062
|
|
138
|
+
fal-1.11.5.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
|
|
139
|
+
fal-1.11.5.dist-info/entry_points.txt,sha256=32zwTUC1U1E7nSTIGCoANQOQ3I7-qHG5wI6gsVz5pNU,37
|
|
140
|
+
fal-1.11.5.dist-info/top_level.txt,sha256=r257X1L57oJL8_lM0tRrfGuXFwm66i1huwQygbpLmHw,21
|
|
141
|
+
fal-1.11.5.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|