flyte 0.2.0b27__py3-none-any.whl → 0.2.0b30__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/_image.py CHANGED
@@ -195,6 +195,15 @@ class WorkDir(Layer):
195
195
  hasher.update(self.workdir.encode("utf-8"))
196
196
 
197
197
 
198
+ @rich.repr.auto
199
+ @dataclass(frozen=True, repr=True)
200
+ class DockerIgnore(Layer):
201
+ path: str
202
+
203
+ def update_hash(self, hasher: hashlib._Hash):
204
+ hasher.update(self.path.encode("utf-8"))
205
+
206
+
198
207
  @rich.repr.auto
199
208
  @dataclass(frozen=True, repr=True)
200
209
  class CopyConfig(Layer):
@@ -575,6 +584,13 @@ class Image:
575
584
 
576
585
  :return:
577
586
  """
587
+ if addl_layer and self.dockerfile:
588
+ # We don't know how to inspect dockerfiles to know what kind it is (OS, python version, uv vs poetry, etc)
589
+ # so there's no guarantee any of the layering logic will work.
590
+ raise ValueError(
591
+ "Flyte current cannot add additional layers to a Dockerfile-based Image."
592
+ " Please amend the dockerfile directly."
593
+ )
578
594
  registry = registry if registry else self.registry
579
595
  name = name if name else self.name
580
596
  if addl_layer and (not name):
@@ -595,17 +611,35 @@ class Image:
595
611
  return img
596
612
 
597
613
  @classmethod
598
- def from_dockerfile(cls, file: Path, registry: str, name: str) -> Image:
614
+ def from_dockerfile(
615
+ cls, file: Path, registry: str, name: str, platform: Union[Architecture, Tuple[Architecture, ...], None] = None
616
+ ) -> Image:
599
617
  """
600
- Use this method to create a new image with the specified dockerfile
618
+ Use this method to create a new image with the specified dockerfile. Note you cannot use additional layers
619
+ after this, as the system doesn't attempt to parse/understand the Dockerfile, and what kind of setup it has
620
+ (python version, uv vs poetry, etc), so please put all logic into the dockerfile itself.
621
+
622
+ Also since Python sees paths as from the calling directory, please use Path objects with absolute paths. The
623
+ context for the builder will be the directory where the dockerfile is located.
601
624
 
602
625
  :param file: path to the dockerfile
603
626
  :param name: name of the image
604
627
  :param registry: registry to use for the image
628
+ :param platform: architecture to use for the image, default is linux/amd64, use tuple for multiple values
629
+ Example: ("linux/amd64", "linux/arm64")
605
630
 
606
631
  :return:
