flyte 0.2.0b1__py3-none-any.whl → 0.2.0b3__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.

Files changed (57) hide show
  1. flyte/__init__.py +3 -4
  2. flyte/_bin/runtime.py +21 -7
  3. flyte/_cache/cache.py +1 -2
  4. flyte/_cli/_common.py +26 -4
  5. flyte/_cli/_create.py +48 -0
  6. flyte/_cli/_deploy.py +4 -2
  7. flyte/_cli/_get.py +18 -7
  8. flyte/_cli/_run.py +1 -0
  9. flyte/_cli/main.py +11 -5
  10. flyte/_code_bundle/bundle.py +42 -11
  11. flyte/_context.py +1 -1
  12. flyte/_deploy.py +3 -1
  13. flyte/_group.py +1 -1
  14. flyte/_initialize.py +28 -247
  15. flyte/_internal/controllers/__init__.py +6 -6
  16. flyte/_internal/controllers/_local_controller.py +14 -5
  17. flyte/_internal/controllers/_trace.py +1 -1
  18. flyte/_internal/controllers/remote/__init__.py +27 -7
  19. flyte/_internal/controllers/remote/_action.py +1 -1
  20. flyte/_internal/controllers/remote/_client.py +5 -1
  21. flyte/_internal/controllers/remote/_controller.py +68 -24
  22. flyte/_internal/controllers/remote/_core.py +1 -1
  23. flyte/_internal/runtime/convert.py +34 -8
  24. flyte/_internal/runtime/entrypoints.py +1 -1
  25. flyte/_internal/runtime/io.py +3 -3
  26. flyte/_internal/runtime/task_serde.py +31 -1
  27. flyte/_internal/runtime/taskrunner.py +1 -1
  28. flyte/_internal/runtime/types_serde.py +1 -1
  29. flyte/_run.py +47 -28
  30. flyte/_task.py +2 -2
  31. flyte/_task_environment.py +1 -1
  32. flyte/_trace.py +5 -6
  33. flyte/_utils/__init__.py +2 -0
  34. flyte/_utils/async_cache.py +139 -0
  35. flyte/_version.py +2 -2
  36. flyte/config/__init__.py +26 -4
  37. flyte/config/_config.py +13 -4
  38. flyte/extras/_container.py +3 -3
  39. flyte/{_datastructures.py → models.py} +3 -2
  40. flyte/remote/_client/auth/_auth_utils.py +14 -0
  41. flyte/remote/_client/auth/_channel.py +28 -3
  42. flyte/remote/_client/auth/_token_client.py +3 -3
  43. flyte/remote/_client/controlplane.py +13 -13
  44. flyte/remote/_logs.py +1 -1
  45. flyte/remote/_run.py +4 -8
  46. flyte/remote/_task.py +2 -2
  47. flyte/storage/__init__.py +5 -0
  48. flyte/storage/_config.py +233 -0
  49. flyte/storage/_storage.py +23 -3
  50. flyte/types/_interface.py +1 -1
  51. flyte/types/_type_engine.py +1 -1
  52. {flyte-0.2.0b1.dist-info → flyte-0.2.0b3.dist-info}/METADATA +2 -2
  53. {flyte-0.2.0b1.dist-info → flyte-0.2.0b3.dist-info}/RECORD +56 -54
  54. flyte/_internal/controllers/pbhash.py +0 -39
  55. {flyte-0.2.0b1.dist-info → flyte-0.2.0b3.dist-info}/WHEEL +0 -0
  56. {flyte-0.2.0b1.dist-info → flyte-0.2.0b3.dist-info}/entry_points.txt +0 -0
  57. {flyte-0.2.0b1.dist-info → flyte-0.2.0b3.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,233 @@
1
+ from __future__ import annotations
2
+
3
+ import datetime
4
+ import os
5
+ import typing
6
+ from dataclasses import dataclass
7
+ from typing import ClassVar
8
+
9
+ from flyte.config import set_if_exists
10
+
11
+
12
+ @dataclass(init=True, repr=True, eq=True, frozen=True)
13
+ class Storage(object):
14
+ """
15
+ Data storage configuration that applies across any provider.
16
+ """
17
+
18
+ retries: int = 3
19
+ backoff: datetime.timedelta = datetime.timedelta(seconds=5)
20
+ enable_debug: bool = False
21
+ attach_execution_metadata: bool = True
22
+
23
+ _KEY_ENV_VAR_MAPPING: ClassVar[typing.Dict[str, str]] = {
24
+ "enable_debug": "UNION_STORAGE_DEBUG",
25
+ "retries": "UNION_STORAGE_RETRIES",
26
+ "backoff": "UNION_STORAGE_BACKOFF_SECONDS",
27
+ }
28
+
29
+ def get_fsspec_kwargs(self, anonymous: bool = False, **kwargs) -> typing.Dict[str, typing.Any]:
30
+ """
31
+ Returns the configuration as kwargs for constructing an fsspec filesystem.
32
+ """
33
+ return {}
34
+
35
+ @classmethod
36
+ def _auto_as_kwargs(cls) -> typing.Dict[str, typing.Any]:
37
+ retries = os.getenv(cls._KEY_ENV_VAR_MAPPING["retries"])
38
+ backoff = os.getenv(cls._KEY_ENV_VAR_MAPPING["backoff"])
39
+ enable_debug = os.getenv(cls._KEY_ENV_VAR_MAPPING["enable_debug"])
40
+
41
+ kwargs: typing.Dict[str, typing.Any] = {}
42
+ kwargs = set_if_exists(kwargs, "enable_debug", enable_debug)
43
+ kwargs = set_if_exists(kwargs, "retries", retries)
44
+ kwargs = set_if_exists(kwargs, "backoff", backoff)
45
+ return kwargs
46
+
47
+ @classmethod
48
+ def auto(cls) -> Storage:
49
+ """
50
+ Construct the config object automatically from environment variables.
51
+ """
52
+ return cls(**cls._auto_as_kwargs())
53
+
54
+
55
+ @dataclass(init=True, repr=True, eq=True, frozen=True)
56
+ class S3(Storage):
57
+ """
58
+ S3 specific configuration
59
+ """
60
+
61
+ endpoint: typing.Optional[str] = None
62
+ access_key_id: typing.Optional[str] = None
63
+ secret_access_key: typing.Optional[str] = None
64
+
65
+ _KEY_ENV_VAR_MAPPING: ClassVar[typing.Dict[str, str]] = {
66
+ "endpoint": "FLYTE_AWS_ENDPOINT",
67
+ "access_key_id": "FLYTE_AWS_ACCESS_KEY_ID",
68
+ "secret_access_key": "FLYTE_AWS_SECRET_ACCESS_KEY",
69
+ } | Storage._KEY_ENV_VAR_MAPPING
70
+
71
+ # Refer to https://github.com/developmentseed/obstore/blob/33654fc37f19a657689eb93327b621e9f9e01494/obstore/python/obstore/store/_aws.pyi#L11
72
+ # for key and secret
73
+ _CONFIG_KEY_FSSPEC_S3_KEY_ID: ClassVar = "access_key_id"
74
+ _CONFIG_KEY_FSSPEC_S3_SECRET: ClassVar = "secret_access_key"
75
+ _CONFIG_KEY_ENDPOINT: ClassVar = "endpoint_url"
76
+ _KEY_SKIP_SIGNATURE: ClassVar = "skip_signature"
77
+
78
+ @classmethod
79
+ def auto(cls) -> S3:
80
+ """
81
+ :return: Config
82
+ """
83
+ endpoint = os.getenv(cls._KEY_ENV_VAR_MAPPING["endpoint"], None)
84
+ access_key_id = os.getenv(cls._KEY_ENV_VAR_MAPPING["access_key_id"], None)
85
+ secret_access_key = os.getenv(cls._KEY_ENV_VAR_MAPPING["secret_access_key"], None)
86
+
87
+ kwargs = super()._auto_as_kwargs()
88
+ kwargs = set_if_exists(kwargs, "endpoint", endpoint)
89
+ kwargs = set_if_exists(kwargs, "access_key_id", access_key_id)
90
+ kwargs = set_if_exists(kwargs, "secret_access_key", secret_access_key)
91
+
92
+ return S3(**kwargs)
93
+
94
+ @classmethod
95
+ def for_sandbox(cls) -> S3:
96
+ """
97
+ :return:
98
+ """
99
+ kwargs = super()._auto_as_kwargs()
100
+ final_kwargs = kwargs | {
101
+ "endpoint": "http://localhost:4566",
102
+ "access_key_id": "minio",
103
+ "secret_access_key": "miniostorage",
104
+ }
105
+ return S3(**final_kwargs)
106
+
107
+ def get_fsspec_kwargs(self, anonymous: bool = False, **kwargs) -> typing.Dict[str, typing.Any]:
108
+ # Construct the config object
109
+ kwargs.pop("anonymous", None) # Remove anonymous if it exists, as we handle it separately
110
+ config: typing.Dict[str, typing.Any] = {}
111
+ if self._CONFIG_KEY_FSSPEC_S3_KEY_ID in kwargs or self.access_key_id:
112
+ config[self._CONFIG_KEY_FSSPEC_S3_KEY_ID] = kwargs.pop(
113
+ self._CONFIG_KEY_FSSPEC_S3_KEY_ID, self.access_key_id
114
+ )
115
+ if self._CONFIG_KEY_FSSPEC_S3_SECRET in kwargs or self.secret_access_key:
116
+ config[self._CONFIG_KEY_FSSPEC_S3_SECRET] = kwargs.pop(
117
+ self._CONFIG_KEY_FSSPEC_S3_SECRET, self.secret_access_key
118
+ )
119
+ if self._CONFIG_KEY_ENDPOINT in kwargs or self.endpoint:
120
+ config["endpoint_url"] = kwargs.pop(self._CONFIG_KEY_ENDPOINT, self.endpoint)
121
+
122
+ retries = kwargs.pop("retries", self.retries)
123
+ backoff = kwargs.pop("backoff", self.backoff)
124
+
125
+ if anonymous:
126
+ config[self._KEY_SKIP_SIGNATURE] = True
127
+
128
+ retry_config = {
129
+ "max_retries": retries,
130
+ "backoff": {
131
+ "base": 2,
132
+ "init_backoff": backoff,
133
+ "max_backoff": datetime.timedelta(seconds=16),
134
+ },
135
+ "retry_timeout": datetime.timedelta(minutes=3),
136
+ }
137
+
138
+ client_options = {"timeout": "99999s", "allow_http": True}
139
+
140
+ if config:
141
+ kwargs["config"] = config
142
+ kwargs["client_options"] = client_options or None
143
+ kwargs["retry_config"] = retry_config or None
144
+
145
+ return kwargs
146
+
147
+
148
+ @dataclass(init=True, repr=True, eq=True, frozen=True)
149
+ class GCS(Storage):
150
+ """
151
+ Any GCS specific configuration.
152
+ """
153
+
154
+ gsutil_parallelism: bool = False
155
+
156
+ _KEY_ENV_VAR_MAPPING: ClassVar[dict[str, str]] = {
157
+ "gsutil_parallelism": "GCP_GSUTIL_PARALLELISM",
158
+ }
159
+
160
+ @classmethod
161
+ def auto(cls) -> GCS:
162
+ gsutil_parallelism = os.getenv(cls._KEY_ENV_VAR_MAPPING["gsutil_parallelism"], None)
163
+
164
+ kwargs: typing.Dict[str, typing.Any] = {}
165
+ kwargs = set_if_exists(kwargs, "gsutil_parallelism", gsutil_parallelism)
166
+ return GCS(**kwargs)
167
+
168
+ def get_fsspec_kwargs(self, anonymous: bool = False, **kwargs) -> typing.Dict[str, typing.Any]:
169
+ kwargs.pop("anonymous", None)
170
+ return kwargs
171
+
172
+
173
+ @dataclass(init=True, repr=True, eq=True, frozen=True)
174
+ class ABFS(Storage):
175
+ """
176
+ Any Azure Blob Storage specific configuration.
177
+ """
178
+
179
+ account_name: typing.Optional[str] = None
180
+ account_key: typing.Optional[str] = None
181
+ tenant_id: typing.Optional[str] = None
182
+ client_id: typing.Optional[str] = None
183
+ client_secret: typing.Optional[str] = None
184
+
185
+ _KEY_ENV_VAR_MAPPING: ClassVar[dict[str, str]] = {
186
+ "account_name": "AZURE_STORAGE_ACCOUNT_NAME",
187
+ "account_key": "AZURE_STORAGE_ACCOUNT_KEY",
188
+ "tenant_id": "AZURE_TENANT_ID",
189
+ "client_id": "AZURE_CLIENT_ID",
190
+ "client_secret": "AZURE_CLIENT_SECRET",
191
+ }
192
+ _KEY_SKIP_SIGNATURE: ClassVar = "skip_signature"
193
+
194
+ @classmethod
195
+ def auto(cls) -> ABFS:
196
+ account_name = os.getenv(cls._KEY_ENV_VAR_MAPPING["account_name"], None)
197
+ account_key = os.getenv(cls._KEY_ENV_VAR_MAPPING["account_key"], None)
198
+ tenant_id = os.getenv(cls._KEY_ENV_VAR_MAPPING["tenant_id"], None)
199
+ client_id = os.getenv(cls._KEY_ENV_VAR_MAPPING["client_id"], None)
200
+ client_secret = os.getenv(cls._KEY_ENV_VAR_MAPPING["client_secret"], None)
201
+
202
+ kwargs: typing.Dict[str, typing.Any] = {}
203
+ kwargs = set_if_exists(kwargs, "account_name", account_name)
204
+ kwargs = set_if_exists(kwargs, "account_key", account_key)
205
+ kwargs = set_if_exists(kwargs, "tenant_id", tenant_id)
206
+ kwargs = set_if_exists(kwargs, "client_id", client_id)
207
+ kwargs = set_if_exists(kwargs, "client_secret", client_secret)
208
+ return ABFS(**kwargs)
209
+
210
+ def get_fsspec_kwargs(self, anonymous: bool = False, **kwargs) -> typing.Dict[str, typing.Any]:
211
+ kwargs.pop("anonymous", None)
212
+ config: typing.Dict[str, typing.Any] = {}
213
+ if "account_name" in kwargs or self.account_name:
214
+ config["account_name"] = kwargs.get("account_name", self.account_name)
215
+ if "account_key" in kwargs or self.account_key:
216
+ config["account_key"] = kwargs.get("account_key", self.account_key)
217
+ if "client_id" in kwargs or self.client_id:
218
+ config["client_id"] = kwargs.get("client_id", self.client_id)
219
+ if "client_secret" in kwargs or self.client_secret:
220
+ config["client_secret"] = kwargs.get("client_secret", self.client_secret)
221
+ if "tenant_id" in kwargs or self.tenant_id:
222
+ config["tenant_id"] = kwargs.get("tenant_id", self.tenant_id)
223
+
224
+ if anonymous:
225
+ config[self._KEY_SKIP_SIGNATURE] = True
226
+
227
+ client_options = {"timeout": "99999s", "allow_http": "true"}
228
+
229
+ if config:
230
+ kwargs["config"] = config
231
+ kwargs["client_options"] = client_options
232
+
233
+ return kwargs
flyte/storage/_storage.py CHANGED
@@ -74,7 +74,27 @@ def get_underlying_filesystem(
74
74
 
75
75
  storage_config = get_storage()
76
76
  if storage_config:
77
- kwargs.update(storage_config.get_fsspec_kwargs(anonymous, **kwargs))
77
+ kwargs = storage_config.get_fsspec_kwargs(anonymous, **kwargs)
78
+ elif protocol:
79
+ match protocol:
80
+ case "s3":
81
+ # If the protocol is s3, we can use the s3 filesystem
82
+ from flyte.storage import S3
83
+
84
+ kwargs = S3.auto().get_fsspec_kwargs(anonymous=anonymous, **kwargs)
85
+ case "gs":
86
+ # If the protocol is gs, we can use the gs filesystem
87
+ from flyte.storage import GCS
88
+
89
+ kwargs = GCS.auto().get_fsspec_kwargs(anonymous=anonymous, **kwargs)
90
+ case "abfs" | "abfss":
91
+ # If the protocol is abfs or abfss, we can use the abfs filesystem
92
+ from flyte.storage import ABFS
93
+
94
+ kwargs = ABFS.auto().get_fsspec_kwargs(anonymous=anonymous, **kwargs)
95
+ case _:
96
+ pass
97
+
78
98
  return fsspec.filesystem(protocol, **kwargs)
79
99
 
80
100
 
@@ -127,7 +147,7 @@ async def _get_from_filesystem(
127
147
  return to_path
128
148
 
129
149
 
130
- async def put(from_path: str, to_path: Optional[str] = None, recursive: bool = False, **kwargs):
150
+ async def put(from_path: str, to_path: Optional[str] = None, recursive: bool = False, **kwargs) -> str:
131
151
  if not to_path:
132
152
  from flyte._context import internal_ctx
133
153
 
@@ -142,7 +162,7 @@ async def put(from_path: str, to_path: Optional[str] = None, recursive: bool = F
142
162
  else:
143
163
  dst = file_system.put(from_path, to_path, recursive=recursive, **kwargs)
144
164
  if isinstance(dst, (str, pathlib.Path)):
145
- return dst
165
+ return str(dst)
146
166
  else:
147
167
  return to_path
148
168
 
flyte/types/_interface.py CHANGED
@@ -2,7 +2,7 @@ from typing import Any, Dict, Type, cast
2
2
 
3
3
  from flyteidl.core import interface_pb2
4
4
 
5
- from flyte._datastructures import NativeInterface
5
+ from flyte.models import NativeInterface
6
6
 
7
7
 
8
8
  def guess_interface(interface: interface_pb2.TypedInterface) -> NativeInterface:
@@ -38,10 +38,10 @@ from mashumaro.mixins.json import DataClassJSONMixin
38
38
  from typing_extensions import Annotated, get_args, get_origin
39
39
 
40
40
  import flyte.storage as storage
41
- from flyte._datastructures import NativeInterface
42
41
  from flyte._hash import HashMethod
43
42
  from flyte._logging import logger
44
43
  from flyte._utils.helpers import load_proto_from_file
44
+ from flyte.models import NativeInterface
45
45
 
46
46
  from ._utils import literal_types_match
47
47
 
@@ -1,12 +1,12 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: flyte
3
- Version: 0.2.0b1
3
+ Version: 0.2.0b3
4
4
  Summary: Add your description here
5
5
  Author-email: Ketan Umare <kumare3@users.noreply.github.com>
6
6
  Requires-Python: >=3.10
7
7
  Description-Content-Type: text/markdown
8
8
  Requires-Dist: aiofiles>=24.1.0
9
- Requires-Dist: click!=8.2.0,>=8.1.8
9
+ Requires-Dist: click>=8.2.1
10
10
  Requires-Dist: flyteidl==1.15.4b0
11
11
  Requires-Dist: cloudpickle>=3.1.1
12
12
  Requires-Dist: fsspec>=2025.3.0
@@ -1,61 +1,60 @@
1
- flyte/__init__.py,sha256=klTe7_6xJK-7Aaozj2gmCulji6vCY1fET5h6pdn0chA,1331
1
+ flyte/__init__.py,sha256=5rPeSCWYJSKbqbiCx4cjPW0728c7ow-aogoXLaHGhFg,1340
2
2
  flyte/_api_commons.py,sha256=9drgP2Qgr8rdDmZlI31TEpa056zCBiI1tAMO001SQ8o,64
3
3
  flyte/_build.py,sha256=MVBM-i2rCxHhIFQCR-Tc0JMA2XuJ5r4UZBW4M7HRvSw,580
4
- flyte/_context.py,sha256=OSMuyrAahRYPXci5Bgi5plhnhd2nPTcNJqlHtwkJOAE,5004
5
- flyte/_datastructures.py,sha256=YQWNJpXrRhZSiYA4x5tRcOl4SGBynD6J6QUV7fj4L_o,12554
6
- flyte/_deploy.py,sha256=hSk9kDfIyM0fDxh145RD1wMP6RskHikx3AzDFKBz3c4,7663
4
+ flyte/_context.py,sha256=pYa43ut8gp6i-Y_zOy1WW_N2IbP9Vd-zIORO11vqK1E,4995
5
+ flyte/_deploy.py,sha256=xYSSA5Sqj79ePCLNid07-j3L28hn2arLAnK15FigE28,7725
7
6
  flyte/_doc.py,sha256=_OPCf3t_git6UT7kSJISFaWO9cfNzJhhoe6JjVdyCJo,706
8
7
  flyte/_docstring.py,sha256=SsG0Ab_YMAwy2ABJlEo3eBKlyC3kwPdnDJ1FIms-ZBQ,1127
9
8
  flyte/_environment.py,sha256=ft0EsyFg6OnoIFPFbwkABLcq676veIH3TTR4SNilrj8,1499
10
- flyte/_group.py,sha256=YmkTWJlO39wrrcOeNV3QUQUriNRwtdMFE_r8sXLLpSI,752
9
+ flyte/_group.py,sha256=64q2GFDp3koIkx3IV4GBeGEbu4v-GPUxTlxU_sV2fPk,743
11
10
  flyte/_hash.py,sha256=Of_Zl_DzzzF2jp4ZsLm-3o-xJFCCJ8_GubmLI1htx78,504
12
11
  flyte/_image.py,sha256=8xEGmAALY6jQAsLfJQH9NweeVUaSTWivFEQt-JchN24,29068
13
- flyte/_initialize.py,sha256=B5QxKwsKvPkWhIMk965LXIMmcAmF35cMjfxWoTTB-dk,23317
12
+ flyte/_initialize.py,sha256=l7nSK7yZwJtmt4mBphFUUq4GDElrFyAMia7uxaC8O9o,15204
14
13
  flyte/_interface.py,sha256=MP5o_qpIwfBNtAc7zo_cLSjMugsPyanuO6EgUSk4fBE,3644
15
14
  flyte/_logging.py,sha256=FQvF3W1kkFypbARcOQ7WZVXO0XJasXp8EhozF6E6-aQ,3379
16
15
  flyte/_resources.py,sha256=UOLyEVhdxolvrHhddiBbYdJuE1RkM_l7xeS9G1abe6M,7583
17
16
  flyte/_retry.py,sha256=rfLv0MvWxzPByKESTglEmjPsytEAKiIvvmzlJxXwsfE,941
18
17
  flyte/_reusable_environment.py,sha256=P4FBATVKAYcIKpdFN98sI8acPyKy8eIGx6V0kUb9YdM,1289
19
- flyte/_run.py,sha256=3gdMFc6TJ7xtGhTfh9Y7hHX755JFWOKoyz-x0P0pftY,16825
18
+ flyte/_run.py,sha256=s3m3VChDj4ge3pYoGx-QBlRqyizUBA9tDWMdvy3LlVE,17630
20
19
  flyte/_secret.py,sha256=SqIHs6mi8hEkIIBZe3bI9jJsPt65Mt6dV5uh9_op1ME,2392
21
- flyte/_task.py,sha256=jGlnLmbHu7JXZlXvqQ-Sn9pw5ypBsm0Qcd9o7xvcPxk,14637
22
- flyte/_task_environment.py,sha256=1JSHkCvS-Ereh389mu1Z2eNIqsTXQGV-ZLiiqW09RnY,8412
20
+ flyte/_task.py,sha256=cqWfbMDMkEg1Q0sOkaSi1h_9Vn81DbGCOgNFZo8bMfI,14622
21
+ flyte/_task_environment.py,sha256=svSJJMEiiYsqz403s_urMgPdjguHJJSGVuBobT3uwVo,8403
23
22
  flyte/_timeout.py,sha256=zx5sFcbYmjJAJbZWSGzzX-BpC9HC7Jfs35T7vVhKwkk,1571
24
23
  flyte/_tools.py,sha256=JewkQZBR_M85tS6QY8e4xXue75jbOE48nID4ZHnc9jY,632
25
- flyte/_trace.py,sha256=jWJqmIntfubetcS4S705tIyoGR4jnXaPgS3JuK4gkuo,5502
26
- flyte/_version.py,sha256=mHKN7uNrb7UUXTMUOygK_fqSoAJcQ2D_wei4_-AAa4E,519
24
+ flyte/_trace.py,sha256=sXSlOvHsT32YhNjgCCLAY8lwmzXGSAgaS7nvoy9msWU,5441
25
+ flyte/_version.py,sha256=Z1N7oGzKZRF2f0T3kLgDOXvNT_dEF6I0XUajA-kd-A4,519
27
26
  flyte/errors.py,sha256=ulVzQ3TncddYOqQ3gvauDJAHTShWTpY0XZpqNqBZyOY,4036
27
+ flyte/models.py,sha256=GTRuR6GXc0RAbLmPEnnH54oRF7__2TNFhmYjFoYMjZA,12660
28
28
  flyte/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
29
29
  flyte/_bin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
- flyte/_bin/runtime.py,sha256=1-69O3yI4LEWsRn_JCy8vlCmpZ7kMvcNIbkEFgUca8g,4327
30
+ flyte/_bin/runtime.py,sha256=Q1vajoQ913KUfCQSP0u8Qoj-AYgfvU2i2wI19ydqnDw,4849
31
31
  flyte/_cache/__init__.py,sha256=zhdO5UuHQRdzn8GHmSN40nrxfAmI4ihDRuHZM11U84Y,305
32
- flyte/_cache/cache.py,sha256=3DL8E_WnLCzavE7DSIqc49nOJyKCVQr-LWZQmz6MwlY,5031
32
+ flyte/_cache/cache.py,sha256=ErhWzzJdEjTIuEF4f-r6IBgko-3Al9iUs1Eq4O42TUE,5021
33
33
  flyte/_cache/defaults.py,sha256=gzJZW0QJPUfd2OPnGpv3tzIfwPtgFjAKoie3NP1P97U,217
34
34
  flyte/_cache/policy_function_body.py,sha256=_AcyN6XKRXq16yV5lWuRJYCIVUlmyPvvWuYRxfU-Ldo,1507
35
35
  flyte/_cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
- flyte/_cli/_common.py,sha256=oKk1mYe04liluwqASP50vz_z7cUPhyGA6LWjXXaCD3A,9036
37
- flyte/_cli/_create.py,sha256=2fFUvujm_GXPup3-CNHvHwxXySnAk4DPlAJiS8eyqw4,1116
36
+ flyte/_cli/_common.py,sha256=ru0ScwPp1JkICnOFbT_2019FchKf0UasWyHHYIGlLBk,10299
37
+ flyte/_cli/_create.py,sha256=BtA8zKqrq-IEucIXHIpVwvl330PS9R5WnHyz-rlyE3o,2378
38
38
  flyte/_cli/_delete.py,sha256=MVxMKIgQC3R-EKDEYSySCqHTLHhQrhjwo4sdv5TynEA,498
39
- flyte/_cli/_deploy.py,sha256=QZmvYKWYHv7AZn4wmhSKf2oA2ss5b4K11AbM3Edhl28,4319
40
- flyte/_cli/_get.py,sha256=XhBeNqwb2g0EFKfN_b-XecYMojIVNNCaBZ0J_jL6jFQ,6772
39
+ flyte/_cli/_deploy.py,sha256=u30rb6KfZnr52M6zHlLueaOkgdCGoS2pIpfb0wFoTvY,4371
40
+ flyte/_cli/_get.py,sha256=EfxLRSLr9snseFpcicu1Qw7zjQ5Z4yMbxP3LWRCFUqA,7185
41
41
  flyte/_cli/_params.py,sha256=X3GpuftXmtfIsYQ7vBilD4kmlkXTc7_AxpaxohRjSuY,19458
42
- flyte/_cli/_run.py,sha256=UR8Ce1XlaGSrRNUnBe36YfXIeXWB5Ji7rCdIPo74jnQ,5740
43
- flyte/_cli/main.py,sha256=c6jELEuO8OLWbjS2DsEfoRI8H3q5bbIMXm1hADTCLDU,2214
42
+ flyte/_cli/_run.py,sha256=8FDBpLKQStPlKsBqhvpBBLCQ9BfjxqEFj3UrmISbTbw,5806
43
+ flyte/_cli/main.py,sha256=NDT0A3p13utLfZzPxYu5h-kr_U5FaHf6-igs0eJ0--k,2450
44
44
  flyte/_code_bundle/__init__.py,sha256=G7DJTQ0UN_ETvdh55pYcWsTrZJKXEcyQl9iQQNQOBXQ,328
45
45
  flyte/_code_bundle/_ignore.py,sha256=Tfaoa62CQVTH17kBHD6Xv6xEh1FhcAyvXivl9m-MEE0,3853
46
46
  flyte/_code_bundle/_packaging.py,sha256=_wEozcQTYgqvAAaKQYna9ptvShIMlXk3vEdccwAOYn8,6873
47
47
  flyte/_code_bundle/_utils.py,sha256=jdGsKLN12gdjqWq8ZGXeLPGQ6InhrK4iY9UB-IGDTo0,12583
48
- flyte/_code_bundle/bundle.py,sha256=2JGVTio1M_t-quugVN-R8VHSqOPnYuxHYpEpQlGy6e0,7670
48
+ flyte/_code_bundle/bundle.py,sha256=oh9xyONlw-sPUYc50kzrDd7jY1n4DgpvX25LlITdvOY,8788
49
49
  flyte/_internal/__init__.py,sha256=vjXgGzAAjy609YFkAy9_RVPuUlslsHSJBXCLNTVnqOY,136
50
- flyte/_internal/controllers/__init__.py,sha256=MshnWe5I28u6EF6TJ8Ij0NTvzuQBcOZW8Gp9bF-dMyo,3767
51
- flyte/_internal/controllers/_local_controller.py,sha256=8oAVeFTFdEUX7yFTkNELT0LhpMZp-j8NGSq7gTn6W30,4442
52
- flyte/_internal/controllers/_trace.py,sha256=-ajP0FnotKCqjP0QQVrDu81boWNsnu3ZHNLhBKLssGg,1135
53
- flyte/_internal/controllers/pbhash.py,sha256=gGDJWxSaXqOv3U3zdBv7Lx6Euudo2I2baamiItuoqrM,1372
54
- flyte/_internal/controllers/remote/__init__.py,sha256=op1CMiqVWef6KyUj61bnNr4rV_2RPmKJbvDw-UYgFtQ,1176
55
- flyte/_internal/controllers/remote/_action.py,sha256=FZL7itHqlAjbASE0aevuL-fWMj38K7RHeuNMK2ZgvOc,4914
56
- flyte/_internal/controllers/remote/_client.py,sha256=vfv-RaIEFuu6emU_ORjtClCF3JfMIbCtrZAFkQdv6J4,1212
57
- flyte/_internal/controllers/remote/_controller.py,sha256=Hmy6hFsTRDoZEx3GaRpEZt8dEnpG3owZ9bSwZgxsB08,15344
58
- flyte/_internal/controllers/remote/_core.py,sha256=NRPfL7PO8UKywr4lyBqSeplqWJpXHVTeKVeWFrdBTVw,18000
50
+ flyte/_internal/controllers/__init__.py,sha256=qaawXUgYdC5yHh5JfQ9mCH3u9a7oTYriDChADekzuzo,3750
51
+ flyte/_internal/controllers/_local_controller.py,sha256=wTrJitUZMKodvvZMiy4bQbmIv0doF8Pb-OCsa8lAHgA,4708
52
+ flyte/_internal/controllers/_trace.py,sha256=Ga2b65sn9q2IoOwHBZV2inMYyO6-CSDwzN7E3pDxsEI,1126
53
+ flyte/_internal/controllers/remote/__init__.py,sha256=9_azH1eHLqY6VULpDugXi7Kf1kK1ODqEnsQ_3wM6IqU,1919
54
+ flyte/_internal/controllers/remote/_action.py,sha256=w6vE1vPz1BwxvwfotDWjTNbDXfGEPrRBA8N3UVQ6P0w,4905
55
+ flyte/_internal/controllers/remote/_client.py,sha256=HPbzbfaWZVv5wpOvKNtFXR6COiZDwd1cUJQqi60A7oU,1421
56
+ flyte/_internal/controllers/remote/_controller.py,sha256=uqZYQDGG70DeJiqAU4y7n7VhXQ0gvD4ktWu15-zg86I,17387
57
+ flyte/_internal/controllers/remote/_core.py,sha256=P3hJPGtqnMt38oRjXD2IxZUh4evS2H6oCmxzVY0i69s,17999
59
58
  flyte/_internal/controllers/remote/_informer.py,sha256=6WPaT1EmDcIwQ3VlujGWICzHy-kaGhMut_zBh2ShZnE,14186
60
59
  flyte/_internal/controllers/remote/_service_protocol.py,sha256=-p5FXdo5pp5xmr9fJ0sGB9aE7mimeC6x13bqwyIR77k,1345
61
60
  flyte/_internal/imagebuild/__init__.py,sha256=cLXVxkAyFpbdC1y-k3Rb6FRW9f_xpoRQWVn__G9IqKs,354
@@ -67,13 +66,13 @@ flyte/_internal/resolvers/_task_module.py,sha256=jwy1QYygUK7xmpCZLt1SPTfJCkfox3C
67
66
  flyte/_internal/resolvers/common.py,sha256=ADQLRoyGsJ4vuUkitffMGrMKKjy0vpk6X53g4FuKDLc,993
68
67
  flyte/_internal/resolvers/default.py,sha256=nX4DHUYod1nRvEsl_vSgutQVEdExu2xL8pRkyi4VWbY,981
69
68
  flyte/_internal/runtime/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
70
- flyte/_internal/runtime/convert.py,sha256=ruWCOiTozsUB79IWJa7nZUgnccaXbRDATQLD6Tle160,8054
71
- flyte/_internal/runtime/entrypoints.py,sha256=l_VtUsPd0YqQoN2_POFyOw7c9YJFQnUWIOPSWaLWZZ0,5136
72
- flyte/_internal/runtime/io.py,sha256=b9loNxDkohLorSaoiSnp2z7jDpt8Ivn05po-rP7Xnio,4241
69
+ flyte/_internal/runtime/convert.py,sha256=ThvyrR4EnuNu6i1rhgeKy259UMpbn_tmFY7YCBDNlh4,9122
70
+ flyte/_internal/runtime/entrypoints.py,sha256=Kyi19i7LYk7YM3ZV_Y4FXGt5Pc1tIftGkIDohopblyY,5127
71
+ flyte/_internal/runtime/io.py,sha256=Lgdy4iPjlKjUO-V_AkoPZff6lywaFjZUG-PErRukmx4,4248
73
72
  flyte/_internal/runtime/resources_serde.py,sha256=tvMMv3l6cZEt_cfs7zVE_Kqs5qh-_r7fsEPxb6xMxMk,4812
74
- flyte/_internal/runtime/task_serde.py,sha256=NKuVoKAFu94wDKat1kByHC8-ISAUCxE1U92cXkKvTxE,8358
75
- flyte/_internal/runtime/taskrunner.py,sha256=zcSQjpDQ7v4pt4uMCMnjf75Gu_krQKsQkP4gBVWcBsw,7252
76
- flyte/_internal/runtime/types_serde.py,sha256=dOeuSZ1xcYRHg-fyIkPvjFyCtKWisg7guHU-DoKztU8,1822
73
+ flyte/_internal/runtime/task_serde.py,sha256=985eItmPsnA17CQdRXknjVDBK8wzOx4956AUuVjLsM8,9772
74
+ flyte/_internal/runtime/taskrunner.py,sha256=2lxA6QiDGlNPXnPkzP0bUr6_hWO_QWueHr1TagfgQ7Y,7243
75
+ flyte/_internal/runtime/types_serde.py,sha256=EjRh9Yypx9-20XXQprtNgp766LeQVRoYWtY6XPGMZQg,1813
77
76
  flyte/_protos/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
78
77
  flyte/_protos/common/authorization_pb2.py,sha256=6G7CAfq_Vq1qrm8JFkAnMAj0AaEipiX7MkjA7nk91-M,6707
79
78
  flyte/_protos/common/authorization_pb2.pyi,sha256=tdqc3wZo3Yc6lKfjVgJlUFUFzGv4GAaCknIv43RGd-8,4759
@@ -134,19 +133,20 @@ flyte/_protos/workflow/task_definition_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8g
134
133
  flyte/_protos/workflow/task_service_pb2.py,sha256=lY1MamKB9kNprHpBm1zQkeg25aTItXARu7Ta7rxzlB8,3787
135
134
  flyte/_protos/workflow/task_service_pb2.pyi,sha256=YY9pajzA_eF_xMHgVQMvThNI0QYulgfLn1741IYo8tI,1495
136
135
  flyte/_protos/workflow/task_service_pb2_grpc.py,sha256=PdhEfPraBIeN-UQulZsA2D0on830aTbfkBpvxPZBq9E,4311
137
- flyte/_utils/__init__.py,sha256=6-hCbI-RMQ-Ey9QrtMWMDMrPgCSIx2ewq7qTHmBy4i8,539
136
+ flyte/_utils/__init__.py,sha256=ZlVA1bLeAEnzwbkK7eEVAVmeVQnbBCuGqfd2UIk-yNc,599
138
137
  flyte/_utils/asyn.py,sha256=KeJKarXNIyD16g6oPM0T9cH7JDmh1KY7JLbwo7i0IlQ,3673
138
+ flyte/_utils/async_cache.py,sha256=JtZJmWO62OowJ0QFNl6wryWqh-kuDi76aAASMie87QY,4596
139
139
  flyte/_utils/coro_management.py,sha256=hlWzxdrsBYfUwzQS7qtltclG56XPxBMNgWE5lkuYdrY,760
140
140
  flyte/_utils/file_handling.py,sha256=iU4TxW--fCho_Eg5xTMODn96P03SxzF-V-5f-7bZAZY,2233
141
141
  flyte/_utils/helpers.py,sha256=Ntrs1WilJS7a4oLmcIPLXMi0cuzRDiCr_wwgtpV30uk,3953
142
142
  flyte/_utils/lazy_module.py,sha256=fvXPjvZLzCfcI8Vzs4pKedUDdY0U_RQ1ZVrp9b8qBQY,1994
143
143
  flyte/_utils/uv_script_parser.py,sha256=PxqD8lSMi6xv0uDd1s8LKB2IPZr4ttZJCUweqlyMTKk,1483
144
- flyte/config/__init__.py,sha256=cNTPvzi1PXdLK3oj2pSMSRvTMhay_38RyqbYYbYTvCU,8033
145
- flyte/config/_config.py,sha256=tDuf2XY-4GE-NHAmMdgp_FUBidAr7Ab2VakyWs1fKTc,6898
144
+ flyte/config/__init__.py,sha256=Za3haz4wHCN51e07obqpe7nbRgk9WTIl9F9FXu2IcrM,8602
145
+ flyte/config/_config.py,sha256=FxQ3X5oq0tanR7lT1QY81aBpiy72kpOSAxxYH1SWFpI,7104
146
146
  flyte/config/_internal.py,sha256=ylQN6RKxlUVQsgOLSR2a_4lgZ0k99xRj8o-MNTfsgWE,2836
147
147
  flyte/connectors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
148
148
  flyte/extras/__init__.py,sha256=FhB0uK7H1Yo5De9vOuF7UGnezTKncj3u2Wo5uQdWN0g,74
149
- flyte/extras/_container.py,sha256=Us3gfyDtr0MiI1n6HIeGOTmJewxxpS7HyfRx12LMYHE,11248
149
+ flyte/extras/_container.py,sha256=JM-JNsj9-Mjf7E4OQcAS2Z5IJBXhB-HtQkGn_mu7gvk,11249
150
150
  flyte/io/__init__.py,sha256=e2wHVEoZ84TGOtOPrtTg6hJpeuxiYI56Sg011yq6nUQ,236
151
151
  flyte/io/_dataframe.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
152
152
  flyte/io/_dir.py,sha256=K3tz3pHKmpMppgX2HtI6Bz0H6EIdHFj96-7Ub47TJO8,15328
@@ -159,20 +159,21 @@ flyte/io/structured_dataset/structured_dataset.py,sha256=DrRIHA3zbkfLBekw3pPTF_S
159
159
  flyte/remote/__init__.py,sha256=zBWV88VF-L8430xVrOyk07EmLsOKhOUMVBsqFUDtO6Q,565
160
160
  flyte/remote/_console.py,sha256=avmELJPx8nQMAVPrHlh6jEIRPjrMwFpdZjJsWOOa9rE,660
161
161
  flyte/remote/_data.py,sha256=qNZwB_cCXBojP6nSIwp8_x0idxhbPFXvmv0SoKwvENE,5791
162
- flyte/remote/_logs.py,sha256=aoC0TsLjfTzCGdF7Qv1ezYkLG2_rZibxNLuaVAX66as,4229
162
+ flyte/remote/_logs.py,sha256=xuRKYbgzfUWKqu_YHl2niCtTfPCvhBS9m1tC6OSlk0s,4241
163
163
  flyte/remote/_project.py,sha256=shAs9Hw0e5PAOciTAEOGVsdvo70PunxBXdOylHSyWw8,2834
164
- flyte/remote/_run.py,sha256=9Kehgp4nLb72jrJcLMTO9t2bF5iljX9j4-M7tfcmFug,28027
164
+ flyte/remote/_run.py,sha256=I4SveRxh6F5FO_LCv0W-4Vu4xAqmIjpZ1THJm5IEAao,27913
165
165
  flyte/remote/_secret.py,sha256=3fPx3RIuRJ0h15gj2CF9xKcAfTSCvhW3i0v4YqPMcCk,4394
166
- flyte/remote/_task.py,sha256=dXeKrQZQ_yGg16AThjlTDX1dGdZexHnA1ZrmlYrzRRU,7931
166
+ flyte/remote/_task.py,sha256=-cvXVrRB1Zjz-n4OTqFrzJxS7Exnuz7SY_Vk4tuPvxc,7916
167
167
  flyte/remote/_client/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
168
168
  flyte/remote/_client/_protocols.py,sha256=RVlVpX0jNg9kIf80lgtYimIWlqv30HOiFAdmDAROXCs,5481
169
- flyte/remote/_client/controlplane.py,sha256=upxOrJL8q-y1xNapBBTpfnkXAFvL1Nvomf-qQ3yAU7A,3022
169
+ flyte/remote/_client/controlplane.py,sha256=FsOfj4rO4MIMnYrpAT53F8q588VVf5t4sDuwoPuc840,3102
170
170
  flyte/remote/_client/auth/__init__.py,sha256=JQrIlwaqPlPzrxcOREhcfyFsC4LrfqL5TRz6A3JNSEA,413
171
- flyte/remote/_client/auth/_channel.py,sha256=wK_B-3TRYYMYYh_RB6Wsqydsl0xLv11zytQf8nHRCJ0,8122
171
+ flyte/remote/_client/auth/_auth_utils.py,sha256=Is6mr18J8AMQlbtu-Q63aMJgrZ27dXXNSig8KshR1_8,545
172
+ flyte/remote/_client/auth/_channel.py,sha256=LwFipIFIu7_oKqvpcRvApRNlXBNduCxdBw0o0bG-GMs,9213
172
173
  flyte/remote/_client/auth/_client_config.py,sha256=Elit5TCLjMQDiktiUmMKy2POWwwb5rKgIXfG3-rpfbs,3304
173
174
  flyte/remote/_client/auth/_default_html.py,sha256=XAdgP-25WySMODbusWOcQQPiXin1h-hfzmRJv_Dg3tE,1651
174
175
  flyte/remote/_client/auth/_keyring.py,sha256=BL-FzGe5ryuBRCwwpvvG8IzkYuXiJTU2J0P1l-Za5IM,5176
175
- flyte/remote/_client/auth/_token_client.py,sha256=RUmlxlVZjZlQBE-CM8y_je7SeZhA_Xn0ZI28oVgLLxE,10436
176
+ flyte/remote/_client/auth/_token_client.py,sha256=FxFaG_DcynQIZfEdAuJUsrcy0OnYbEr4gKLpu8WZHJo,10460
176
177
  flyte/remote/_client/auth/errors.py,sha256=ZYS9k4GX_McacKhxHKt5V2A4CWjLUq4RkBx_goDTdHY,390
177
178
  flyte/remote/_client/auth/_authenticators/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
178
179
  flyte/remote/_client/auth/_authenticators/base.py,sha256=7ygwRYIt_BoSNfUFuc0E7mS88xD9AkwIkSX2Cv8be34,16636
@@ -187,18 +188,19 @@ flyte/remote/_client/auth/_grpc_utils/default_metadata_interceptor.py,sha256=IoM
187
188
  flyte/report/__init__.py,sha256=yLbeUxYaVaDlgBod3Oh34zGBSotl1UlXq1vUkb9q7cs,152
188
189
  flyte/report/_report.py,sha256=36e0qikyY-Wsv4OzvTqkl23pk5ekrXIuhA4qsm_RRQs,5191
189
190
  flyte/report/_template.html,sha256=YehmLJG3QMYQ10UT1YZBu2ncVmAJ4iyqVp5hF3sXRAs,3458
190
- flyte/storage/__init__.py,sha256=HV83NpDRznq9WSRGoZet9uhDU9AqlqrcO3Ns1LewoO8,407
191
+ flyte/storage/__init__.py,sha256=kkOyqBXJVZSKt3ALitGn9zK6bkchy1-c3TOPB4QhPxk,499
192
+ flyte/storage/_config.py,sha256=xVibWJaioOnkeTb_M30azgiUe1jvmQaOWRZEkpdoTao,8680
191
193
  flyte/storage/_remote_fs.py,sha256=kM_iszbccjVD5VtVdgfkl1FHS8NPnY__JOo_CPQUE4c,1124
192
- flyte/storage/_storage.py,sha256=tHDIPI8xMiECHagXTu8f4gotkX5QrvzZHjCwTz-W5CA,9082
194
+ flyte/storage/_storage.py,sha256=mBy7MKII2M1UTVm_EUUDwVb7uT1_AOPzQr2wCJ-fgW0,9873
193
195
  flyte/storage/_utils.py,sha256=8oLCM-7D7JyJhzUi1_Q1NFx8GBUPRfou0T_5tPBmPbE,309
194
196
  flyte/types/__init__.py,sha256=xMIYOolT3Vq0qXy7unw90IVdYztdMDpKg0oG0XAPC9o,364
195
- flyte/types/_interface.py,sha256=1yWgZxFPvD92uCyQQdAx1zLG6ArL733jhUbpP4DPuqQ,962
197
+ flyte/types/_interface.py,sha256=mY7mb8v2hJPGk7AU99gdOWl4_jArA1VFtjYGlE31SK0,953
196
198
  flyte/types/_renderer.py,sha256=ygcCo5l60lHufyQISFddZfWwLlQ8kJAKxUT_XnR_6dY,4818
197
199
  flyte/types/_string_literals.py,sha256=NlG1xV8RSA-sZ-n-IFQCAsdB6jXJOAKkHWtnopxVVDk,4231
198
- flyte/types/_type_engine.py,sha256=I5rnjfcewwd29HQs8vPbrpuul29m4sS_PZhvQ7WS29c,93654
200
+ flyte/types/_type_engine.py,sha256=QxyoDWRG_whfLCz88YqEVVoTTnca0FZv9eHeLLT0_-s,93645
199
201
  flyte/types/_utils.py,sha256=pbts9E1_2LTdLygAY0UYTLYJ8AsN3BZyviSXvrtcutc,2626
200
- flyte-0.2.0b1.dist-info/METADATA,sha256=lsrVjg7B-38jwDkLS3JIWGuV00Q1o6JdvsuhQupVD2w,10279
201
- flyte-0.2.0b1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
202
- flyte-0.2.0b1.dist-info/entry_points.txt,sha256=xitFzPlyODadzpIwr-x1mFIpz0IFKpMUJl3dnmxgyPc,76
203
- flyte-0.2.0b1.dist-info/top_level.txt,sha256=7dkyFbikvA12LEZEqawx8oDG1CMod6hTliPj7iWzgYo,6
204
- flyte-0.2.0b1.dist-info/RECORD,,
202
+ flyte-0.2.0b3.dist-info/METADATA,sha256=Y0hyKBs_dOcuqW6I6JY2f0LhiT9yLt5MprRAUYpZH44,10271
203
+ flyte-0.2.0b3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
204
+ flyte-0.2.0b3.dist-info/entry_points.txt,sha256=xitFzPlyODadzpIwr-x1mFIpz0IFKpMUJl3dnmxgyPc,76
205
+ flyte-0.2.0b3.dist-info/top_level.txt,sha256=7dkyFbikvA12LEZEqawx8oDG1CMod6hTliPj7iWzgYo,6
206
+ flyte-0.2.0b3.dist-info/RECORD,,
@@ -1,39 +0,0 @@
1
- # This is a module that provides hashing utilities for Protobuf objects.
2
- import base64
3
- import hashlib
4
- import json
5
-
6
- from google.protobuf import json_format
7
- from google.protobuf.message import Message
8
-
9
-
10
- def compute_hash(pb: Message) -> bytes:
11
- """
12
- Computes a deterministic hash in bytes for the Protobuf object.
13
- """
14
- try:
15
- pb_dict = json_format.MessageToDict(pb)
16
- # json.dumps with sorted keys to ensure stability
17
- stable_json_str = json.dumps(
18
- pb_dict, sort_keys=True, separators=(",", ":")
19
- ) # separators to ensure no extra spaces
20
- except Exception as e:
21
- raise ValueError(f"Failed to marshal Protobuf object {pb} to JSON with error: {e}")
22
-
23
- try:
24
- # Deterministically hash the JSON object to a byte array. Using SHA-256 for hashing here,
25
- # assuming it provides a consistent hash output.
26
- hash_obj = hashlib.sha256(stable_json_str.encode("utf-8"))
27
- except Exception as e:
28
- raise ValueError(f"Failed to hash JSON for Protobuf object {pb} with error: {e}")
29
-
30
- # The digest is guaranteed to be 32 bytes long
31
- return hash_obj.digest()
32
-
33
-
34
- def compute_hash_string(pb: Message) -> str:
35
- """
36
- Computes a deterministic hash in base64 encoded string for the Protobuf object
37
- """
38
- hash_bytes = compute_hash(pb)
39
- return base64.b64encode(hash_bytes).decode("utf-8")