flyte 0.1.0__py3-none-any.whl → 0.2.0a0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of flyte might be problematic. Click here for more details.

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