607
632
  """
608
- img = cls(dockerfile=file, registry=registry, name=name)
633
+ platform = _ensure_tuple(platform) if platform else None
634
+ file = file.absolute() # for clarity when debugging
635
+ kwargs = {
636
+ "dockerfile": file,
637
+ "registry": registry,
638
+ "name": name,
639
+ }
640
+ if platform:
641
+ kwargs["platform"] = platform
642
+ img = cls._new(**kwargs)
609
643
 
610
644
  return img
611
645
 
@@ -753,6 +787,10 @@ class Image:
753
787
  new_image = self.clone(addl_layer=CopyConfig(path_type=0, src=src, dst=dst, _compute_identifier=lambda x: dst))
754
788
  return new_image
755
789
 
790
+ def with_dockerignore(self, path: Path) -> Image:
791
+ new_image = self.clone(addl_layer=DockerIgnore(path=str(path)))
792
+ return new_image
793
+
756
794
  def with_uv_project(
757
795
  self,
758
796
  pyproject_file: Path,
@@ -15,6 +15,7 @@ from flyte._image import (
15
15
  AptPackages,
16
16
  Commands,
17
17
  CopyConfig,
18
+ DockerIgnore,
18
19
  Env,
19
20
  Image,
20
21
  Layer,
@@ -205,12 +206,18 @@ class UVProjectHandler:
205
206
  return dockerfile
206
207
 
207
208
 
209
+ class DockerIgnoreHandler:
210
+ @staticmethod
211
+ async def handle(layer: DockerIgnore, context_path: Path, _: str):
212
+ shutil.copy(layer.path, context_path)
213
+
214
+
208
215
  class CopyConfigHandler:
209
216
  @staticmethod
210
217
  async def handle(layer: CopyConfig, context_path: Path, dockerfile: str) -> str:
211
218
  # Copy the source config file or directory to the context path
212
219
  if layer.src.is_absolute() or ".." in str(layer.src):
213
- dst_path = context_path / str(layer.src.absolute()).replace("/", "./_flyte_abs_context/")
220
+ dst_path = context_path / str(layer.src.absolute()).replace("/", "./_flyte_abs_context/", 1)
214
221
  else:
215
222
  dst_path = context_path / layer.src
216
223
 
@@ -276,6 +283,10 @@ async def _process_layer(layer: Layer, context_path: Path, dockerfile: str) -> s
276
283
  # Handle commands
277
284
  dockerfile = await CommandsHandler.handle(layer, context_path, dockerfile)
278
285
 
286
+ case DockerIgnore():
287
+ # Handle dockerignore
288
+ await DockerIgnoreHandler.handle(layer, context_path, dockerfile)
289
+
279
290
  case WorkDir():
280
291
  # Handle workdir
281
292
  dockerfile = await WorkDirHandler.handle(layer, context_path, dockerfile)
@@ -305,14 +316,14 @@ class DockerImageBuilder(ImageBuilder):
305
316
  return [LocalDockerCommandImageChecker, LocalPodmanCommandImageChecker, DockerAPIImageChecker]
306
317
 
307
318
  async def build_image(self, image: Image, dry_run: bool = False) -> str:
308
- if len(image._layers) == 0:
309
- logger.warning("No layers to build, returning the image URI as is.")
310
- return image.uri
311
-
312
319
  if image.dockerfile:
313
320
  # If a dockerfile is provided, use it directly
314
321
  return await self._build_from_dockerfile(image, push=True)
315
322
 
323
+ if len(image._layers) == 0:
324
+ logger.warning("No layers to build, returning the image URI as is.")
325
+ return image.uri
326
+
316
327
  return await self._build_image(
317
328
  image,
318
329
  push=True,
@@ -323,18 +334,27 @@ class DockerImageBuilder(ImageBuilder):
323
334
  """
324
335
  Build the image from a provided Dockerfile.
325
336
  """
337
+ assert image.dockerfile # for mypy
338
+
326
339
  command = [
327
340
  "docker",
341
+ "buildx",
328
342
  "build",
343
+ "--builder",
344
+ DockerImageBuilder._builder_name,
345
+ "-f",
346
+ str(image.dockerfile),
329
347
  "--tag",
330
348
  f"{image.uri}",
331
349
  "--platform",
332
350
  ",".join(image.platform),
333
- ".",
351
+ str(image.dockerfile.parent.absolute()), # Use the parent directory of the Dockerfile as the context
334
352
  ]
335
353
 
336
354
  if image.registry and push:
337
355
  command.append("--push")
356
+ else:
357
+ command.append("--load")
338
358
 
339
359
  concat_command = " ".join(command)
340
360
  logger.debug(f"Build command: {concat_command}")
@@ -16,6 +16,7 @@ from flyte._image import (
16
16
  Architecture,
17
17
  Commands,
18
18
  CopyConfig,
19
+ DockerIgnore,
19
20
  Env,
20
21
  PipPackages,
21
22
  PythonWheels,
@@ -225,6 +226,8 @@ def _get_layers_proto(image: Image, context_path: Path) -> "image_definition_pb2
225
226
  commands=image_definition_pb2.Commands(cmd=list(layer.commands))
226
227
  )
227
228
  layers.append(commands_layer)
229
+ elif isinstance(layer, DockerIgnore):
230
+ shutil.copy(layer.path, context_path)
228
231
  elif isinstance(layer, CopyConfig):
229
232
  dst_path = _copy_files_to_context(layer.src, context_path)
230
233
 
flyte/_logging.py CHANGED
@@ -83,7 +83,7 @@ def get_default_handler(log_level: int) -> logging.Handler:
83
83
  return handler
84
84
 
85
85
 
86
- def initialize_logger(log_level: int = DEFAULT_LOG_LEVEL, enable_rich: bool = False):
86
+ def initialize_logger(log_level: int = get_env_log_level(), enable_rich: bool = False):
87
87
  """
88
88
  Initializes the global loggers to the default configuration.
