fal 0.12.2__py3-none-any.whl → 0.12.4__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 +11 -2
- fal/api.py +130 -50
- fal/app.py +81 -134
- fal/apps.py +24 -6
- fal/auth/__init__.py +14 -2
- fal/auth/auth0.py +34 -25
- fal/cli.py +9 -4
- fal/env.py +0 -4
- fal/flags.py +1 -0
- fal/logging/__init__.py +0 -2
- fal/logging/trace.py +8 -1
- fal/sdk.py +33 -6
- fal/toolkit/__init__.py +16 -0
- fal/workflows.py +481 -0
- {fal-0.12.2.dist-info → fal-0.12.4.dist-info}/METADATA +4 -7
- fal-0.12.4.dist-info/RECORD +88 -0
- openapi_fal_rest/__init__.py +1 -0
- openapi_fal_rest/api/workflows/__init__.py +0 -0
- openapi_fal_rest/api/workflows/create_or_update_workflow_workflows_post.py +172 -0
- openapi_fal_rest/api/workflows/delete_workflow_workflows_user_id_workflow_name_delete.py +175 -0
- openapi_fal_rest/api/workflows/execute_workflow_workflows_user_id_workflow_name_post.py +268 -0
- openapi_fal_rest/api/workflows/get_workflow_workflows_user_id_workflow_name_get.py +181 -0
- openapi_fal_rest/api/workflows/get_workflows_workflows_get.py +189 -0
- openapi_fal_rest/models/__init__.py +34 -0
- openapi_fal_rest/models/app_metadata_response_app_metadata.py +1 -0
- openapi_fal_rest/models/customer_details.py +15 -14
- openapi_fal_rest/models/execute_workflow_workflows_user_id_workflow_name_post_json_body_type_0.py +44 -0
- openapi_fal_rest/models/execute_workflow_workflows_user_id_workflow_name_post_response_200_type_0.py +44 -0
- openapi_fal_rest/models/page_workflow_item.py +107 -0
- openapi_fal_rest/models/typed_workflow.py +85 -0
- openapi_fal_rest/models/workflow_contents.py +98 -0
- openapi_fal_rest/models/workflow_contents_nodes.py +59 -0
- openapi_fal_rest/models/workflow_contents_output.py +44 -0
- openapi_fal_rest/models/workflow_detail.py +149 -0
- openapi_fal_rest/models/workflow_detail_contents_type_0.py +44 -0
- openapi_fal_rest/models/workflow_item.py +80 -0
- openapi_fal_rest/models/workflow_node.py +74 -0
- openapi_fal_rest/models/workflow_node_type.py +9 -0
- openapi_fal_rest/models/workflow_schema.py +73 -0
- openapi_fal_rest/models/workflow_schema_input.py +44 -0
- openapi_fal_rest/models/workflow_schema_output.py +44 -0
- openapi_fal_rest/types.py +1 -0
- fal/logging/datadog.py +0 -78
- fal-0.12.2.dist-info/RECORD +0 -67
- {fal-0.12.2.dist-info → fal-0.12.4.dist-info}/WHEEL +0 -0
- {fal-0.12.2.dist-info → fal-0.12.4.dist-info}/entry_points.txt +0 -0
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
from typing import Any, Dict, List, Type, TypeVar, cast
|
|
2
|
+
|
|
3
|
+
import attr
|
|
4
|
+
|
|
5
|
+
from ..models.workflow_node_type import WorkflowNodeType
|
|
6
|
+
|
|
7
|
+
T = TypeVar("T", bound="WorkflowNode")
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
@attr.s(auto_attribs=True)
|
|
11
|
+
class WorkflowNode:
|
|
12
|
+
"""
|
|
13
|
+
Attributes:
|
|
14
|
+
type (WorkflowNodeType):
|
|
15
|
+
id (str):
|
|
16
|
+
depends (List[str]):
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
type: WorkflowNodeType
|
|
20
|
+
id: str
|
|
21
|
+
depends: List[str]
|
|
22
|
+
additional_properties: Dict[str, Any] = attr.ib(init=False, factory=dict)
|
|
23
|
+
|
|
24
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
25
|
+
type = self.type.value
|
|
26
|
+
|
|
27
|
+
id = self.id
|
|
28
|
+
depends = self.depends
|
|
29
|
+
|
|
30
|
+
field_dict: Dict[str, Any] = {}
|
|
31
|
+
field_dict.update(self.additional_properties)
|
|
32
|
+
field_dict.update(
|
|
33
|
+
{
|
|
34
|
+
"type": type,
|
|
35
|
+
"id": id,
|
|
36
|
+
"depends": depends,
|
|
37
|
+
}
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
return field_dict
|
|
41
|
+
|
|
42
|
+
@classmethod
|
|
43
|
+
def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T:
|
|
44
|
+
d = src_dict.copy()
|
|
45
|
+
type = WorkflowNodeType(d.pop("type"))
|
|
46
|
+
|
|
47
|
+
id = d.pop("id")
|
|
48
|
+
|
|
49
|
+
depends = cast(List[str], d.pop("depends"))
|
|
50
|
+
|
|
51
|
+
workflow_node = cls(
|
|
52
|
+
type=type,
|
|
53
|
+
id=id,
|
|
54
|
+
depends=depends,
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
workflow_node.additional_properties = d
|
|
58
|
+
return workflow_node
|
|
59
|
+
|
|
60
|
+
@property
|
|
61
|
+
def additional_keys(self) -> List[str]:
|
|
62
|
+
return list(self.additional_properties.keys())
|
|
63
|
+
|
|
64
|
+
def __getitem__(self, key: str) -> Any:
|
|
65
|
+
return self.additional_properties[key]
|
|
66
|
+
|
|
67
|
+
def __setitem__(self, key: str, value: Any) -> None:
|
|
68
|
+
self.additional_properties[key] = value
|
|
69
|
+
|
|
70
|
+
def __delitem__(self, key: str) -> None:
|
|
71
|
+
del self.additional_properties[key]
|
|
72
|
+
|
|
73
|
+
def __contains__(self, key: str) -> bool:
|
|
74
|
+
return key in self.additional_properties
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
from typing import TYPE_CHECKING, Any, Dict, List, Type, TypeVar
|
|
2
|
+
|
|
3
|
+
import attr
|
|
4
|
+
|
|
5
|
+
if TYPE_CHECKING:
|
|
6
|
+
from ..models.workflow_schema_input import WorkflowSchemaInput
|
|
7
|
+
from ..models.workflow_schema_output import WorkflowSchemaOutput
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
T = TypeVar("T", bound="WorkflowSchema")
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
@attr.s(auto_attribs=True)
|
|
14
|
+
class WorkflowSchema:
|
|
15
|
+
"""
|
|
16
|
+
Attributes:
|
|
17
|
+
input_ (WorkflowSchemaInput):
|
|
18
|
+
output (WorkflowSchemaOutput):
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
input_: "WorkflowSchemaInput"
|
|
22
|
+
output: "WorkflowSchemaOutput"
|
|
23
|
+
additional_properties: Dict[str, Any] = attr.ib(init=False, factory=dict)
|
|
24
|
+
|
|
25
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
26
|
+
input_ = self.input_.to_dict()
|
|
27
|
+
|
|
28
|
+
output = self.output.to_dict()
|
|
29
|
+
|
|
30
|
+
field_dict: Dict[str, Any] = {}
|
|
31
|
+
field_dict.update(self.additional_properties)
|
|
32
|
+
field_dict.update(
|
|
33
|
+
{
|
|
34
|
+
"input": input_,
|
|
35
|
+
"output": output,
|
|
36
|
+
}
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
return field_dict
|
|
40
|
+
|
|
41
|
+
@classmethod
|
|
42
|
+
def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T:
|
|
43
|
+
from ..models.workflow_schema_input import WorkflowSchemaInput
|
|
44
|
+
from ..models.workflow_schema_output import WorkflowSchemaOutput
|
|
45
|
+
|
|
46
|
+
d = src_dict.copy()
|
|
47
|
+
input_ = WorkflowSchemaInput.from_dict(d.pop("input"))
|
|
48
|
+
|
|
49
|
+
output = WorkflowSchemaOutput.from_dict(d.pop("output"))
|
|
50
|
+
|
|
51
|
+
workflow_schema = cls(
|
|
52
|
+
input_=input_,
|
|
53
|
+
output=output,
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
workflow_schema.additional_properties = d
|
|
57
|
+
return workflow_schema
|
|
58
|
+
|
|
59
|
+
@property
|
|
60
|
+
def additional_keys(self) -> List[str]:
|
|
61
|
+
return list(self.additional_properties.keys())
|
|
62
|
+
|
|
63
|
+
def __getitem__(self, key: str) -> Any:
|
|
64
|
+
return self.additional_properties[key]
|
|
65
|
+
|
|
66
|
+
def __setitem__(self, key: str, value: Any) -> None:
|
|
67
|
+
self.additional_properties[key] = value
|
|
68
|
+
|
|
69
|
+
def __delitem__(self, key: str) -> None:
|
|
70
|
+
del self.additional_properties[key]
|
|
71
|
+
|
|
72
|
+
def __contains__(self, key: str) -> bool:
|
|
73
|
+
return key in self.additional_properties
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
from typing import Any, Dict, List, Type, TypeVar
|
|
2
|
+
|
|
3
|
+
import attr
|
|
4
|
+
|
|
5
|
+
T = TypeVar("T", bound="WorkflowSchemaInput")
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
@attr.s(auto_attribs=True)
|
|
9
|
+
class WorkflowSchemaInput:
|
|
10
|
+
""" """
|
|
11
|
+
|
|
12
|
+
additional_properties: Dict[str, Any] = attr.ib(init=False, factory=dict)
|
|
13
|
+
|
|
14
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
15
|
+
|
|
16
|
+
field_dict: Dict[str, Any] = {}
|
|
17
|
+
field_dict.update(self.additional_properties)
|
|
18
|
+
field_dict.update({})
|
|
19
|
+
|
|
20
|
+
return field_dict
|
|
21
|
+
|
|
22
|
+
@classmethod
|
|
23
|
+
def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T:
|
|
24
|
+
d = src_dict.copy()
|
|
25
|
+
workflow_schema_input = cls()
|
|
26
|
+
|
|
27
|
+
workflow_schema_input.additional_properties = d
|
|
28
|
+
return workflow_schema_input
|
|
29
|
+
|
|
30
|
+
@property
|
|
31
|
+
def additional_keys(self) -> List[str]:
|
|
32
|
+
return list(self.additional_properties.keys())
|
|
33
|
+
|
|
34
|
+
def __getitem__(self, key: str) -> Any:
|
|
35
|
+
return self.additional_properties[key]
|
|
36
|
+
|
|
37
|
+
def __setitem__(self, key: str, value: Any) -> None:
|
|
38
|
+
self.additional_properties[key] = value
|
|
39
|
+
|
|
40
|
+
def __delitem__(self, key: str) -> None:
|
|
41
|
+
del self.additional_properties[key]
|
|
42
|
+
|
|
43
|
+
def __contains__(self, key: str) -> bool:
|
|
44
|
+
return key in self.additional_properties
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
from typing import Any, Dict, List, Type, TypeVar
|
|
2
|
+
|
|
3
|
+
import attr
|
|
4
|
+
|
|
5
|
+
T = TypeVar("T", bound="WorkflowSchemaOutput")
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
@attr.s(auto_attribs=True)
|
|
9
|
+
class WorkflowSchemaOutput:
|
|
10
|
+
""" """
|
|
11
|
+
|
|
12
|
+
additional_properties: Dict[str, Any] = attr.ib(init=False, factory=dict)
|
|
13
|
+
|
|
14
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
15
|
+
|
|
16
|
+
field_dict: Dict[str, Any] = {}
|
|
17
|
+
field_dict.update(self.additional_properties)
|
|
18
|
+
field_dict.update({})
|
|
19
|
+
|
|
20
|
+
return field_dict
|
|
21
|
+
|
|
22
|
+
@classmethod
|
|
23
|
+
def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T:
|
|
24
|
+
d = src_dict.copy()
|
|
25
|
+
workflow_schema_output = cls()
|
|
26
|
+
|
|
27
|
+
workflow_schema_output.additional_properties = d
|
|
28
|
+
return workflow_schema_output
|
|
29
|
+
|
|
30
|
+
@property
|
|
31
|
+
def additional_keys(self) -> List[str]:
|
|
32
|
+
return list(self.additional_properties.keys())
|
|
33
|
+
|
|
34
|
+
def __getitem__(self, key: str) -> Any:
|
|
35
|
+
return self.additional_properties[key]
|
|
36
|
+
|
|
37
|
+
def __setitem__(self, key: str, value: Any) -> None:
|
|
38
|
+
self.additional_properties[key] = value
|
|
39
|
+
|
|
40
|
+
def __delitem__(self, key: str) -> None:
|
|
41
|
+
del self.additional_properties[key]
|
|
42
|
+
|
|
43
|
+
def __contains__(self, key: str) -> bool:
|
|
44
|
+
return key in self.additional_properties
|
openapi_fal_rest/types.py
CHANGED
fal/logging/datadog.py
DELETED
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
|
-
|
|
3
|
-
import sys
|
|
4
|
-
import traceback
|
|
5
|
-
import warnings
|
|
6
|
-
|
|
7
|
-
from datadog_api_client import Configuration, ThreadedApiClient
|
|
8
|
-
from datadog_api_client.v2.api.logs_api import LogsApi
|
|
9
|
-
from datadog_api_client.v2.model.http_log import HTTPLog
|
|
10
|
-
from datadog_api_client.v2.model.http_log_item import HTTPLogItem
|
|
11
|
-
from structlog.typing import EventDict, WrappedLogger
|
|
12
|
-
|
|
13
|
-
from fal.env import CLI_ENV, DATADOG_API_KEY, DATADOG_APP_KEY
|
|
14
|
-
from fal.logging.trace import get_current_span_context
|
|
15
|
-
|
|
16
|
-
if sys.version_info >= (3, 10):
|
|
17
|
-
import importlib.metadata as importlib_metadata
|
|
18
|
-
else:
|
|
19
|
-
import importlib_metadata
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
configuration = Configuration()
|
|
23
|
-
configuration.api_key["apiKeyAuth"] = DATADOG_API_KEY
|
|
24
|
-
configuration.api_key["appKeyAuth"] = DATADOG_APP_KEY
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
def _is_error_level(level: str) -> bool:
|
|
28
|
-
return level in ["error", "exception", "critical"]
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
def submit_to_datadog(
|
|
32
|
-
logger: WrappedLogger, method_name: str, event_dict: EventDict
|
|
33
|
-
) -> EventDict:
|
|
34
|
-
if configuration.api_key["apiKeyAuth"] is None:
|
|
35
|
-
return event_dict
|
|
36
|
-
|
|
37
|
-
log_data = dict(event_dict)
|
|
38
|
-
event = log_data.pop("event")
|
|
39
|
-
level = log_data.pop("level")
|
|
40
|
-
|
|
41
|
-
current_span = get_current_span_context()
|
|
42
|
-
attributes = log_data.copy()
|
|
43
|
-
tags: dict[str, str] = {}
|
|
44
|
-
if current_span is not None:
|
|
45
|
-
tags["invocation_id"] = current_span.invocation_id
|
|
46
|
-
attributes["dd.trace_id"] = current_span.trace_id
|
|
47
|
-
attributes["dd.span_id"] = current_span.span_id
|
|
48
|
-
|
|
49
|
-
stack = None
|
|
50
|
-
if _is_error_level(method_name):
|
|
51
|
-
attributes["error.message"] = str(event)
|
|
52
|
-
attributes["error.kind"] = type(event).__name__
|
|
53
|
-
stack = traceback.format_exc()
|
|
54
|
-
|
|
55
|
-
ddtags = ",".join([f"{key}:{value}" for (key, value) in tags.items()])
|
|
56
|
-
log_item = HTTPLogItem(
|
|
57
|
-
message=str(event),
|
|
58
|
-
level=level,
|
|
59
|
-
hostname="client",
|
|
60
|
-
service="fal-serverless-cli",
|
|
61
|
-
env=CLI_ENV,
|
|
62
|
-
version=importlib_metadata.version("fal"),
|
|
63
|
-
ddsource="python",
|
|
64
|
-
ddtags=ddtags,
|
|
65
|
-
traceback=stack,
|
|
66
|
-
**attributes,
|
|
67
|
-
)
|
|
68
|
-
with ThreadedApiClient(configuration) as api_client:
|
|
69
|
-
# Deprecation warning of underlying dependencies should not be shown to users
|
|
70
|
-
# TODO enable it only in the prod distribution (better: remove when fixed)
|
|
71
|
-
warnings.filterwarnings("ignore", category=DeprecationWarning)
|
|
72
|
-
|
|
73
|
-
# TODO improve this - add batching
|
|
74
|
-
api_instance = LogsApi(api_client)
|
|
75
|
-
_ = api_instance.submit_log(HTTPLog([log_item]))
|
|
76
|
-
api_client.close()
|
|
77
|
-
|
|
78
|
-
return event_dict
|
fal-0.12.2.dist-info/RECORD
DELETED
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
openapi_fal_rest/__init__.py,sha256=sqsyB55QptrijXTCVFQfIJ6uC__vXez1i5KNvYplk5w,151
|
|
2
|
-
openapi_fal_rest/api/__init__.py,sha256=87ApBzKyGb5zsgTMOkQXDqsLZCmaSFoJMwbGzCDQZMw,47
|
|
3
|
-
openapi_fal_rest/api/applications/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
|
-
openapi_fal_rest/api/applications/app_metadata.py,sha256=GqG6Q7jt8Jcyhb3ms_6i0M1B3cy205y3_A8W-AGEapY,5120
|
|
5
|
-
openapi_fal_rest/api/billing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
6
|
-
openapi_fal_rest/api/billing/get_user_details.py,sha256=2HQHRUQj8QwqSKgiV_USBdXCxGlfaVTBbLiPaDsMBUM,4013
|
|
7
|
-
openapi_fal_rest/api/files/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
8
|
-
openapi_fal_rest/api/files/check_dir_hash.py,sha256=zPNlOwG4YVvnhgfrleQtYLhI1lG0t8YQ1CU3TyvXvfk,4747
|
|
9
|
-
openapi_fal_rest/api/files/upload_local_file.py,sha256=p2lM7hswGbs8KNLg1Pp6vwV7x-1PKtWX-aYmaHUHSDU,5649
|
|
10
|
-
openapi_fal_rest/client.py,sha256=G6BpJg9j7-JsrAUGddYwkzeWRYickBjPdcVgXoPzxuE,2817
|
|
11
|
-
openapi_fal_rest/errors.py,sha256=8mXSxdfSGzxT82srdhYbR0fHfgenxJXaUtMkaGgb6iU,470
|
|
12
|
-
openapi_fal_rest/models/__init__.py,sha256=u2YVZnZwu9YqDPasBnh9GLVIkEJj4PFCThf97Pblx4o,601
|
|
13
|
-
openapi_fal_rest/models/app_metadata_response_app_metadata.py,sha256=swJMfWvbjlMF8dmv-KEqcR9If0UjsRogwj9UqBBlkpc,1251
|
|
14
|
-
openapi_fal_rest/models/body_upload_local_file.py,sha256=rOTEbYBXfwZk8TsywZWSPPQQEfJgvsLIufT6A40RJZs,1980
|
|
15
|
-
openapi_fal_rest/models/customer_details.py,sha256=XQBaO-A5DI54nCau5ZIR0jhCAmsBJKrtDgApuu6PFrU,3912
|
|
16
|
-
openapi_fal_rest/models/hash_check.py,sha256=T9R7n4EdadCxbFUZvresZZFPYwDfyJMZVNxY6wIJEE8,1352
|
|
17
|
-
openapi_fal_rest/models/http_validation_error.py,sha256=2nhqlv8RX2qp6VR7hb8-SKtzJWXSZ0J95ThW9J4agJo,2131
|
|
18
|
-
openapi_fal_rest/models/lock_reason.py,sha256=3b_foCV6bZKvsbyic3hM1_qzvJk_9ZD_5mS1GzSawdw,703
|
|
19
|
-
openapi_fal_rest/models/validation_error.py,sha256=I6tB-HbEOmE0ua27erDX5PX5YUynENv_dgPN3SrwTrQ,2091
|
|
20
|
-
openapi_fal_rest/py.typed,sha256=8ZJUsxZiuOy1oJeVhsTWQhTG_6pTVHVXk5hJL79ebTk,25
|
|
21
|
-
openapi_fal_rest/types.py,sha256=4xaUIOliefW-5jz_p-JT2LO7-V0wKWaniHGtjPBQfvQ,993
|
|
22
|
-
fal/__init__.py,sha256=--wkZvDt27S2vPi3hk8Nc-XRUl4ac_cB6P_12VSqODw,1085
|
|
23
|
-
fal/_serialization.py,sha256=l_dZuSX5BT7SogXw1CalYLfT2H3zy3tfq4y6jHuxZqQ,4201
|
|
24
|
-
fal/api.py,sha256=xEVuBRVKac82MgcHUqw10IDHims5fwv6oxqpwAmAx1Q,30353
|
|
25
|
-
fal/app.py,sha256=_LFUjrf6K8qYKKpDyfJR2dOFmumJxZTgbOz64Ltea9g,13660
|
|
26
|
-
fal/apps.py,sha256=utg7mGvklL1oyUBbuEDDcVN234yDLVseqnY1DJsT8nY,6126
|
|
27
|
-
fal/auth/__init__.py,sha256=-s7kogdp3szq_pAxHGkfOQjrSBT1DlBx3X-Ifo_Ne1o,3124
|
|
28
|
-
fal/auth/auth0.py,sha256=S7bl0ti1w8t-OaAggju12xx0lOtqkXy_qML7QP0t4uI,5303
|
|
29
|
-
fal/auth/local.py,sha256=lZqp4j32l2xFpY8zYvLoIHHyJrNAJDcm5MxgsLpY_pw,1786
|
|
30
|
-
fal/cli.py,sha256=dxnsHzsochm-u8oQ3gFy6uVHbllI_14bU54bDpyMOwk,17129
|
|
31
|
-
fal/console/__init__.py,sha256=ernZ4bzvvliQh5SmrEqQ7lA5eVcbw6Ra2jalKtA7dxg,132
|
|
32
|
-
fal/console/icons.py,sha256=De9MfFaSkO2Lqfne13n3PrYfTXJVIzYZVqYn5BWsdrA,108
|
|
33
|
-
fal/console/ux.py,sha256=4vj1aGA3grRn-ebeMuDLR6u3YjMwUGpqtNgdTG9su5s,485
|
|
34
|
-
fal/env.py,sha256=g_s2FAtY2-6zyTar_2NUmswHcab--3xozEJW4E6Y9iQ,172
|
|
35
|
-
fal/exceptions/__init__.py,sha256=Q4LCSqIrJ8GFQZWH5BvWL5mDPR0HwYQuIhNvsdiOkEU,938
|
|
36
|
-
fal/exceptions/_base.py,sha256=LeQmx-soL_-s1742WKN18VwTVjUuYP0L0BdQHPJBpM4,460
|
|
37
|
-
fal/exceptions/auth.py,sha256=01Ro7SyGJpwchubdHe14Cl6-Al1jUj16Sy4BvakNWf4,384
|
|
38
|
-
fal/exceptions/handlers.py,sha256=b21a8S13euECArjpgm2N69HsShqLYVqAboIeMoWlWA4,1414
|
|
39
|
-
fal/flags.py,sha256=8OaKkJg_-UvtyRbZf-rW5ZTW3B1xQpzzXnLRNFB7grA,889
|
|
40
|
-
fal/logging/__init__.py,sha256=tXFlHBtPFydL3Wgzhq72-EzCFKrnDYvZIF0pKYGVxac,1649
|
|
41
|
-
fal/logging/datadog.py,sha256=pC63CrJLF-bXUaF5RUxkdq9wBgklzrMglcdM9gw7teA,2542
|
|
42
|
-
fal/logging/isolate.py,sha256=yDW_P4aR-t53IRmvD2Iprufv1Wn-xQXoBbMB2Ufr59s,2122
|
|
43
|
-
fal/logging/style.py,sha256=ckIgHzvF4DShM5kQh8F133X53z_vF46snuDHVmo_h9g,386
|
|
44
|
-
fal/logging/trace.py,sha256=-_ShrBsBl9jUlGC-Lwe2r-LIkfj21SETQAhSNrWxbGs,1807
|
|
45
|
-
fal/logging/user.py,sha256=A8vbZX9z13TPZEDzvlbvCDDdD0EL1KrCP3qHdrT58-A,632
|
|
46
|
-
fal/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
47
|
-
fal/rest_client.py,sha256=kGBGmuyHfX1lR910EoKCYPjsyU8MdXawT_cW2q8Sajc,568
|
|
48
|
-
fal/sdk.py,sha256=Reo6xTxvDCNEEawl4GUNQi83RQ_g2isuAVhXw7fz9oU,17918
|
|
49
|
-
fal/sync.py,sha256=Ljet584PVFz4r888-0bwV1Kio-tTneF_85TnHvBPvJw,4277
|
|
50
|
-
fal/toolkit/__init__.py,sha256=uHhoAG9FjLzxkmF-Qo9fxz8lrL9t6GE-3zsa_O4Q9V0,420
|
|
51
|
-
fal/toolkit/exceptions.py,sha256=--WKKYxUop6WFy_vqAPXK6uH8C-JR98gnNXwhHNCb7E,258
|
|
52
|
-
fal/toolkit/file/__init__.py,sha256=YpUU6YziZV1AMuq12L0EDWToS0sgpHSGWsARbiOEHWk,56
|
|
53
|
-
fal/toolkit/file/file.py,sha256=ku4agJiGXU2gdfZmFrU5mDlVsag834zoeskbo-6ErEU,5926
|
|
54
|
-
fal/toolkit/file/providers/fal.py,sha256=hO59loXzGP4Vg-Q1FFR56nWbbI6BccJRnFsEI6z6EQE,3404
|
|
55
|
-
fal/toolkit/file/providers/gcp.py,sha256=Bq5SJSghXF8YfFnbZ83_mPdrWs2dFhi8ytODp92USgk,1962
|
|
56
|
-
fal/toolkit/file/providers/r2.py,sha256=xJtZfX3cfzJgLXS3F8mHArbrHi0_QBpIMy5M4-tS8H8,2586
|
|
57
|
-
fal/toolkit/file/types.py,sha256=MTIj6Y_ioL4CiMZXMiqx74vlmUifc3SNvcrWAXQfULE,1109
|
|
58
|
-
fal/toolkit/image/__init__.py,sha256=liEq0CqkRqUQ1udnnyGVFBwCXUhR2f6o5ffbtbAlP8o,57
|
|
59
|
-
fal/toolkit/image/image.py,sha256=bF1PzO4cJoFGJFpQYeG0sNaGuw3cC1zmobmbZrxbPFY,4339
|
|
60
|
-
fal/toolkit/mainify.py,sha256=E7gE45nZQZoaJdSlIq0mqajcH-IjcuPBWFmKm5hvhAU,406
|
|
61
|
-
fal/toolkit/optimize.py,sha256=OIhX0T-efRMgUJDpvL0bujdun5SovZgTdKxNOv01b_Y,1394
|
|
62
|
-
fal/toolkit/utils/__init__.py,sha256=b3zVpm50Upx1saXU7RiV9r9in6-Chs4OU9KRjBv7MYI,83
|
|
63
|
-
fal/toolkit/utils/download_utils.py,sha256=bigcLJjLK1OBAGxpYisJ0-5vcQCh0HAPuCykPrcCNd0,15596
|
|
64
|
-
fal-0.12.2.dist-info/WHEEL,sha256=vVCvjcmxuUltf8cYhJ0sJMRDLr1XsPuxEId8YDzbyCY,88
|
|
65
|
-
fal-0.12.2.dist-info/METADATA,sha256=56jV53hKxoUJA81vNfeG1AVXiVciOE10nb6nICONR5M,3078
|
|
66
|
-
fal-0.12.2.dist-info/entry_points.txt,sha256=nE9GBVV3PdBosudFwbIzZQUe_9lfPR6EH8K_FdDASnM,62
|
|
67
|
-
fal-0.12.2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|