flyte 0.2.0b10__py3-none-any.whl → 0.2.0b11__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 +2 -0
- flyte/_bin/runtime.py +6 -3
- flyte/_initialize.py +16 -2
- flyte/_internal/controllers/_local_controller.py +2 -1
- flyte/_internal/controllers/_trace.py +1 -0
- flyte/_internal/controllers/remote/_action.py +1 -1
- flyte/_internal/controllers/remote/_informer.py +1 -1
- flyte/_internal/runtime/convert.py +7 -4
- flyte/_internal/runtime/task_serde.py +80 -10
- flyte/_internal/runtime/taskrunner.py +1 -1
- flyte/_logging.py +1 -1
- flyte/_pod.py +19 -0
- flyte/_task.py +2 -13
- flyte/_utils/org_discovery.py +31 -0
- flyte/_version.py +2 -2
- flyte/cli/_common.py +2 -2
- flyte/cli/_create.py +15 -7
- flyte/cli/_params.py +1 -1
- flyte/cli/_run.py +1 -1
- flyte/cli/main.py +3 -7
- flyte/errors.py +11 -0
- flyte/extras/_container.py +0 -7
- flyte/remote/_data.py +2 -1
- flyte/types/_type_engine.py +3 -1
- {flyte-0.2.0b10.dist-info → flyte-0.2.0b11.dist-info}/METADATA +1 -1
- {flyte-0.2.0b10.dist-info → flyte-0.2.0b11.dist-info}/RECORD +29 -27
- {flyte-0.2.0b10.dist-info → flyte-0.2.0b11.dist-info}/WHEEL +0 -0
- {flyte-0.2.0b10.dist-info → flyte-0.2.0b11.dist-info}/entry_points.txt +0 -0
- {flyte-0.2.0b10.dist-info → flyte-0.2.0b11.dist-info}/top_level.txt +0 -0
flyte/__init__.py
CHANGED
|
@@ -25,6 +25,7 @@ __all__ = [
|
|
|
25
25
|
"Device",
|
|
26
26
|
"Environment",
|
|
27
27
|
"Image",
|
|
28
|
+
"PodTemplate",
|
|
28
29
|
"Resources",
|
|
29
30
|
"RetryStrategy",
|
|
30
31
|
"ReusePolicy",
|
|
@@ -53,6 +54,7 @@ from ._group import group
|
|
|
53
54
|
from ._image import Image
|
|
54
55
|
from ._initialize import init, init_from_config
|
|
55
56
|
from ._map import map
|
|
57
|
+
from ._pod import PodTemplate
|
|
56
58
|
from ._resources import GPU, TPU, Device, Resources
|
|
57
59
|
from ._retry import RetryStrategy
|
|
58
60
|
from ._reusable_environment import ReusePolicy
|
flyte/_bin/runtime.py
CHANGED
|
@@ -76,13 +76,17 @@ def main(
|
|
|
76
76
|
):
|
|
77
77
|
sys.path.insert(0, ".")
|
|
78
78
|
|
|
79
|
+
import flyte
|
|
79
80
|
import flyte._utils as utils
|
|
80
81
|
from flyte._initialize import initialize_in_cluster
|
|
81
82
|
from flyte._internal.controllers import create_controller
|
|
82
83
|
from flyte._internal.imagebuild.image_builder import ImageCache
|
|
83
84
|
from flyte._internal.runtime.entrypoints import load_and_run_task
|
|
85
|
+
from flyte._logging import logger
|
|
84
86
|
from flyte.models import ActionID, Checkpoints, CodeBundle, RawDataPath
|
|
85
87
|
|
|
88
|
+
logger.info(f"Initializing flyte runtime - version {flyte.__version__}")
|
|
89
|
+
|
|
86
90
|
assert org, "Org is required for now"
|
|
87
91
|
assert project, "Project is required"
|
|
88
92
|
assert domain, "Domain is required"
|
|
@@ -98,15 +102,14 @@ def main(
|
|
|
98
102
|
# This detection of api key is a hack for now.
|
|
99
103
|
controller_kwargs: dict[str, Any] = {"insecure": False}
|
|
100
104
|
if api_key := os.getenv(_UNION_EAGER_API_KEY_ENV_VAR):
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
logger.warning(f"Using api key {api_key}")
|
|
105
|
+
logger.info("Using api key from environment")
|
|
104
106
|
controller_kwargs["api_key"] = api_key
|
|
105
107
|
else:
|
|
106
108
|
ep = os.environ.get(ENDPOINT_OVERRIDE, "host.docker.internal:8090")
|
|
107
109
|
controller_kwargs["endpoint"] = ep
|
|
108
110
|
if "localhost" in ep or "docker" in ep:
|
|
109
111
|
controller_kwargs["insecure"] = True
|
|
112
|
+
logger.debug(f"Using controller endpoint: {ep} with kwargs: {controller_kwargs}")
|
|
110
113
|
|
|
111
114
|
bundle = CodeBundle(tgz=tgz, pkl=pkl, destination=dest, computed_version=version)
|
|
112
115
|
initialize_in_cluster()
|
flyte/_initialize.py
CHANGED
|
@@ -168,6 +168,8 @@ async def init(
|
|
|
168
168
|
"""
|
|
169
169
|
from flyte._utils import get_cwd_editable_install
|
|
170
170
|
|
|
171
|
+
from ._utils.org_discovery import org_from_endpoint
|
|
172
|
+
|
|
171
173
|
interactive_mode = ipython_check()
|
|
172
174
|
|
|
173
175
|
initialize_logger(enable_rich=interactive_mode)
|
|
@@ -206,12 +208,14 @@ async def init(
|
|
|
206
208
|
domain=domain,
|
|
207
209
|
client=client,
|
|
208
210
|
storage=storage,
|
|
209
|
-
org=org,
|
|
211
|
+
org=org or org_from_endpoint(endpoint),
|
|
210
212
|
)
|
|
211
213
|
|
|
212
214
|
|
|
213
215
|
@syncify
|
|
214
|
-
async def init_from_config(
|
|
216
|
+
async def init_from_config(
|
|
217
|
+
path_or_config: str | Config | None = None, root_dir: Path | None = None, log_level: int | None = None
|
|
218
|
+
) -> None:
|
|
215
219
|
"""
|
|
216
220
|
Initialize the Flyte system using a configuration file or Config object. This method should be called before any
|
|
217
221
|
other Flyte remote API methods are called. Thread-safe implementation.
|
|
@@ -221,6 +225,8 @@ async def init_from_config(path_or_config: str | Config | None = None, root_dir:
|
|
|
221
225
|
files like config etc. For example if one uses the copy-style=="all", it is essential to determine the
|
|
222
226
|
root directory for the current project. If not provided, it defaults to the editable install directory or
|
|
223
227
|
if not available, the current working directory.
|
|
228
|
+
:param log_level: Optional logging level for the framework logger,
|
|
229
|
+
default is set using the default initialization policies
|
|
224
230
|
:return: None
|
|
225
231
|
"""
|
|
226
232
|
import flyte.config as config
|
|
@@ -228,6 +234,13 @@ async def init_from_config(path_or_config: str | Config | None = None, root_dir:
|
|
|
228
234
|
cfg: config.Config
|
|
229
235
|
if path_or_config is None or isinstance(path_or_config, str):
|
|
230
236
|
# If a string is passed, treat it as a path to the config file
|
|
237
|
+
if path_or_config:
|
|
238
|
+
if not Path(path_or_config).exists():
|
|
239
|
+
raise InitializationError(
|
|
240
|
+
"ConfigFileNotFoundError",
|
|
241
|
+
"user",
|
|
242
|
+
f"Configuration file '{path_or_config}' does not exist., current working directory is {Path.cwd()}",
|
|
243
|
+
)
|
|
231
244
|
if root_dir and path_or_config:
|
|
232
245
|
cfg = config.auto(str(root_dir / path_or_config))
|
|
233
246
|
else:
|
|
@@ -251,6 +264,7 @@ async def init_from_config(path_or_config: str | Config | None = None, root_dir:
|
|
|
251
264
|
client_id=cfg.platform.client_id,
|
|
252
265
|
client_credentials_secret=cfg.platform.client_credentials_secret,
|
|
253
266
|
root_dir=root_dir,
|
|
267
|
+
log_level=log_level,
|
|
254
268
|
)
|
|
255
269
|
|
|
256
270
|
|
|
@@ -162,6 +162,7 @@ class LocalController:
|
|
|
162
162
|
action=action_id,
|
|
163
163
|
interface=_interface,
|
|
164
164
|
inputs_path=action_output_path,
|
|
165
|
+
name=_func.__name__,
|
|
165
166
|
),
|
|
166
167
|
True,
|
|
167
168
|
)
|
|
@@ -179,7 +180,7 @@ class LocalController:
|
|
|
179
180
|
|
|
180
181
|
if info.interface.outputs and info.output:
|
|
181
182
|
# If the result is not an AsyncGenerator, convert it directly
|
|
182
|
-
converted_outputs = await convert.convert_from_native_to_outputs(info.output, info.interface)
|
|
183
|
+
converted_outputs = await convert.convert_from_native_to_outputs(info.output, info.interface, info.name)
|
|
183
184
|
assert converted_outputs
|
|
184
185
|
elif info.error:
|
|
185
186
|
# If there is an error, convert it to a native error
|
|
@@ -130,7 +130,7 @@ class Action:
|
|
|
130
130
|
"""
|
|
131
131
|
from flyte._logging import logger
|
|
132
132
|
|
|
133
|
-
logger.
|
|
133
|
+
logger.debug(f"In Action from_state {obj.action_id} {obj.phase} {obj.output_uri}")
|
|
134
134
|
return cls(
|
|
135
135
|
action_id=obj.action_id,
|
|
136
136
|
parent_action_name=parent_action_name,
|
|
@@ -235,7 +235,7 @@ class Informer:
|
|
|
235
235
|
await self._shared_queue.put(node)
|
|
236
236
|
# hack to work in the absence of sentinel
|
|
237
237
|
except asyncio.CancelledError:
|
|
238
|
-
logger.
|
|
238
|
+
logger.info(f"Watch cancelled: {self.name}")
|
|
239
239
|
return
|
|
240
240
|
except asyncio.TimeoutError as e:
|
|
241
241
|
logger.error(f"Watch timeout: {self.name}", exc_info=e)
|
|
@@ -11,7 +11,7 @@ import flyte.errors
|
|
|
11
11
|
import flyte.storage as storage
|
|
12
12
|
from flyte._protos.workflow import run_definition_pb2, task_definition_pb2
|
|
13
13
|
from flyte.models import ActionID, NativeInterface, TaskContext
|
|
14
|
-
from flyte.types import TypeEngine
|
|
14
|
+
from flyte.types import TypeEngine, TypeTransformerFailedError
|
|
15
15
|
|
|
16
16
|
|
|
17
17
|
@dataclass(frozen=True)
|
|
@@ -80,7 +80,7 @@ async def convert_from_native_to_inputs(interface: NativeInterface, *args, **kwa
|
|
|
80
80
|
)
|
|
81
81
|
|
|
82
82
|
|
|
83
|
-
async def convert_from_native_to_outputs(o: Any, interface: NativeInterface) -> Outputs:
|
|
83
|
+
async def convert_from_native_to_outputs(o: Any, interface: NativeInterface, task_name: str = "") -> Outputs:
|
|
84
84
|
# Always make it a tuple even if it's just one item to simplify logic below
|
|
85
85
|
if not isinstance(o, tuple):
|
|
86
86
|
o = (o,)
|
|
@@ -90,8 +90,11 @@ async def convert_from_native_to_outputs(o: Any, interface: NativeInterface) ->
|
|
|
90
90
|
)
|
|
91
91
|
named = []
|
|
92
92
|
for (output_name, python_type), v in zip(interface.outputs.items(), o):
|
|
93
|
-
|
|
94
|
-
|
|
93
|
+
try:
|
|
94
|
+
lit = await TypeEngine.to_literal(v, python_type, TypeEngine.to_literal_type(python_type))
|
|
95
|
+
named.append(run_definition_pb2.NamedLiteral(name=output_name, value=lit))
|
|
96
|
+
except TypeTransformerFailedError as e:
|
|
97
|
+
raise flyte.errors.RuntimeDataValidationError(output_name, e, task_name)
|
|
95
98
|
|
|
96
99
|
return Outputs(proto_outputs=run_definition_pb2.Outputs(literals=named))
|
|
97
100
|
|
|
@@ -3,9 +3,11 @@ This module provides functionality to serialize and deserialize tasks to and fro
|
|
|
3
3
|
It includes a Resolver interface for loading tasks, and functions to load classes and tasks.
|
|
4
4
|
"""
|
|
5
5
|
|
|
6
|
+
import copy
|
|
6
7
|
import importlib
|
|
8
|
+
import typing
|
|
7
9
|
from datetime import timedelta
|
|
8
|
-
from typing import Optional, Type
|
|
10
|
+
from typing import Optional, Type, cast
|
|
9
11
|
|
|
10
12
|
from flyteidl.core import identifier_pb2, literals_pb2, security_pb2, tasks_pb2
|
|
11
13
|
from google.protobuf import duration_pb2, wrappers_pb2
|
|
@@ -13,6 +15,7 @@ from google.protobuf import duration_pb2, wrappers_pb2
|
|
|
13
15
|
import flyte.errors
|
|
14
16
|
from flyte._cache.cache import VersionParameters, cache_from_request
|
|
15
17
|
from flyte._logging import logger
|
|
18
|
+
from flyte._pod import _PRIMARY_CONTAINER_NAME_FIELD, PodTemplate
|
|
16
19
|
from flyte._protos.workflow import task_definition_pb2
|
|
17
20
|
from flyte._secret import SecretRequest, secrets_from_request
|
|
18
21
|
from flyte._task import AsyncFunctionTaskTemplate, TaskTemplate
|
|
@@ -121,17 +124,18 @@ def get_proto_task(task: TaskTemplate, serialize_context: SerializationContext)
|
|
|
121
124
|
# if task.parent_env is None:
|
|
122
125
|
# raise ValueError(f"Task {task.name} must have a parent environment")
|
|
123
126
|
|
|
124
|
-
#
|
|
125
|
-
|
|
126
|
-
#
|
|
127
|
-
container = _get_urun_container(serialize_context, task)
|
|
127
|
+
# TODO Add support for SQL, extra_config, custom
|
|
128
|
+
extra_config: typing.Dict[str, str] = {}
|
|
129
|
+
custom = {} # type: ignore
|
|
128
130
|
|
|
129
|
-
# TODO Add support for SQL, Pod, extra_config, custom
|
|
130
|
-
pod = None
|
|
131
131
|
sql = None
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
132
|
+
if task.pod_template and not isinstance(task.pod_template, str):
|
|
133
|
+
container = None
|
|
134
|
+
pod = _get_k8s_pod(_get_urun_container(serialize_context, task), task.pod_template)
|
|
135
|
+
extra_config[_PRIMARY_CONTAINER_NAME_FIELD] = task.pod_template.primary_container_name
|
|
136
|
+
else:
|
|
137
|
+
container = _get_urun_container(serialize_context, task)
|
|
138
|
+
pod = None
|
|
135
139
|
|
|
136
140
|
# -------------- CACHE HANDLING ----------------------
|
|
137
141
|
task_cache = cache_from_request(task.cache)
|
|
@@ -210,6 +214,72 @@ def _get_urun_container(
|
|
|
210
214
|
)
|
|
211
215
|
|
|
212
216
|
|
|
217
|
+
def _sanitize_resource_name(resource: tasks_pb2.Resources.ResourceEntry) -> str:
|
|
218
|
+
return tasks_pb2.Resources.ResourceName.Name(resource.name).lower().replace("_", "-")
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+
def _get_k8s_pod(primary_container: tasks_pb2.Container, pod_template: PodTemplate) -> Optional[tasks_pb2.K8sPod]:
|
|
222
|
+
"""
|
|
223
|
+
Get the K8sPod representation of the task template.
|
|
224
|
+
:param task: The task to convert.
|
|
225
|
+
:return: The K8sPod representation of the task template.
|
|
226
|
+
"""
|
|
227
|
+
from kubernetes.client import ApiClient, V1PodSpec
|
|
228
|
+
from kubernetes.client.models import V1EnvVar, V1ResourceRequirements
|
|
229
|
+
|
|
230
|
+
pod_template = copy.deepcopy(pod_template)
|
|
231
|
+
containers = cast(V1PodSpec, pod_template.pod_spec).containers
|
|
232
|
+
primary_exists = False
|
|
233
|
+
|
|
234
|
+
for container in containers:
|
|
235
|
+
if container.name == pod_template.primary_container_name:
|
|
236
|
+
primary_exists = True
|
|
237
|
+
break
|
|
238
|
+
|
|
239
|
+
if not primary_exists:
|
|
240
|
+
raise ValueError(
|
|
241
|
+
"No primary container defined in the pod spec."
|
|
242
|
+
f" You must define a primary container with the name '{pod_template.primary_container_name}'."
|
|
243
|
+
)
|
|
244
|
+
final_containers = []
|
|
245
|
+
|
|
246
|
+
for container in containers:
|
|
247
|
+
# We overwrite the primary container attributes with the values given to ContainerTask.
|
|
248
|
+
# The attributes include: image, command, args, resource, and env (env is unioned)
|
|
249
|
+
|
|
250
|
+
if container.name == pod_template.primary_container_name:
|
|
251
|
+
if container.image is None:
|
|
252
|
+
# Copy the image from primary_container only if the image is not specified in the pod spec.
|
|
253
|
+
container.image = primary_container.image
|
|
254
|
+
|
|
255
|
+
container.command = list(primary_container.command)
|
|
256
|
+
container.args = list(primary_container.args)
|
|
257
|
+
|
|
258
|
+
limits, requests = {}, {}
|
|
259
|
+
for resource in primary_container.resources.limits:
|
|
260
|
+
limits[_sanitize_resource_name(resource)] = resource.value
|
|
261
|
+
for resource in primary_container.resources.requests:
|
|
262
|
+
requests[_sanitize_resource_name(resource)] = resource.value
|
|
263
|
+
|
|
264
|
+
resource_requirements = V1ResourceRequirements(limits=limits, requests=requests)
|
|
265
|
+
if len(limits) > 0 or len(requests) > 0:
|
|
266
|
+
# Important! Only copy over resource requirements if they are non-empty.
|
|
267
|
+
container.resources = resource_requirements
|
|
268
|
+
|
|
269
|
+
if primary_container.env is not None:
|
|
270
|
+
container.env = [V1EnvVar(name=e.key, value=e.value) for e in primary_container.env] + (
|
|
271
|
+
container.env or []
|
|
272
|
+
)
|
|
273
|
+
|
|
274
|
+
final_containers.append(container)
|
|
275
|
+
|
|
276
|
+
cast(V1PodSpec, pod_template.pod_spec).containers = final_containers
|
|
277
|
+
pod_spec = ApiClient().sanitize_for_serialization(pod_template.pod_spec)
|
|
278
|
+
|
|
279
|
+
metadata = tasks_pb2.K8sObjectMetadata(labels=pod_template.labels, annotations=pod_template.annotations)
|
|
280
|
+
return tasks_pb2.K8sPod(pod_spec=pod_spec, metadata=metadata)
|
|
281
|
+
|
|
282
|
+
|
|
213
283
|
def extract_code_bundle(task_spec: task_definition_pb2.TaskSpec) -> Optional[CodeBundle]:
|
|
214
284
|
"""
|
|
215
285
|
Extract the code bundle from the task spec.
|
|
@@ -145,7 +145,7 @@ async def convert_and_run(
|
|
|
145
145
|
return None, convert_from_native_to_error(err)
|
|
146
146
|
if task.report:
|
|
147
147
|
await flyte.report.flush.aio()
|
|
148
|
-
return await convert_from_native_to_outputs(out, task.native_interface), None
|
|
148
|
+
return await convert_from_native_to_outputs(out, task.native_interface, task.name), None
|
|
149
149
|
|
|
150
150
|
|
|
151
151
|
async def extract_download_run_upload(
|
flyte/_logging.py
CHANGED
flyte/_pod.py
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
from dataclasses import dataclass, field
|
|
2
|
+
from typing import TYPE_CHECKING, Dict, Optional
|
|
3
|
+
|
|
4
|
+
if TYPE_CHECKING:
|
|
5
|
+
from kubernetes.client import V1PodSpec
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
_PRIMARY_CONTAINER_NAME_FIELD = "primary_container_name"
|
|
9
|
+
_PRIMARY_CONTAINER_DEFAULT_NAME = "primary"
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
@dataclass(init=True, repr=True, eq=True, frozen=False)
|
|
13
|
+
class PodTemplate(object):
|
|
14
|
+
"""Custom PodTemplate specification for a Task."""
|
|
15
|
+
|
|
16
|
+
pod_spec: Optional["V1PodSpec"] = field(default_factory=lambda: V1PodSpec())
|
|
17
|
+
primary_container_name: str = _PRIMARY_CONTAINER_DEFAULT_NAME
|
|
18
|
+
labels: Optional[Dict[str, str]] = None
|
|
19
|
+
annotations: Optional[Dict[str, str]] = None
|
flyte/_task.py
CHANGED
|
@@ -23,6 +23,7 @@ from typing import (
|
|
|
23
23
|
|
|
24
24
|
from flyteidl.core.tasks_pb2 import DataLoadingConfig
|
|
25
25
|
|
|
26
|
+
from flyte._pod import PodTemplate
|
|
26
27
|
from flyte.errors import RuntimeSystemError, RuntimeUserError
|
|
27
28
|
|
|
28
29
|
from ._cache import Cache, CacheRequest
|
|
@@ -37,8 +38,6 @@ from ._timeout import TimeoutType
|
|
|
37
38
|
from .models import NativeInterface, SerializationContext
|
|
38
39
|
|
|
39
40
|
if TYPE_CHECKING:
|
|
40
|
-
from kubernetes.client import V1PodTemplate
|
|
41
|
-
|
|
42
41
|
from ._task_environment import TaskEnvironment
|
|
43
42
|
|
|
44
43
|
P = ParamSpec("P") # capture the function's parameters
|
|
@@ -96,8 +95,7 @@ class TaskTemplate(Generic[P, R]):
|
|
|
96
95
|
env: Optional[Dict[str, str]] = None
|
|
97
96
|
secrets: Optional[SecretRequest] = None
|
|
98
97
|
timeout: Optional[TimeoutType] = None
|
|
99
|
-
|
|
100
|
-
pod_template: Optional[Union[str, V1PodTemplate]] = None
|
|
98
|
+
pod_template: Optional[Union[str, PodTemplate]] = None
|
|
101
99
|
report: bool = False
|
|
102
100
|
|
|
103
101
|
parent_env: Optional[weakref.ReferenceType[TaskEnvironment]] = None
|
|
@@ -108,15 +106,6 @@ class TaskTemplate(Generic[P, R]):
|
|
|
108
106
|
_call_as_synchronous: bool = False
|
|
109
107
|
|
|
110
108
|
def __post_init__(self):
|
|
111
|
-
# If pod_template is set to a pod, verify
|
|
112
|
-
if self.pod_template is not None and not isinstance(self.pod_template, str):
|
|
113
|
-
try:
|
|
114
|
-
from kubernetes.client import V1PodTemplate # noqa: F401
|
|
115
|
-
except ImportError as e:
|
|
116
|
-
raise ImportError(
|
|
117
|
-
"kubernetes is not installed, please install kubernetes package to use pod_template"
|
|
118
|
-
) from e
|
|
119
|
-
|
|
120
109
|
# Auto set the image based on the image request
|
|
121
110
|
if self.image == "auto":
|
|
122
111
|
self.image = Image.auto()
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
def hostname_from_url(url: str) -> str:
|
|
2
|
+
"""Parse a URL and return the hostname part."""
|
|
3
|
+
|
|
4
|
+
# Handle dns:/// format specifically (gRPC convention)
|
|
5
|
+
if url.startswith("dns:///"):
|
|
6
|
+
return url[7:] # Skip the "dns:///" prefix
|
|
7
|
+
|
|
8
|
+
# Handle standard URL formats
|
|
9
|
+
import urllib.parse
|
|
10
|
+
|
|
11
|
+
parsed = urllib.parse.urlparse(url)
|
|
12
|
+
return parsed.netloc or parsed.path.lstrip("/").rsplit("/")[0]
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def org_from_endpoint(endpoint: str | None) -> str | None:
|
|
16
|
+
"""
|
|
17
|
+
Extracts the organization from the endpoint URL. The organization is assumed to be the first part of the domain.
|
|
18
|
+
This is temporary until we have a proper organization discovery mechanism through APIs.
|
|
19
|
+
|
|
20
|
+
:param endpoint: The endpoint URL
|
|
21
|
+
:return: The organization name or None if not found
|
|
22
|
+
"""
|
|
23
|
+
if not endpoint:
|
|
24
|
+
return None
|
|
25
|
+
|
|
26
|
+
hostname = hostname_from_url(endpoint)
|
|
27
|
+
domain_parts = hostname.split(".")
|
|
28
|
+
if len(domain_parts) > 2:
|
|
29
|
+
# Assuming the organization is the first part of the domain
|
|
30
|
+
return domain_parts[0]
|
|
31
|
+
return None
|
flyte/_version.py
CHANGED
|
@@ -17,5 +17,5 @@ __version__: str
|
|
|
17
17
|
__version_tuple__: VERSION_TUPLE
|
|
18
18
|
version_tuple: VERSION_TUPLE
|
|
19
19
|
|
|
20
|
-
__version__ = version = '0.2.
|
|
21
|
-
__version_tuple__ = version_tuple = (0, 2, 0, '
|
|
20
|
+
__version__ = version = '0.2.0b11'
|
|
21
|
+
__version_tuple__ = version_tuple = (0, 2, 0, 'b11')
|
flyte/cli/_common.py
CHANGED
|
@@ -78,7 +78,7 @@ class CLIConfig:
|
|
|
78
78
|
log_level: int | None = logging.ERROR
|
|
79
79
|
endpoint: str | None = None
|
|
80
80
|
insecure: bool = False
|
|
81
|
-
|
|
81
|
+
org: str | None = None
|
|
82
82
|
|
|
83
83
|
def replace(self, **kwargs) -> CLIConfig:
|
|
84
84
|
"""
|
|
@@ -90,7 +90,7 @@ class CLIConfig:
|
|
|
90
90
|
from flyte.config._config import TaskConfig
|
|
91
91
|
|
|
92
92
|
task_cfg = TaskConfig(
|
|
93
|
-
org=self.
|
|
93
|
+
org=self.org or self.config.task.org,
|
|
94
94
|
project=project or self.config.task.project,
|
|
95
95
|
domain=domain or self.config.task.domain,
|
|
96
96
|
)
|
flyte/cli/_create.py
CHANGED
|
@@ -86,11 +86,9 @@ def secret(
|
|
|
86
86
|
default=False,
|
|
87
87
|
help="Force overwrite of the configuration file if it already exists.",
|
|
88
88
|
show_default=True,
|
|
89
|
-
prompt="Are you sure you want to overwrite the configuration file?",
|
|
90
|
-
confirmation_prompt=True,
|
|
91
89
|
)
|
|
92
90
|
def config(
|
|
93
|
-
output:
|
|
91
|
+
output: str,
|
|
94
92
|
endpoint: str | None = None,
|
|
95
93
|
insecure: bool = False,
|
|
96
94
|
org: str | None = None,
|
|
@@ -105,8 +103,13 @@ def config(
|
|
|
105
103
|
"""
|
|
106
104
|
import yaml
|
|
107
105
|
|
|
108
|
-
|
|
109
|
-
|
|
106
|
+
output_path = Path(output)
|
|
107
|
+
|
|
108
|
+
if output_path.exists() and not force:
|
|
109
|
+
force = click.confirm(f"Overwrite [{output_path}]?", default=False)
|
|
110
|
+
if not force:
|
|
111
|
+
click.echo(f"Will not overwrite the existing config file at {output_path}")
|
|
112
|
+
return
|
|
110
113
|
|
|
111
114
|
admin: Dict[str, Any] = {}
|
|
112
115
|
if endpoint:
|
|
@@ -114,6 +117,11 @@ def config(
|
|
|
114
117
|
if insecure:
|
|
115
118
|
admin["insecure"] = insecure
|
|
116
119
|
|
|
120
|
+
if not org and endpoint:
|
|
121
|
+
from flyte._utils.org_discovery import org_from_endpoint
|
|
122
|
+
|
|
123
|
+
org = org_from_endpoint(endpoint)
|
|
124
|
+
|
|
117
125
|
task: Dict[str, str] = {}
|
|
118
126
|
if org:
|
|
119
127
|
task["org"] = org
|
|
@@ -125,7 +133,7 @@ def config(
|
|
|
125
133
|
if not admin and not task:
|
|
126
134
|
raise click.BadParameter("At least one of --endpoint or --org must be provided.")
|
|
127
135
|
|
|
128
|
-
with open(
|
|
136
|
+
with open(output_path, "w") as f:
|
|
129
137
|
d: Dict[str, Any] = {}
|
|
130
138
|
if admin:
|
|
131
139
|
d["admin"] = admin
|
|
@@ -133,4 +141,4 @@ def config(
|
|
|
133
141
|
d["task"] = task
|
|
134
142
|
yaml.dump(d, f)
|
|
135
143
|
|
|
136
|
-
click.echo(f"Config file
|
|
144
|
+
click.echo(f"Config file written to {output_path}")
|
flyte/cli/_params.py
CHANGED
|
@@ -110,7 +110,7 @@ class FileParamType(click.ParamType):
|
|
|
110
110
|
p = pathlib.Path(value)
|
|
111
111
|
if not p.exists() or not p.is_file():
|
|
112
112
|
raise click.BadParameter(f"parameter should be a valid file path, {value}")
|
|
113
|
-
return File(
|
|
113
|
+
return File.from_existing_remote(value)
|
|
114
114
|
|
|
115
115
|
|
|
116
116
|
class PickleParamType(click.ParamType):
|
flyte/cli/_run.py
CHANGED
|
@@ -97,7 +97,7 @@ class RunTaskCommand(click.Command):
|
|
|
97
97
|
if obj is None:
|
|
98
98
|
import flyte.config
|
|
99
99
|
|
|
100
|
-
obj = CLIConfig(flyte.config.auto())
|
|
100
|
+
obj = CLIConfig(flyte.config.auto(), ctx)
|
|
101
101
|
|
|
102
102
|
if not self.run_args.local:
|
|
103
103
|
assert obj.endpoint, "CLI Config should have an endpoint"
|
flyte/cli/main.py
CHANGED
|
@@ -146,15 +146,11 @@ def main(
|
|
|
146
146
|
cfg = config.auto(config_file=config_file)
|
|
147
147
|
logger.debug(f"Using config file discovered at location {cfg.source}")
|
|
148
148
|
|
|
149
|
-
final_insecure = cfg.platform.insecure
|
|
150
|
-
if insecure is not None:
|
|
151
|
-
final_insecure = insecure
|
|
152
|
-
|
|
153
149
|
ctx.obj = CLIConfig(
|
|
154
150
|
log_level=log_level,
|
|
155
|
-
endpoint=endpoint
|
|
156
|
-
insecure=
|
|
157
|
-
|
|
151
|
+
endpoint=endpoint,
|
|
152
|
+
insecure=insecure,
|
|
153
|
+
org=org,
|
|
158
154
|
config=cfg,
|
|
159
155
|
ctx=ctx,
|
|
160
156
|
)
|
flyte/errors.py
CHANGED
|
@@ -150,3 +150,14 @@ class LogsNotYetAvailableError(BaseRuntimeError):
|
|
|
150
150
|
|
|
151
151
|
def __init__(self, message: str):
|
|
152
152
|
super().__init__("LogsNotYetAvailable", "system", message, None)
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
class RuntimeDataValidationError(RuntimeUserError):
|
|
156
|
+
"""
|
|
157
|
+
This error is raised when the user tries to access a resource that does not exist or is invalid.
|
|
158
|
+
"""
|
|
159
|
+
|
|
160
|
+
def __init__(self, var: str, e: Exception, task_name: str = ""):
|
|
161
|
+
super().__init__(
|
|
162
|
+
"DataValiationError", f"In task {task_name} variable {var}, failed to serialize/deserialize because {e}"
|
|
163
|
+
)
|
flyte/extras/_container.py
CHANGED
|
@@ -9,8 +9,6 @@ from flyte._logging import logger
|
|
|
9
9
|
from flyte._task import TaskTemplate
|
|
10
10
|
from flyte.models import NativeInterface, SerializationContext
|
|
11
11
|
|
|
12
|
-
_PRIMARY_CONTAINER_NAME_FIELD = "primary_container_name"
|
|
13
|
-
|
|
14
12
|
|
|
15
13
|
def _extract_command_key(cmd: str, **kwargs) -> List[Any] | None:
|
|
16
14
|
"""
|
|
@@ -263,8 +261,3 @@ class ContainerTask(TaskTemplate):
|
|
|
263
261
|
|
|
264
262
|
def container_args(self, sctx: SerializationContext) -> List[str]:
|
|
265
263
|
return self._cmd + (self._args if self._args else [])
|
|
266
|
-
|
|
267
|
-
def config(self, sctx: SerializationContext) -> Dict[str, str]:
|
|
268
|
-
if self.pod_template is None:
|
|
269
|
-
return {}
|
|
270
|
-
return {_PRIMARY_CONTAINER_NAME_FIELD: self.primary_container_name}
|
flyte/remote/_data.py
CHANGED
|
@@ -100,7 +100,8 @@ async def _upload_single_file(
|
|
|
100
100
|
if put_resp.status_code != 200:
|
|
101
101
|
raise RuntimeSystemError(
|
|
102
102
|
"UploadFailed",
|
|
103
|
-
f"Failed to upload {fp} to {resp.signed_url}, status code: {put_resp.status_code}"
|
|
103
|
+
f"Failed to upload {fp} to {resp.signed_url}, status code: {put_resp.status_code}, "
|
|
104
|
+
f"response: {put_resp.text}",
|
|
104
105
|
)
|
|
105
106
|
# TODO in old code we did this
|
|
106
107
|
# if self._config.platform.insecure_skip_verify is True
|
flyte/types/_type_engine.py
CHANGED
|
@@ -1207,7 +1207,9 @@ class TypeEngine(typing.Generic[T]):
|
|
|
1207
1207
|
python_type = type_hints.get(k, type(d[k]))
|
|
1208
1208
|
e: BaseException = literal_map[k].exception() # type: ignore
|
|
1209
1209
|
if isinstance(e, TypeError):
|
|
1210
|
-
raise TypeError(
|
|
1210
|
+
raise TypeError(
|
|
1211
|
+
f"Error converting: Var:{k}, type:{type(v)}, into:{python_type}, received_value {v}"
|
|
1212
|
+
)
|
|
1211
1213
|
else:
|
|
1212
1214
|
raise e
|
|
1213
1215
|
literal_map[k] = v.result()
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
flyte/__init__.py,sha256=
|
|
1
|
+
flyte/__init__.py,sha256=e8-Obt_5OZDdC5Riznft0Y4ctQMYkYYO1UU7Z6EirLA,1464
|
|
2
2
|
flyte/_build.py,sha256=MkgfLAPeL56YeVrGRNZUCZgbwzlEzVP3wLbl5Qru4yk,578
|
|
3
3
|
flyte/_context.py,sha256=K0-TCt-_pHOoE5Xni87_8uIe2vCBOhfNQEtjGT4Hu4k,5239
|
|
4
4
|
flyte/_deploy.py,sha256=NApDDNQRGauhZP_eBYUnVSQilooSLpmmHQNhqNa5jmk,8034
|
|
@@ -8,26 +8,27 @@ flyte/_environment.py,sha256=BkChtdVhWB3SwMSvetDZ-KiNBgRFlAXgq69PHT4zyG0,2942
|
|
|
8
8
|
flyte/_group.py,sha256=7o1j16sZyUmYB50mOiq1ui4TBAKhRpDqLakV8Ya1kw4,803
|
|
9
9
|
flyte/_hash.py,sha256=Of_Zl_DzzzF2jp4ZsLm-3o-xJFCCJ8_GubmLI1htx78,504
|
|
10
10
|
flyte/_image.py,sha256=NeBvjCdwFAVGd666ufi1q-YOvhwdTEzAeJl5YBfl0bI,29043
|
|
11
|
-
flyte/_initialize.py,sha256=
|
|
11
|
+
flyte/_initialize.py,sha256=oVLiidNRATEdDouzppaG2W_NYRok-YuNBjA7xlGpRAY,17696
|
|
12
12
|
flyte/_interface.py,sha256=MP5o_qpIwfBNtAc7zo_cLSjMugsPyanuO6EgUSk4fBE,3644
|
|
13
|
-
flyte/_logging.py,sha256=
|
|
13
|
+
flyte/_logging.py,sha256=n3pi1cE_oqA03vQHlqSxexXcjRhCsZg1ODvUSoWlwk4,3382
|
|
14
14
|
flyte/_map.py,sha256=efPd8O-JKUg1OY3_MzU3KGbhsGYDVRNBwWr0ceNIXhQ,7444
|
|
15
|
+
flyte/_pod.py,sha256=lNaQuWX22QG6Xji7-8GpuKUkqCmVFaRxOVU-eUEa-Vk,637
|
|
15
16
|
flyte/_resources.py,sha256=UOLyEVhdxolvrHhddiBbYdJuE1RkM_l7xeS9G1abe6M,7583
|
|
16
17
|
flyte/_retry.py,sha256=rfLv0MvWxzPByKESTglEmjPsytEAKiIvvmzlJxXwsfE,941
|
|
17
18
|
flyte/_reusable_environment.py,sha256=P4FBATVKAYcIKpdFN98sI8acPyKy8eIGx6V0kUb9YdM,1289
|
|
18
19
|
flyte/_run.py,sha256=ePlFrABDR0ud_qxY55Nk4eATDialHGHsxNdTiVWYQkw,19919
|
|
19
20
|
flyte/_secret.py,sha256=SqIHs6mi8hEkIIBZe3bI9jJsPt65Mt6dV5uh9_op1ME,2392
|
|
20
|
-
flyte/_task.py,sha256=
|
|
21
|
+
flyte/_task.py,sha256=AHxg4lqHfExdSU6adwPiFzAT2EtrLI8mBdRxTUL1RgA,17902
|
|
21
22
|
flyte/_task_environment.py,sha256=J1LFH9Zz1nPhlsrc_rYny1SS3QC1b55X7tRYoTG7Vk4,6815
|
|
22
23
|
flyte/_timeout.py,sha256=zx5sFcbYmjJAJbZWSGzzX-BpC9HC7Jfs35T7vVhKwkk,1571
|
|
23
24
|
flyte/_tools.py,sha256=JewkQZBR_M85tS6QY8e4xXue75jbOE48nID4ZHnc9jY,632
|
|
24
25
|
flyte/_trace.py,sha256=7OQtQNosIlycTwaMjdc3GW4h3T3N0bYTsY6og4clPl8,5234
|
|
25
|
-
flyte/_version.py,sha256=
|
|
26
|
-
flyte/errors.py,sha256=
|
|
26
|
+
flyte/_version.py,sha256=D4lhYrgx59XZRRry4jkbv6B5ZVzqyxGy7BrlDWwfBR0,521
|
|
27
|
+
flyte/errors.py,sha256=lJgSiZb2nZnuTZqBEB9rg-bV_GXVAYNjQFRuKWQskyY,4683
|
|
27
28
|
flyte/models.py,sha256=A85HnTLqInJiMmQKhpl2IXb2Uh6_46tdRrwW2TTzD9o,12908
|
|
28
29
|
flyte/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
29
30
|
flyte/_bin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
30
|
-
flyte/_bin/runtime.py,sha256=
|
|
31
|
+
flyte/_bin/runtime.py,sha256=D6iFiVkOh3toKpBoJ_X9S1SeBDrEVGumSiqOrMhZG70,5032
|
|
31
32
|
flyte/_cache/__init__.py,sha256=zhdO5UuHQRdzn8GHmSN40nrxfAmI4ihDRuHZM11U84Y,305
|
|
32
33
|
flyte/_cache/cache.py,sha256=ErhWzzJdEjTIuEF4f-r6IBgko-3Al9iUs1Eq4O42TUE,5021
|
|
33
34
|
flyte/_cache/defaults.py,sha256=gzJZW0QJPUfd2OPnGpv3tzIfwPtgFjAKoie3NP1P97U,217
|
|
@@ -39,14 +40,14 @@ flyte/_code_bundle/_utils.py,sha256=b0s3ZVKSRwaa_2CMTCqt2iRrUvTTW3FmlyqCD9k5BS0,
|
|
|
39
40
|
flyte/_code_bundle/bundle.py,sha256=8T0gcXck6dmg-8L2-0G3B2iNjC-Xwydu806iyKneMMY,8789
|
|
40
41
|
flyte/_internal/__init__.py,sha256=vjXgGzAAjy609YFkAy9_RVPuUlslsHSJBXCLNTVnqOY,136
|
|
41
42
|
flyte/_internal/controllers/__init__.py,sha256=5CBnS9lb1VFMzZuRXUiaPhlN3G9qh7Aq9kTwxW5hsRw,4301
|
|
42
|
-
flyte/_internal/controllers/_local_controller.py,sha256=
|
|
43
|
-
flyte/_internal/controllers/_trace.py,sha256=
|
|
43
|
+
flyte/_internal/controllers/_local_controller.py,sha256=Wpgtd50C_ovIHpQSZC6asQc7iKyKIraEf-MAHCwcNJI,7124
|
|
44
|
+
flyte/_internal/controllers/_trace.py,sha256=biI-lXSIe3gXuWI-KT6T-jTtojQCQ7BLOHTCG3J6MQc,1145
|
|
44
45
|
flyte/_internal/controllers/remote/__init__.py,sha256=9_azH1eHLqY6VULpDugXi7Kf1kK1ODqEnsQ_3wM6IqU,1919
|
|
45
|
-
flyte/_internal/controllers/remote/_action.py,sha256=
|
|
46
|
+
flyte/_internal/controllers/remote/_action.py,sha256=5V26eE1ggtf95M8l_3wBRGrtbQ1DkOD_ePRT2bppMGM,4906
|
|
46
47
|
flyte/_internal/controllers/remote/_client.py,sha256=HPbzbfaWZVv5wpOvKNtFXR6COiZDwd1cUJQqi60A7oU,1421
|
|
47
48
|
flyte/_internal/controllers/remote/_controller.py,sha256=IbCRMTbQrNz96zjSZo2KHDmB0nW3dwT8VlWLu4zElGQ,19462
|
|
48
49
|
flyte/_internal/controllers/remote/_core.py,sha256=2dka1rDnA8Ui_qhfE1ymZuN8E2BYQPn123h_eMixSiM,18091
|
|
49
|
-
flyte/_internal/controllers/remote/_informer.py,sha256=
|
|
50
|
+
flyte/_internal/controllers/remote/_informer.py,sha256=StiPcQLLW0h36uEBhKsupMY79EeFCKA3QQzvv2IyvRo,14188
|
|
50
51
|
flyte/_internal/controllers/remote/_service_protocol.py,sha256=B9qbIg6DiGeac-iSccLmX_AL2xUgX4ezNUOiAbSy4V0,1357
|
|
51
52
|
flyte/_internal/imagebuild/__init__.py,sha256=cLXVxkAyFpbdC1y-k3Rb6FRW9f_xpoRQWVn__G9IqKs,354
|
|
52
53
|
flyte/_internal/imagebuild/docker_builder.py,sha256=bkr2fs9jInTq8jqU8ka7NGvp0RPfYhbTfX1RqtqTvvs,13986
|
|
@@ -57,12 +58,12 @@ flyte/_internal/resolvers/_task_module.py,sha256=jwy1QYygUK7xmpCZLt1SPTfJCkfox3C
|
|
|
57
58
|
flyte/_internal/resolvers/common.py,sha256=ADQLRoyGsJ4vuUkitffMGrMKKjy0vpk6X53g4FuKDLc,993
|
|
58
59
|
flyte/_internal/resolvers/default.py,sha256=nX4DHUYod1nRvEsl_vSgutQVEdExu2xL8pRkyi4VWbY,981
|
|
59
60
|
flyte/_internal/runtime/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
60
|
-
flyte/_internal/runtime/convert.py,sha256=
|
|
61
|
+
flyte/_internal/runtime/convert.py,sha256=0ttgaC8GrRkM2nXuG0K-7Kcg6nFsKWC9BG2LSEzgWzM,9325
|
|
61
62
|
flyte/_internal/runtime/entrypoints.py,sha256=Kyi19i7LYk7YM3ZV_Y4FXGt5Pc1tIftGkIDohopblyY,5127
|
|
62
63
|
flyte/_internal/runtime/io.py,sha256=Lgdy4iPjlKjUO-V_AkoPZff6lywaFjZUG-PErRukmx4,4248
|
|
63
64
|
flyte/_internal/runtime/resources_serde.py,sha256=tvMMv3l6cZEt_cfs7zVE_Kqs5qh-_r7fsEPxb6xMxMk,4812
|
|
64
|
-
flyte/_internal/runtime/task_serde.py,sha256=
|
|
65
|
-
flyte/_internal/runtime/taskrunner.py,sha256=
|
|
65
|
+
flyte/_internal/runtime/task_serde.py,sha256=wN7lsusEUuEQE4-jPh0f_sTFZisH76o1VlMMXHC7etI,13012
|
|
66
|
+
flyte/_internal/runtime/taskrunner.py,sha256=rHWS4t5qgZnzGdGrs0_O0sSs_PVGoE1CNPDb-fTwwmo,7332
|
|
66
67
|
flyte/_internal/runtime/types_serde.py,sha256=EjRh9Yypx9-20XXQprtNgp766LeQVRoYWtY6XPGMZQg,1813
|
|
67
68
|
flyte/_protos/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
68
69
|
flyte/_protos/common/authorization_pb2.py,sha256=6G7CAfq_Vq1qrm8JFkAnMAj0AaEipiX7MkjA7nk91-M,6707
|
|
@@ -134,25 +135,26 @@ flyte/_utils/coro_management.py,sha256=_JTt9x9fOc_1OSe03DSheYoKOvlonBB_4WNCS9XSa
|
|
|
134
135
|
flyte/_utils/file_handling.py,sha256=iU4TxW--fCho_Eg5xTMODn96P03SxzF-V-5f-7bZAZY,2233
|
|
135
136
|
flyte/_utils/helpers.py,sha256=45ZC2OSNKS66DkTvif8W8x7MH4KxluvAyn0a92mKRqM,4366
|
|
136
137
|
flyte/_utils/lazy_module.py,sha256=fvXPjvZLzCfcI8Vzs4pKedUDdY0U_RQ1ZVrp9b8qBQY,1994
|
|
138
|
+
flyte/_utils/org_discovery.py,sha256=80TAUg2VUGvUZtTOPlPpEYnNqJANdv_J-i41NjP9NrY,1055
|
|
137
139
|
flyte/_utils/uv_script_parser.py,sha256=PxqD8lSMi6xv0uDd1s8LKB2IPZr4ttZJCUweqlyMTKk,1483
|
|
138
140
|
flyte/cli/__init__.py,sha256=M02O-UGqQlA8JJ_jyWRiwQhTNc5CJJ7x9J7fNxTxBT0,52
|
|
139
141
|
flyte/cli/_abort.py,sha256=lTftDmVXEIrFz1XAASCqWbXQEQDqRdTCJqY7izk2USI,593
|
|
140
|
-
flyte/cli/_common.py,sha256=
|
|
141
|
-
flyte/cli/_create.py,sha256=
|
|
142
|
+
flyte/cli/_common.py,sha256=CPGQlEvQZ8-MWEw9C610ti-s55HYvLYl313MFvI0eWY,10777
|
|
143
|
+
flyte/cli/_create.py,sha256=GO_7qEOW1udDuHnZWTUMPqDyVLW_K2RKT-d3Qswpf6s,4273
|
|
142
144
|
flyte/cli/_delete.py,sha256=qq5A9d6vXdYvYz-SECXiC6LU5rAzahNTZKiKacOtcZ4,545
|
|
143
145
|
flyte/cli/_deploy.py,sha256=owGe_RVwC73p3dOPWYSo442OVuZyagF8LKTvC57xubQ,4466
|
|
144
146
|
flyte/cli/_gen.py,sha256=vlE5l8UR1zz4RSdaRyUfYFvGR0TLxGcTYcP4dhA3Pvg,5458
|
|
145
147
|
flyte/cli/_get.py,sha256=Pl9nHVHzRQT8IG3k_VAMJ2Xvaq9URsovm96op_153os,9843
|
|
146
|
-
flyte/cli/_params.py,sha256=
|
|
147
|
-
flyte/cli/_run.py,sha256=
|
|
148
|
-
flyte/cli/main.py,sha256=
|
|
148
|
+
flyte/cli/_params.py,sha256=cDeTvjOQP8EydVJUrncLeAxUaHvGorJyDvMSrAxapmM,19466
|
|
149
|
+
flyte/cli/_run.py,sha256=dkuf6PfmizFU1-RWX_9TsTcGuUNDpjY7f6ok90nZ2iM,7889
|
|
150
|
+
flyte/cli/main.py,sha256=P5a0Q4pKVKnc9QMdbdfp9I5ReGVykVCN-cUy0gURpLI,4287
|
|
149
151
|
flyte/config/__init__.py,sha256=MiwEYK5Iv7MRR22z61nzbsbvZ9Q6MdmAU_g9If1Pmb8,144
|
|
150
152
|
flyte/config/_config.py,sha256=QE3T0W8xOULjJaqDMdMF90f9gFVjGR6h8QPOLsyqjYw,9831
|
|
151
153
|
flyte/config/_internal.py,sha256=Bj0uzn3PYgxKbzM-q2GKXxp7Y6cyzhPzUB-Y2i6cQKo,2836
|
|
152
154
|
flyte/config/_reader.py,sha256=c16jm0_IYxwEAjXENtllLeO_sT5Eg2RNLG4UjnAv_x4,7157
|
|
153
155
|
flyte/connectors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
154
156
|
flyte/extras/__init__.py,sha256=FhB0uK7H1Yo5De9vOuF7UGnezTKncj3u2Wo5uQdWN0g,74
|
|
155
|
-
flyte/extras/_container.py,sha256=
|
|
157
|
+
flyte/extras/_container.py,sha256=7fg43UScXevb9QdiyZLyf0xFrL5L3GkPvUWKQLl4R98,10939
|
|
156
158
|
flyte/io/__init__.py,sha256=F7hlpin_1JJjsdFZSn7_jQgltPzsjETX1DCYGz-ELqI,629
|
|
157
159
|
flyte/io/_dir.py,sha256=rih9CY1YjNX05bcAu5LG62Xoyij5GXAlv7jLyVF0je8,15310
|
|
158
160
|
flyte/io/_file.py,sha256=kp5700SKPy5htmMhm4hE2ybb99Ykny1b0Kwm3huCWXs,15572
|
|
@@ -161,7 +163,7 @@ flyte/io/_structured_dataset/basic_dfs.py,sha256=77aYFrFigPC7cjM6UjCbU26REtXmwIB
|
|
|
161
163
|
flyte/io/_structured_dataset/structured_dataset.py,sha256=ddRjz36RhNxIy0gakzdLStBzoo4cAOgXbNqiqt5YhMI,52645
|
|
162
164
|
flyte/remote/__init__.py,sha256=zBWV88VF-L8430xVrOyk07EmLsOKhOUMVBsqFUDtO6Q,565
|
|
163
165
|
flyte/remote/_console.py,sha256=avmELJPx8nQMAVPrHlh6jEIRPjrMwFpdZjJsWOOa9rE,660
|
|
164
|
-
flyte/remote/_data.py,sha256=
|
|
166
|
+
flyte/remote/_data.py,sha256=B5nMF_o_ePRuG-V4IrTXctXXYn7uEJqUNs_5unX-2fo,5846
|
|
165
167
|
flyte/remote/_logs.py,sha256=EOXg4OS8yYclsT6NASgOLMo0TA2sZpKb2MWZXpWBPuI,6404
|
|
166
168
|
flyte/remote/_project.py,sha256=dTBYqORDAbLvh9WnPO1Ytuzw2vxNYZwwNsKE2_b0o14,2807
|
|
167
169
|
flyte/remote/_run.py,sha256=9euHjYRX-xyxXuhn0MunYb9dmgl0FMU3a-FZNjJA4F8,31057
|
|
@@ -203,10 +205,10 @@ flyte/types/_interface.py,sha256=mY7mb8v2hJPGk7AU99gdOWl4_jArA1VFtjYGlE31SK0,953
|
|
|
203
205
|
flyte/types/_pickle.py,sha256=PjdR66OTDMZ3OYq6GvM_Ua0cIo5t2XQaIjmpJ9xo4Ys,4050
|
|
204
206
|
flyte/types/_renderer.py,sha256=ygcCo5l60lHufyQISFddZfWwLlQ8kJAKxUT_XnR_6dY,4818
|
|
205
207
|
flyte/types/_string_literals.py,sha256=NlG1xV8RSA-sZ-n-IFQCAsdB6jXJOAKkHWtnopxVVDk,4231
|
|
206
|
-
flyte/types/_type_engine.py,sha256=
|
|
208
|
+
flyte/types/_type_engine.py,sha256=oX906WSQ-e8E1X1vwdMcqiQi2fUUFY9A4wVZZf2yoaw,93667
|
|
207
209
|
flyte/types/_utils.py,sha256=pbts9E1_2LTdLygAY0UYTLYJ8AsN3BZyviSXvrtcutc,2626
|
|
208
|
-
flyte-0.2.
|
|
209
|
-
flyte-0.2.
|
|
210
|
-
flyte-0.2.
|
|
211
|
-
flyte-0.2.
|
|
212
|
-
flyte-0.2.
|
|
210
|
+
flyte-0.2.0b11.dist-info/METADATA,sha256=a3P-yCWvVVslOcR357eSJVKR4WzzebAZCQKcinxd78A,4811
|
|
211
|
+
flyte-0.2.0b11.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
212
|
+
flyte-0.2.0b11.dist-info/entry_points.txt,sha256=MIq2z5dBurdCJfpXfMKzgBv7sJOakKRYxr8G0cMiTrg,75
|
|
213
|
+
flyte-0.2.0b11.dist-info/top_level.txt,sha256=7dkyFbikvA12LEZEqawx8oDG1CMod6hTliPj7iWzgYo,6
|
|
214
|
+
flyte-0.2.0b11.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|