89
89
  """
flyte/_task.py CHANGED
@@ -20,8 +20,6 @@ from typing import (
20
20
  Union,
21
21
  )
22
22
 
23
- from flyteidl.core.tasks_pb2 import DataLoadingConfig
24
-
25
23
  from flyte._pod import PodTemplate
26
24
  from flyte.errors import RuntimeSystemError, RuntimeUserError
27
25
 
@@ -37,6 +35,8 @@ from ._timeout import TimeoutType
37
35
  from .models import NativeInterface, SerializationContext
38
36
 
39
37
  if TYPE_CHECKING:
38
+ from flyteidl.core.tasks_pb2 import DataLoadingConfig
39
+
40
40
  from ._task_environment import TaskEnvironment
41
41
 
42
42
  P = ParamSpec("P") # capture the function's parameters
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.0b27'
21
- __version_tuple__ = version_tuple = (0, 2, 0, 'b27')
20
+ __version__ = version = '0.2.0b30'
21
+ __version_tuple__ = version_tuple = (0, 2, 0, 'b30')
flyte/models.py CHANGED
@@ -3,7 +3,6 @@ from __future__ import annotations
3
3
  import inspect
4
4
  import os
5
5
  import pathlib
6
- import tempfile
7
6
  from dataclasses import dataclass, field, replace
8
7
  from typing import TYPE_CHECKING, Any, Callable, ClassVar, Dict, Literal, Optional, Tuple, Type
9
8
 
@@ -12,7 +11,6 @@ import rich.repr
12
11
  from flyte._docstring import Docstring
13
12
  from flyte._interface import extract_return_annotation
14
13
  from flyte._logging import logger
15
- from flyte._utils.helpers import base36_encode
16
14
 
17
15
  if TYPE_CHECKING:
18
16
  from flyteidl.core import literals_pb2
@@ -65,6 +63,8 @@ class ActionID:
65
63
  """Make a deterministic name"""
66
64
  import hashlib
67
65
 
66
+ from flyte._utils.helpers import base36_encode
67
+
68
68
  components = f"{self.name}-{input_hash}-{task_hash}-{task_call_seq}" + (f"-{group}" if group else "")
69
69
  logger.debug(f"----- Generating sub-action ID from components: {components}")
70
70
  # has the components into something deterministic
@@ -89,6 +89,8 @@ class RawDataPath:
89
89
  Create a new context attribute object, with local path given. Will be created if it doesn't exist.
90
90
  :return: Path to the temporary directory
91
91
  """
92
+ import tempfile
93
+
92
94
  match local_folder:
93
95
  case pathlib.Path():
94
96
  local_folder.mkdir(parents=True, exist_ok=True)
flyte/remote/_data.py CHANGED
@@ -79,16 +79,16 @@ async def _upload_single_file(
79
79
  except grpc.aio.AioRpcError as e:
80
80
  if e.code() == grpc.StatusCode.NOT_FOUND:
81
81
  raise RuntimeSystemError(
82
- "NotFound", f"Failed to get signed url for {fp}, please check your project and domain."
82
+ "NotFound", f"Failed to get signed url for {fp}, please check your project and domain: {e.details()}"
83
83
  )
84
84
  elif e.code() == grpc.StatusCode.PERMISSION_DENIED:
85
85
  raise RuntimeSystemError(
86
- "PermissionDenied", f"Failed to get signed url for {fp}, please check your permissions."
86
+ "PermissionDenied", f"Failed to get signed url for {fp}, please check your permissions: {e.details()}"
87
87
  )
88
88
  elif e.code() == grpc.StatusCode.UNAVAILABLE:
89
89
  raise InitializationError("EndpointUnavailable", "user", "Service is unavailable.")
90
90
  else:
91
- raise RuntimeSystemError(e.code().value, f"Failed to get signed url for {fp}.")
91
+ raise RuntimeSystemError(e.code().value, f"Failed to get signed url for {fp}: {e.details()}")
92
92
  except Exception as e:
93
93
  raise RuntimeSystemError(type(e).__name__, f"Failed to get signed url for {fp}.") from e
94
94
  logger.debug(f"Uploading to {make_hyperlink('signed url', resp.signed_url)} for {fp}")
@@ -1594,6 +1594,18 @@ class UnionTransformer(TypeTransformer[T]):
1594
1594
  self, python_val: T, python_type: Type[T], expected: types_pb2.LiteralType
1595
1595
  ) -> literals_pb2.Literal:
1596
1596
  python_type = get_underlying_type(python_type)
