flyte 0.1.0__py3-none-any.whl → 0.2.0a0__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 flyte might be problematic. Click here for more details.
- flyte/__init__.py +78 -2
- flyte/_bin/__init__.py +0 -0
- flyte/_bin/runtime.py +152 -0
- flyte/_build.py +26 -0
- flyte/_cache/__init__.py +12 -0
- flyte/_cache/cache.py +145 -0
- flyte/_cache/defaults.py +9 -0
- flyte/_cache/policy_function_body.py +42 -0
- flyte/_code_bundle/__init__.py +8 -0
- flyte/_code_bundle/_ignore.py +113 -0
- flyte/_code_bundle/_packaging.py +187 -0
- flyte/_code_bundle/_utils.py +323 -0
- flyte/_code_bundle/bundle.py +209 -0
- flyte/_context.py +152 -0
- flyte/_deploy.py +243 -0
- flyte/_doc.py +29 -0
- flyte/_docstring.py +32 -0
- flyte/_environment.py +84 -0
- flyte/_excepthook.py +37 -0
- flyte/_group.py +32 -0
- flyte/_hash.py +23 -0
- flyte/_image.py +762 -0
- flyte/_initialize.py +492 -0
- flyte/_interface.py +84 -0
- flyte/_internal/__init__.py +3 -0
- flyte/_internal/controllers/__init__.py +128 -0
- flyte/_internal/controllers/_local_controller.py +193 -0
- flyte/_internal/controllers/_trace.py +41 -0
- flyte/_internal/controllers/remote/__init__.py +60 -0
- flyte/_internal/controllers/remote/_action.py +146 -0
- flyte/_internal/controllers/remote/_client.py +47 -0
- flyte/_internal/controllers/remote/_controller.py +494 -0
- flyte/_internal/controllers/remote/_core.py +410 -0
- flyte/_internal/controllers/remote/_informer.py +361 -0
- flyte/_internal/controllers/remote/_service_protocol.py +50 -0
- flyte/_internal/imagebuild/__init__.py +11 -0
- flyte/_internal/imagebuild/docker_builder.py +427 -0
- flyte/_internal/imagebuild/image_builder.py +246 -0
- flyte/_internal/imagebuild/remote_builder.py +0 -0
- flyte/_internal/resolvers/__init__.py +0 -0
- flyte/_internal/resolvers/_task_module.py +54 -0
- flyte/_internal/resolvers/common.py +31 -0
- flyte/_internal/resolvers/default.py +28 -0
- flyte/_internal/runtime/__init__.py +0 -0
- flyte/_internal/runtime/convert.py +342 -0
- flyte/_internal/runtime/entrypoints.py +135 -0
- flyte/_internal/runtime/io.py +136 -0
- flyte/_internal/runtime/resources_serde.py +138 -0
- flyte/_internal/runtime/task_serde.py +330 -0
- flyte/_internal/runtime/taskrunner.py +191 -0
- flyte/_internal/runtime/types_serde.py +54 -0
- flyte/_logging.py +135 -0
- flyte/_map.py +215 -0
- flyte/_pod.py +19 -0
- flyte/_protos/__init__.py +0 -0
- flyte/_protos/common/authorization_pb2.py +66 -0
- flyte/_protos/common/authorization_pb2.pyi +108 -0
- flyte/_protos/common/authorization_pb2_grpc.py +4 -0
- flyte/_protos/common/identifier_pb2.py +71 -0
- flyte/_protos/common/identifier_pb2.pyi +82 -0
- flyte/_protos/common/identifier_pb2_grpc.py +4 -0
- flyte/_protos/common/identity_pb2.py +48 -0
- flyte/_protos/common/identity_pb2.pyi +72 -0
- flyte/_protos/common/identity_pb2_grpc.py +4 -0
- flyte/_protos/common/list_pb2.py +36 -0
- flyte/_protos/common/list_pb2.pyi +71 -0
- flyte/_protos/common/list_pb2_grpc.py +4 -0
- flyte/_protos/common/policy_pb2.py +37 -0
- flyte/_protos/common/policy_pb2.pyi +27 -0
- flyte/_protos/common/policy_pb2_grpc.py +4 -0
- flyte/_protos/common/role_pb2.py +37 -0
- flyte/_protos/common/role_pb2.pyi +53 -0
- flyte/_protos/common/role_pb2_grpc.py +4 -0
- flyte/_protos/common/runtime_version_pb2.py +28 -0
- flyte/_protos/common/runtime_version_pb2.pyi +24 -0
- flyte/_protos/common/runtime_version_pb2_grpc.py +4 -0
- flyte/_protos/logs/dataplane/payload_pb2.py +100 -0
- flyte/_protos/logs/dataplane/payload_pb2.pyi +177 -0
- flyte/_protos/logs/dataplane/payload_pb2_grpc.py +4 -0
- flyte/_protos/secret/definition_pb2.py +49 -0
- flyte/_protos/secret/definition_pb2.pyi +93 -0
- flyte/_protos/secret/definition_pb2_grpc.py +4 -0
- flyte/_protos/secret/payload_pb2.py +62 -0
- flyte/_protos/secret/payload_pb2.pyi +94 -0
- flyte/_protos/secret/payload_pb2_grpc.py +4 -0
- flyte/_protos/secret/secret_pb2.py +38 -0
- flyte/_protos/secret/secret_pb2.pyi +6 -0
- flyte/_protos/secret/secret_pb2_grpc.py +198 -0
- flyte/_protos/secret/secret_pb2_grpc_grpc.py +198 -0
- flyte/_protos/validate/validate/validate_pb2.py +76 -0
- flyte/_protos/workflow/common_pb2.py +27 -0
- flyte/_protos/workflow/common_pb2.pyi +14 -0
- flyte/_protos/workflow/common_pb2_grpc.py +4 -0
- flyte/_protos/workflow/environment_pb2.py +29 -0
- flyte/_protos/workflow/environment_pb2.pyi +12 -0
- flyte/_protos/workflow/environment_pb2_grpc.py +4 -0
- flyte/_protos/workflow/node_execution_service_pb2.py +26 -0
- flyte/_protos/workflow/node_execution_service_pb2.pyi +4 -0
- flyte/_protos/workflow/node_execution_service_pb2_grpc.py +32 -0
- flyte/_protos/workflow/queue_service_pb2.py +105 -0
- flyte/_protos/workflow/queue_service_pb2.pyi +146 -0
- flyte/_protos/workflow/queue_service_pb2_grpc.py +172 -0
- flyte/_protos/workflow/run_definition_pb2.py +128 -0
- flyte/_protos/workflow/run_definition_pb2.pyi +314 -0
- flyte/_protos/workflow/run_definition_pb2_grpc.py +4 -0
- flyte/_protos/workflow/run_logs_service_pb2.py +41 -0
- flyte/_protos/workflow/run_logs_service_pb2.pyi +28 -0
- flyte/_protos/workflow/run_logs_service_pb2_grpc.py +69 -0
- flyte/_protos/workflow/run_service_pb2.py +129 -0
- flyte/_protos/workflow/run_service_pb2.pyi +171 -0
- flyte/_protos/workflow/run_service_pb2_grpc.py +412 -0
- flyte/_protos/workflow/state_service_pb2.py +66 -0
- flyte/_protos/workflow/state_service_pb2.pyi +75 -0
- flyte/_protos/workflow/state_service_pb2_grpc.py +138 -0
- flyte/_protos/workflow/task_definition_pb2.py +79 -0
- flyte/_protos/workflow/task_definition_pb2.pyi +81 -0
- flyte/_protos/workflow/task_definition_pb2_grpc.py +4 -0
- flyte/_protos/workflow/task_service_pb2.py +60 -0
- flyte/_protos/workflow/task_service_pb2.pyi +59 -0
- flyte/_protos/workflow/task_service_pb2_grpc.py +138 -0
- flyte/_resources.py +226 -0
- flyte/_retry.py +32 -0
- flyte/_reusable_environment.py +25 -0
- flyte/_run.py +482 -0
- flyte/_secret.py +61 -0
- flyte/_task.py +449 -0
- flyte/_task_environment.py +183 -0
- flyte/_timeout.py +47 -0
- flyte/_tools.py +27 -0
- flyte/_trace.py +120 -0
- flyte/_utils/__init__.py +26 -0
- flyte/_utils/asyn.py +119 -0
- flyte/_utils/async_cache.py +139 -0
- flyte/_utils/coro_management.py +23 -0
- flyte/_utils/file_handling.py +72 -0
- flyte/_utils/helpers.py +134 -0
- flyte/_utils/lazy_module.py +54 -0
- flyte/_utils/org_discovery.py +57 -0
- flyte/_utils/uv_script_parser.py +49 -0
- flyte/_version.py +21 -0
- flyte/cli/__init__.py +3 -0
- flyte/cli/_abort.py +28 -0
- flyte/cli/_common.py +337 -0
- flyte/cli/_create.py +145 -0
- flyte/cli/_delete.py +23 -0
- flyte/cli/_deploy.py +152 -0
- flyte/cli/_gen.py +163 -0
- flyte/cli/_get.py +310 -0
- flyte/cli/_params.py +538 -0
- flyte/cli/_run.py +231 -0
- flyte/cli/main.py +166 -0
- flyte/config/__init__.py +3 -0
- flyte/config/_config.py +216 -0
- flyte/config/_internal.py +64 -0
- flyte/config/_reader.py +207 -0
- flyte/connectors/__init__.py +0 -0
- flyte/errors.py +172 -0
- flyte/extras/__init__.py +5 -0
- flyte/extras/_container.py +263 -0
- flyte/io/__init__.py +27 -0
- flyte/io/_dir.py +448 -0
- flyte/io/_file.py +467 -0
- flyte/io/_structured_dataset/__init__.py +129 -0
- flyte/io/_structured_dataset/basic_dfs.py +219 -0
- flyte/io/_structured_dataset/structured_dataset.py +1061 -0
- flyte/models.py +391 -0
- flyte/remote/__init__.py +26 -0
- flyte/remote/_client/__init__.py +0 -0
- flyte/remote/_client/_protocols.py +133 -0
- flyte/remote/_client/auth/__init__.py +12 -0
- flyte/remote/_client/auth/_auth_utils.py +14 -0
- flyte/remote/_client/auth/_authenticators/__init__.py +0 -0
- flyte/remote/_client/auth/_authenticators/base.py +397 -0
- flyte/remote/_client/auth/_authenticators/client_credentials.py +73 -0
- flyte/remote/_client/auth/_authenticators/device_code.py +118 -0
- flyte/remote/_client/auth/_authenticators/external_command.py +79 -0
- flyte/remote/_client/auth/_authenticators/factory.py +200 -0
- flyte/remote/_client/auth/_authenticators/pkce.py +516 -0
- flyte/remote/_client/auth/_channel.py +215 -0
- flyte/remote/_client/auth/_client_config.py +83 -0
- flyte/remote/_client/auth/_default_html.py +32 -0
- flyte/remote/_client/auth/_grpc_utils/__init__.py +0 -0
- flyte/remote/_client/auth/_grpc_utils/auth_interceptor.py +288 -0
- flyte/remote/_client/auth/_grpc_utils/default_metadata_interceptor.py +151 -0
- flyte/remote/_client/auth/_keyring.py +143 -0
- flyte/remote/_client/auth/_token_client.py +260 -0
- flyte/remote/_client/auth/errors.py +16 -0
- flyte/remote/_client/controlplane.py +95 -0
- flyte/remote/_console.py +18 -0
- flyte/remote/_data.py +159 -0
- flyte/remote/_logs.py +176 -0
- flyte/remote/_project.py +85 -0
- flyte/remote/_run.py +970 -0
- flyte/remote/_secret.py +132 -0
- flyte/remote/_task.py +391 -0
- flyte/report/__init__.py +3 -0
- flyte/report/_report.py +178 -0
- flyte/report/_template.html +124 -0
- flyte/storage/__init__.py +29 -0
- flyte/storage/_config.py +233 -0
- flyte/storage/_remote_fs.py +34 -0
- flyte/storage/_storage.py +271 -0
- flyte/storage/_utils.py +5 -0
- flyte/syncify/__init__.py +56 -0
- flyte/syncify/_api.py +371 -0
- flyte/types/__init__.py +36 -0
- flyte/types/_interface.py +40 -0
- flyte/types/_pickle.py +118 -0
- flyte/types/_renderer.py +162 -0
- flyte/types/_string_literals.py +120 -0
- flyte/types/_type_engine.py +2287 -0
- flyte/types/_utils.py +80 -0
- flyte-0.2.0a0.dist-info/METADATA +249 -0
- flyte-0.2.0a0.dist-info/RECORD +218 -0
- {flyte-0.1.0.dist-info → flyte-0.2.0a0.dist-info}/WHEEL +2 -1
- flyte-0.2.0a0.dist-info/entry_points.txt +3 -0
- flyte-0.2.0a0.dist-info/top_level.txt +1 -0
- flyte-0.1.0.dist-info/METADATA +0 -6
- flyte-0.1.0.dist-info/RECORD +0 -5
flyte/_environment.py
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import re
|
|
4
|
+
from dataclasses import dataclass, field
|
|
5
|
+
from typing import TYPE_CHECKING, Any, Dict, List, Literal, Optional, Union
|
|
6
|
+
|
|
7
|
+
import rich.repr
|
|
8
|
+
|
|
9
|
+
from flyte._secret import SecretRequest
|
|
10
|
+
|
|
11
|
+
from ._image import Image
|
|
12
|
+
from ._resources import Resources
|
|
13
|
+
|
|
14
|
+
if TYPE_CHECKING:
|
|
15
|
+
from kubernetes.client import V1PodTemplate
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def is_snake_or_kebab_with_numbers(s: str) -> bool:
|
|
19
|
+
return re.fullmatch(r"^[a-z0-9]+([_-][a-z0-9]+)*$", s) is not None
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
@rich.repr.auto
|
|
23
|
+
@dataclass(init=True, repr=True)
|
|
24
|
+
class Environment:
|
|
25
|
+
"""
|
|
26
|
+
:param name: Name of the environment
|
|
27
|
+
:param image: Docker image to use for the environment. If set to "auto", will use the default image.
|
|
28
|
+
:param resources: Resources to allocate for the environment.
|
|
29
|
+
:param env: Environment variables to set for the environment.
|
|
30
|
+
:param secrets: Secrets to inject into the environment.
|
|
31
|
+
:param depends_on: Environment dependencies to hint, so when you deploy the environment, the dependencies are
|
|
32
|
+
also deployed. This is useful when you have a set of environments that depend on each other.
|
|
33
|
+
"""
|
|
34
|
+
|
|
35
|
+
name: str
|
|
36
|
+
depends_on: List[Environment] = field(default_factory=list)
|
|
37
|
+
pod_template: Optional[Union[str, "V1PodTemplate"]] = None
|
|
38
|
+
description: Optional[str] = None
|
|
39
|
+
secrets: Optional[SecretRequest] = None
|
|
40
|
+
env: Optional[Dict[str, str]] = None
|
|
41
|
+
resources: Optional[Resources] = None
|
|
42
|
+
image: Union[str, Image, Literal["auto"]] = "auto"
|
|
43
|
+
|
|
44
|
+
def __post_init__(self):
|
|
45
|
+
if not is_snake_or_kebab_with_numbers(self.name):
|
|
46
|
+
raise ValueError(f"Environment name '{self.name}' must be in snake_case or kebab-case format.")
|
|
47
|
+
|
|
48
|
+
def add_dependency(self, *env: Environment):
|
|
49
|
+
"""
|
|
50
|
+
Add a dependency to the environment.
|
|
51
|
+
"""
|
|
52
|
+
self.depends_on.extend(env)
|
|
53
|
+
|
|
54
|
+
def clone_with(
|
|
55
|
+
self,
|
|
56
|
+
name: str,
|
|
57
|
+
image: Optional[Union[str, Image, Literal["auto"]]] = None,
|
|
58
|
+
resources: Optional[Resources] = None,
|
|
59
|
+
env: Optional[Dict[str, str]] = None,
|
|
60
|
+
secrets: Optional[SecretRequest] = None,
|
|
61
|
+
depends_on: Optional[List[Environment]] = None,
|
|
62
|
+
**kwargs: Any,
|
|
63
|
+
) -> Environment:
|
|
64
|
+
raise NotImplementedError
|
|
65
|
+
|
|
66
|
+
def _get_kwargs(self) -> Dict[str, Any]:
|
|
67
|
+
"""
|
|
68
|
+
Get the keyword arguments for the environment.
|
|
69
|
+
"""
|
|
70
|
+
kwargs: Dict[str, Any] = {
|
|
71
|
+
"depends_on": self.depends_on,
|
|
72
|
+
"image": self.image,
|
|
73
|
+
}
|
|
74
|
+
if self.resources is not None:
|
|
75
|
+
kwargs["resources"] = self.resources
|
|
76
|
+
if self.secrets is not None:
|
|
77
|
+
kwargs["secrets"] = self.secrets
|
|
78
|
+
if self.env is not None:
|
|
79
|
+
kwargs["env"] = self.env
|
|
80
|
+
if self.pod_template is not None:
|
|
81
|
+
kwargs["pod_template"] = self.pod_template
|
|
82
|
+
if self.description is not None:
|
|
83
|
+
kwargs["description"] = self.description
|
|
84
|
+
return kwargs
|
flyte/_excepthook.py
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
import sys
|
|
3
|
+
import traceback
|
|
4
|
+
|
|
5
|
+
from flyte._logging import logger
|
|
6
|
+
|
|
7
|
+
# Save the original excepthook so we can call it later
|
|
8
|
+
original_excepthook = sys.excepthook
|
|
9
|
+
|
|
10
|
+
# Filters: exclude frames where filename or function name contains these substrings
|
|
11
|
+
EXCLUDED_MODULE_SUBSTRINGS = ["_internal", "syncify"]
|
|
12
|
+
EXCLUDED_FILE_SUBSTRINGS = ["syncify", "_code_bundle"]
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def should_include_frame(frame: traceback.FrameSummary) -> bool:
|
|
16
|
+
return not (
|
|
17
|
+
any(sub in frame.name for sub in EXCLUDED_MODULE_SUBSTRINGS)
|
|
18
|
+
or any(sub in frame.filename for sub in EXCLUDED_FILE_SUBSTRINGS)
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def custom_excepthook(exc_type, exc_value, exc_tb):
|
|
23
|
+
"""
|
|
24
|
+
Custom exception hook to filter and format tracebacks.
|
|
25
|
+
If the logger's level is DEBUG, it uses the original excepthook.
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
if logger.getEffectiveLevel() <= logging.DEBUG:
|
|
29
|
+
original_excepthook(exc_type, exc_value, exc_tb)
|
|
30
|
+
else:
|
|
31
|
+
# Extract and filter traceback
|
|
32
|
+
tb_list = traceback.extract_tb(exc_tb)
|
|
33
|
+
filtered_tb = [frame for frame in tb_list if should_include_frame(frame)]
|
|
34
|
+
# Print the filtered version (custom format)
|
|
35
|
+
print("Filtered traceback (most recent call last):")
|
|
36
|
+
print("".join(traceback.format_list(filtered_tb)))
|
|
37
|
+
print(f"{exc_type.__name__}: {exc_value}\n")
|
flyte/_group.py
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
from contextlib import contextmanager
|
|
2
|
+
|
|
3
|
+
from ._context import internal_ctx
|
|
4
|
+
from .models import GroupData
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
@contextmanager
|
|
8
|
+
def group(name: str):
|
|
9
|
+
"""
|
|
10
|
+
Create a new group with the given name. The method is intended to be used as a context manager.
|
|
11
|
+
|
|
12
|
+
Example:
|
|
13
|
+
```python
|
|
14
|
+
@task
|
|
15
|
+
async def my_task():
|
|
16
|
+
...
|
|
17
|
+
with group("my_group"):
|
|
18
|
+
t1(x,y) # tasks in this block will be grouped under "my_group"
|
|
19
|
+
...
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
:param name: The name of the group
|
|
23
|
+
"""
|
|
24
|
+
ctx = internal_ctx()
|
|
25
|
+
if ctx.data.task_context is None:
|
|
26
|
+
yield
|
|
27
|
+
return
|
|
28
|
+
tctx = ctx.data.task_context
|
|
29
|
+
new_tctx = tctx.replace(group_data=GroupData(name))
|
|
30
|
+
with ctx.replace_task_context(new_tctx):
|
|
31
|
+
yield
|
|
32
|
+
# Exit the context and restore the previous context
|
flyte/_hash.py
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
from typing import Callable, Generic, TypeVar
|
|
2
|
+
|
|
3
|
+
T = TypeVar("T")
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class HashOnReferenceMixin(object):
|
|
7
|
+
def __hash__(self):
|
|
8
|
+
return hash(id(self))
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class HashMethod(Generic[T]):
|
|
12
|
+
"""
|
|
13
|
+
Flyte-specific object used to wrap the hash function for a specific type
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
def __init__(self, function: Callable[[T], str]):
|
|
17
|
+
self._function = function
|
|
18
|
+
|
|
19
|
+
def calculate(self, obj: T) -> str:
|
|
20
|
+
"""
|
|
21
|
+
Calculate hash for `obj`.
|
|
22
|
+
"""
|
|
23
|
+
return self._function(obj)
|