1597
+ inferred_type = type(python_val)
1598
+ subtypes = get_args(python_type)
1599
+
1600
+ if inferred_type in subtypes:
1601
+ # If the Python value's type matches one of the types in the Union,
1602
+ # always use the transformer associated with that specific type.
1603
+ transformer = TypeEngine.get_transformer(inferred_type)
1604
+ res = await transformer.to_literal(
1605
+ python_val, inferred_type, expected.union_type.variants[subtypes.index(inferred_type)]
1606
+ )
1607
+ res_type = _add_tag_to_type(transformer.get_literal_type(inferred_type), transformer.name)
1608
+ return Literal(scalar=Scalar(union=Union(value=res, type=res_type)))
1597
1609
 
1598
1610
  potential_types = []
1599
1611
  found_res = False
@@ -1601,14 +1613,14 @@ class UnionTransformer(TypeTransformer[T]):
1601
1613
  res = None
1602
1614
  res_type = None
1603
1615
  t = None
1604
- for i in range(len(get_args(python_type))):
1616
+ for i in range(len(subtypes)):
1605
1617
  try:
1606
- t = get_args(python_type)[i]
1618
+ t = subtypes[i]
1607
1619
  trans: TypeTransformer[T] = TypeEngine.get_transformer(t)
1608
1620
  attempt = trans.to_literal(python_val, t, expected.union_type.variants[i])
1609
1621
  res = await attempt
1610
1622
  if found_res:
1611
- logger.debug(f"Current type {get_args(python_type)[i]} old res {res_type}")
1623
+ logger.debug(f"Current type {subtypes[i]} old res {res_type}")
1612
1624
  is_ambiguous = True
1613
1625
  res_type = _add_tag_to_type(trans.get_literal_type(t), trans.name)
1614
1626
  found_res = True
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: flyte
3
- Version: 0.2.0b27
3
+ Version: 0.2.0b30
4
4
  Summary: Add your description here
5
5
  Author-email: Ketan Umare <kumare3@users.noreply.github.com>
6
6
  Requires-Python: >=3.10
@@ -8,10 +8,10 @@ flyte/_environment.py,sha256=oKVXLBX0ky2eE_wjBdzvQGI_2LiT2Nbx58ur7GMt50c,3231
8
8
  flyte/_excepthook.py,sha256=nXts84rzEg6-7RtFarbKzOsRZTQR4plnbWVIFMAEprs,1310
9
9
  flyte/_group.py,sha256=7o1j16sZyUmYB50mOiq1ui4TBAKhRpDqLakV8Ya1kw4,803
10
10
  flyte/_hash.py,sha256=Of_Zl_DzzzF2jp4ZsLm-3o-xJFCCJ8_GubmLI1htx78,504
11
- flyte/_image.py,sha256=P7eGdGHOHenxZlgT8LkHWjv35pPqrhrBqA__nJ_QNOI,31845
11
+ flyte/_image.py,sha256=NbHR_4pCpYVwd7gYW1CHaXm6cxVhAR40NFDy3QaiLbU,33604
12
12
  flyte/_initialize.py,sha256=xKl_LYMluRt21wWqa6RTKuLo0_DCbSaTfUk27_brtNk,18232
13
13
  flyte/_interface.py,sha256=1B9zIwFDjiVp_3l_mk8EpA4g3Re-6DUBEBi9z9vDvPs,3504
14
- flyte/_logging.py,sha256=_yNo-Nx2yzh0MLoZGbnIYHGKei4wtQmSGM0lE30Ev7w,3662
14
+ flyte/_logging.py,sha256=QrT4Z30C2tsZ-yIojisQODTuq6Y6zSJYuTrLgF58UYc,3664
15
15
  flyte/_map.py,sha256=efPd8O-JKUg1OY3_MzU3KGbhsGYDVRNBwWr0ceNIXhQ,7444
16
16
  flyte/_pod.py,sha256=--72b0c6IkOEbBwZPLmgl-ll-j7ECfG-kh75LzBnNN8,1068
17
17
  flyte/_resources.py,sha256=L2JuvQDlMo1JLJeUmJPRwtWbunhR2xJEhFgQW5yc72c,9690
@@ -19,16 +19,16 @@ flyte/_retry.py,sha256=rfLv0MvWxzPByKESTglEmjPsytEAKiIvvmzlJxXwsfE,941
19
19
  flyte/_reusable_environment.py,sha256=f8Y1GilUwGcXH4n2Fckrnx0SrZmhk3nCfoe-TqUKivI,3740
20
20
  flyte/_run.py,sha256=htq4zyltmaWL-B_IkLX5joSzfB-pLTHQ5DtI49c220I,24247
21
21
  flyte/_secret.py,sha256=ogXmCNfYYIphV6p-2iiWmwr2cNUES5Cq01PPjY6uQNA,3217
22
- flyte/_task.py,sha256=hYId6MoJiLsGv3otAfXAnjIc1u39LRSSapHt0GrD-_Q,18014
22
+ flyte/_task.py,sha256=aZpnLLMZLNmPPS6-_pafBEgOtvg7Z-kwI1fhexfI8JM,18018
23
23
  flyte/_task_environment.py,sha256=qYcTG9452a_POueQCHqkTafN4HG8Xo7KkBPwSMkKRRU,8536
24
24
  flyte/_task_plugins.py,sha256=9MH3nFPOH_e8_92BT4sFk4oyAnj6GJFvaPYWaraX7yE,1037
25
25
  flyte/_timeout.py,sha256=zx5sFcbYmjJAJbZWSGzzX-BpC9HC7Jfs35T7vVhKwkk,1571
26
26
  flyte/_tools.py,sha256=tWb0sx3t3mm4jbaQVjCTc9y39oR_Ibo3z_KHToP3Lto,966
27
27
  flyte/_trace.py,sha256=C788bgoSc3st8kE8Cae2xegnLx2CT6uuRKKfaDrDUys,5122
28
- flyte/_version.py,sha256=1OZxtIinrzel7addSNq8I2MVEKwGJOtZ9VCRKrmBqxE,521
28
+ flyte/_version.py,sha256=V4ZfeDEeYjX-hkTAGvUV-fZDolyr1Qdq3Nn5m5C-mng,521
29
29
  flyte/errors.py,sha256=IUXHuEgszis9ZyhBUOSSlZx7VPQk0BF4N875yj1FBKo,4963
30
30
  flyte/extend.py,sha256=GB4ZedGzKa30vYWRVPOdxEeK62xnUVFY4z2tD6H9eEw,376
31
- flyte/models.py,sha256=yqLwln7G30tpV5U8Zji4z8K4u7DbSCDdFo1q-F77WuM,15207
31
+ flyte/models.py,sha256=g8QBIF9JjrNxDR_R_esAFG72hrq3fFV42bb7Nm0E0Zo,15225
32
32
  flyte/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
33
  flyte/_bin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
34
34
  flyte/_bin/runtime.py,sha256=2jTy3ccvrJ__Xrfdo2t0Fxhsojc5o2zIxDHt98RE_eU,6475
@@ -53,9 +53,9 @@ flyte/_internal/controllers/remote/_core.py,sha256=FJe1ZAWu_0w5SQUFgAHY4Hjjf_Aju
53
53
  flyte/_internal/controllers/remote/_informer.py,sha256=StiPcQLLW0h36uEBhKsupMY79EeFCKA3QQzvv2IyvRo,14188
54
54
  flyte/_internal/controllers/remote/_service_protocol.py,sha256=B9qbIg6DiGeac-iSccLmX_AL2xUgX4ezNUOiAbSy4V0,1357
55
55
  flyte/_internal/imagebuild/__init__.py,sha256=dwXdJ1jMhw9RF8itF7jkPLanvX1yCviSns7hE5eoIts,102
56
- flyte/_internal/imagebuild/docker_builder.py,sha256=rQXbWG9eKcxBzjbd2pbkEJ1OqtDPeBxDGLqoluQvm5U,16129
56
+ flyte/_internal/imagebuild/docker_builder.py,sha256=SZdQOaNwnXwHeCzcg7YdnmveypeLXGRiIEN3VzhqR-Q,16795
57
57
  flyte/_internal/imagebuild/image_builder.py,sha256=dXBXl62qcPabus6dR3eP8P9mBGNhpZHZ2Xm12AymKkk,11150
58
- flyte/_internal/imagebuild/remote_builder.py,sha256=JBeek4B4a6tUeyAD8dgQKVv4myMdeERqmxMStABVWN0,10452
58
+ flyte/_internal/imagebuild/remote_builder.py,sha256=NndHL4dHKMIb8s4RS1fllr7oCtwbzZI0OufGNSLr14M,10566
59
59
  flyte/_internal/resolvers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
60
60
  flyte/_internal/resolvers/_task_module.py,sha256=jwy1QYygUK7xmpCZLt1SPTfJCkfox3Ck3mTlTsm66UI,1973
61
61
  flyte/_internal/resolvers/common.py,sha256=ADQLRoyGsJ4vuUkitffMGrMKKjy0vpk6X53g4FuKDLc,993
@@ -182,7 +182,7 @@ flyte/io/_structured_dataset/structured_dataset.py,sha256=ddRjz36RhNxIy0gakzdLSt
182
182
  flyte/remote/__init__.py,sha256=y9eke9JzEJkygk8eKZjSj44fJGlyepuW4i-j6lbCAPY,617
183
183
  flyte/remote/_action.py,sha256=r2rLmJoPUIOCUoBUy4RG_1mMYmC4uiI1tKXuZZ9iC9k,23564
184
184
  flyte/remote/_console.py,sha256=avmELJPx8nQMAVPrHlh6jEIRPjrMwFpdZjJsWOOa9rE,660
185
- flyte/remote/_data.py,sha256=h3oR2ZmwOEg6HpWyYVbVcHBs8_LX2RmRolHxgwBjlQE,6121
185
+ flyte/remote/_data.py,sha256=zYXXlqEvPdsC44Gm7rP_hQjRgVe3EFfhZNEWKF0p4MQ,6163
186
186
  flyte/remote/_logs.py,sha256=xBx4ozfY-NBMw3uD5o5YLsI4no10zGroNMcx1Oj0ef0,6689
187
187
  flyte/remote/_project.py,sha256=CFNTGpgXU3X599tkJ_oxijs9zPzzCWOB6mAWn6WeDEU,2828
188
188
  flyte/remote/_run.py,sha256=HzpoDthSw50vuT-gmzyzdkf28H4SyBgMr0d6bFSmyNU,9747
@@ -224,11 +224,11 @@ flyte/types/_interface.py,sha256=5y9EC5r897xz03Hh0ltF8QVGKMfMfAznws-hKSEO4Go,167
224
224
  flyte/types/_pickle.py,sha256=PjdR66OTDMZ3OYq6GvM_Ua0cIo5t2XQaIjmpJ9xo4Ys,4050
225
225
  flyte/types/_renderer.py,sha256=ygcCo5l60lHufyQISFddZfWwLlQ8kJAKxUT_XnR_6dY,4818
226
226
  flyte/types/_string_literals.py,sha256=NlG1xV8RSA-sZ-n-IFQCAsdB6jXJOAKkHWtnopxVVDk,4231
227
- flyte/types/_type_engine.py,sha256=QBH-XNwyBHvKP8PjI_BaEPneonfoeNS86aMld87YLMA,97278
227
+ flyte/types/_type_engine.py,sha256=9cgkE_gz4gFfuXc2Qy7cLEmf2p1ZJb2DhygK_PaiqOs,97934
228
228
  flyte/types/_utils.py,sha256=pbts9E1_2LTdLygAY0UYTLYJ8AsN3BZyviSXvrtcutc,2626
229
- flyte-0.2.0b27.data/scripts/runtime.py,sha256=2jTy3ccvrJ__Xrfdo2t0Fxhsojc5o2zIxDHt98RE_eU,6475
230
- flyte-0.2.0b27.dist-info/METADATA,sha256=vMxmOvEOeHKQwuOpB0A5vFPtvf7mlBbJhq8RiZ2MsTg,5857
231
- flyte-0.2.0b27.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
232
- flyte-0.2.0b27.dist-info/entry_points.txt,sha256=MIq2z5dBurdCJfpXfMKzgBv7sJOakKRYxr8G0cMiTrg,75
233
- flyte-0.2.0b27.dist-info/top_level.txt,sha256=7dkyFbikvA12LEZEqawx8oDG1CMod6hTliPj7iWzgYo,6
234
- flyte-0.2.0b27.dist-info/RECORD,,
229
+ flyte-0.2.0b30.data/scripts/runtime.py,sha256=2jTy3ccvrJ__Xrfdo2t0Fxhsojc5o2zIxDHt98RE_eU,6475
230
+ flyte-0.2.0b30.dist-info/METADATA,sha256=KEy3-spKhC5A0GLF3a40UZQaT4DgCXso2fI2u9fwBrI,5857
231
+ flyte-0.2.0b30.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
232
+ flyte-0.2.0b30.dist-info/entry_points.txt,sha256=MIq2z5dBurdCJfpXfMKzgBv7sJOakKRYxr8G0cMiTrg,75
233
+ flyte-0.2.0b30.dist-info/top_level.txt,sha256=7dkyFbikvA12LEZEqawx8oDG1CMod6hTliPj7iWzgYo,6
234
+ flyte-0.2.0b30.dist-info/RECORD,,