flyte 0.1.0__py3-none-any.whl → 0.2.0b0__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 (205) hide show
  1. flyte/__init__.py +62 -2
  2. flyte/_api_commons.py +3 -0
  3. flyte/_bin/__init__.py +0 -0
  4. flyte/_bin/runtime.py +126 -0
  5. flyte/_build.py +25 -0
  6. flyte/_cache/__init__.py +12 -0
  7. flyte/_cache/cache.py +146 -0
  8. flyte/_cache/defaults.py +9 -0
  9. flyte/_cache/policy_function_body.py +42 -0
  10. flyte/_cli/__init__.py +0 -0
  11. flyte/_cli/_common.py +299 -0
  12. flyte/_cli/_create.py +42 -0
  13. flyte/_cli/_delete.py +23 -0
  14. flyte/_cli/_deploy.py +140 -0
  15. flyte/_cli/_get.py +235 -0
  16. flyte/_cli/_params.py +538 -0
  17. flyte/_cli/_run.py +174 -0
  18. flyte/_cli/main.py +98 -0
  19. flyte/_code_bundle/__init__.py +8 -0
  20. flyte/_code_bundle/_ignore.py +113 -0
  21. flyte/_code_bundle/_packaging.py +187 -0
  22. flyte/_code_bundle/_utils.py +339 -0
  23. flyte/_code_bundle/bundle.py +178 -0
  24. flyte/_context.py +146 -0
  25. flyte/_datastructures.py +342 -0
  26. flyte/_deploy.py +202 -0
  27. flyte/_doc.py +29 -0
  28. flyte/_docstring.py +32 -0
  29. flyte/_environment.py +43 -0
  30. flyte/_group.py +31 -0
  31. flyte/_hash.py +23 -0
  32. flyte/_image.py +757 -0
  33. flyte/_initialize.py +643 -0
  34. flyte/_interface.py +84 -0
  35. flyte/_internal/__init__.py +3 -0
  36. flyte/_internal/controllers/__init__.py +115 -0
  37. flyte/_internal/controllers/_local_controller.py +118 -0
  38. flyte/_internal/controllers/_trace.py +40 -0
  39. flyte/_internal/controllers/pbhash.py +39 -0
  40. flyte/_internal/controllers/remote/__init__.py +40 -0
  41. flyte/_internal/controllers/remote/_action.py +141 -0
  42. flyte/_internal/controllers/remote/_client.py +43 -0
  43. flyte/_internal/controllers/remote/_controller.py +361 -0
  44. flyte/_internal/controllers/remote/_core.py +402 -0
  45. flyte/_internal/controllers/remote/_informer.py +361 -0
  46. flyte/_internal/controllers/remote/_service_protocol.py +50 -0
  47. flyte/_internal/imagebuild/__init__.py +11 -0
  48. flyte/_internal/imagebuild/docker_builder.py +416 -0
  49. flyte/_internal/imagebuild/image_builder.py +241 -0
  50. flyte/_internal/imagebuild/remote_builder.py +0 -0
  51. flyte/_internal/resolvers/__init__.py +0 -0
  52. flyte/_internal/resolvers/_task_module.py +54 -0
  53. flyte/_internal/resolvers/common.py +31 -0
  54. flyte/_internal/resolvers/default.py +28 -0
  55. flyte/_internal/runtime/__init__.py +0 -0
  56. flyte/_internal/runtime/convert.py +205 -0
  57. flyte/_internal/runtime/entrypoints.py +135 -0
  58. flyte/_internal/runtime/io.py +136 -0
  59. flyte/_internal/runtime/resources_serde.py +138 -0
  60. flyte/_internal/runtime/task_serde.py +210 -0
  61. flyte/_internal/runtime/taskrunner.py +190 -0
  62. flyte/_internal/runtime/types_serde.py +54 -0
  63. flyte/_logging.py +124 -0
  64. flyte/_protos/__init__.py +0 -0
  65. flyte/_protos/common/authorization_pb2.py +66 -0
  66. flyte/_protos/common/authorization_pb2.pyi +108 -0
  67. flyte/_protos/common/authorization_pb2_grpc.py +4 -0
  68. flyte/_protos/common/identifier_pb2.py +71 -0
  69. flyte/_protos/common/identifier_pb2.pyi +82 -0
  70. flyte/_protos/common/identifier_pb2_grpc.py +4 -0
  71. flyte/_protos/common/identity_pb2.py +48 -0
  72. flyte/_protos/common/identity_pb2.pyi +72 -0
  73. flyte/_protos/common/identity_pb2_grpc.py +4 -0
  74. flyte/_protos/common/list_pb2.py +36 -0
  75. flyte/_protos/common/list_pb2.pyi +69 -0
  76. flyte/_protos/common/list_pb2_grpc.py +4 -0
  77. flyte/_protos/common/policy_pb2.py +37 -0
  78. flyte/_protos/common/policy_pb2.pyi +27 -0
  79. flyte/_protos/common/policy_pb2_grpc.py +4 -0
  80. flyte/_protos/common/role_pb2.py +37 -0
  81. flyte/_protos/common/role_pb2.pyi +53 -0
  82. flyte/_protos/common/role_pb2_grpc.py +4 -0
  83. flyte/_protos/common/runtime_version_pb2.py +28 -0
  84. flyte/_protos/common/runtime_version_pb2.pyi +24 -0
  85. flyte/_protos/common/runtime_version_pb2_grpc.py +4 -0
  86. flyte/_protos/logs/dataplane/payload_pb2.py +96 -0
  87. flyte/_protos/logs/dataplane/payload_pb2.pyi +168 -0
  88. flyte/_protos/logs/dataplane/payload_pb2_grpc.py +4 -0
  89. flyte/_protos/secret/definition_pb2.py +49 -0
  90. flyte/_protos/secret/definition_pb2.pyi +93 -0
  91. flyte/_protos/secret/definition_pb2_grpc.py +4 -0
  92. flyte/_protos/secret/payload_pb2.py +62 -0
  93. flyte/_protos/secret/payload_pb2.pyi +94 -0
  94. flyte/_protos/secret/payload_pb2_grpc.py +4 -0
  95. flyte/_protos/secret/secret_pb2.py +38 -0
  96. flyte/_protos/secret/secret_pb2.pyi +6 -0
  97. flyte/_protos/secret/secret_pb2_grpc.py +198 -0
  98. flyte/_protos/secret/secret_pb2_grpc_grpc.py +198 -0
  99. flyte/_protos/validate/validate/validate_pb2.py +76 -0
  100. flyte/_protos/workflow/node_execution_service_pb2.py +26 -0
  101. flyte/_protos/workflow/node_execution_service_pb2.pyi +4 -0
  102. flyte/_protos/workflow/node_execution_service_pb2_grpc.py +32 -0
  103. flyte/_protos/workflow/queue_service_pb2.py +106 -0
  104. flyte/_protos/workflow/queue_service_pb2.pyi +141 -0
  105. flyte/_protos/workflow/queue_service_pb2_grpc.py +172 -0
  106. flyte/_protos/workflow/run_definition_pb2.py +128 -0
  107. flyte/_protos/workflow/run_definition_pb2.pyi +310 -0
  108. flyte/_protos/workflow/run_definition_pb2_grpc.py +4 -0
  109. flyte/_protos/workflow/run_logs_service_pb2.py +41 -0
  110. flyte/_protos/workflow/run_logs_service_pb2.pyi +28 -0
  111. flyte/_protos/workflow/run_logs_service_pb2_grpc.py +69 -0
  112. flyte/_protos/workflow/run_service_pb2.py +133 -0
  113. flyte/_protos/workflow/run_service_pb2.pyi +175 -0
  114. flyte/_protos/workflow/run_service_pb2_grpc.py +412 -0
  115. flyte/_protos/workflow/state_service_pb2.py +58 -0
  116. flyte/_protos/workflow/state_service_pb2.pyi +71 -0
  117. flyte/_protos/workflow/state_service_pb2_grpc.py +138 -0
  118. flyte/_protos/workflow/task_definition_pb2.py +72 -0
  119. flyte/_protos/workflow/task_definition_pb2.pyi +65 -0
  120. flyte/_protos/workflow/task_definition_pb2_grpc.py +4 -0
  121. flyte/_protos/workflow/task_service_pb2.py +44 -0
  122. flyte/_protos/workflow/task_service_pb2.pyi +31 -0
  123. flyte/_protos/workflow/task_service_pb2_grpc.py +104 -0
  124. flyte/_resources.py +226 -0
  125. flyte/_retry.py +32 -0
  126. flyte/_reusable_environment.py +25 -0
  127. flyte/_run.py +410 -0
  128. flyte/_secret.py +61 -0
  129. flyte/_task.py +367 -0
  130. flyte/_task_environment.py +200 -0
  131. flyte/_timeout.py +47 -0
  132. flyte/_tools.py +27 -0
  133. flyte/_trace.py +128 -0
  134. flyte/_utils/__init__.py +20 -0
  135. flyte/_utils/asyn.py +119 -0
  136. flyte/_utils/coro_management.py +25 -0
  137. flyte/_utils/file_handling.py +72 -0
  138. flyte/_utils/helpers.py +108 -0
  139. flyte/_utils/lazy_module.py +54 -0
  140. flyte/_utils/uv_script_parser.py +49 -0
  141. flyte/_version.py +21 -0
  142. flyte/config/__init__.py +168 -0
  143. flyte/config/_config.py +196 -0
  144. flyte/config/_internal.py +64 -0
  145. flyte/connectors/__init__.py +0 -0
  146. flyte/errors.py +143 -0
  147. flyte/extras/__init__.py +5 -0
  148. flyte/extras/_container.py +273 -0
  149. flyte/io/__init__.py +11 -0
  150. flyte/io/_dataframe.py +0 -0
  151. flyte/io/_dir.py +448 -0
  152. flyte/io/_file.py +468 -0
  153. flyte/io/pickle/__init__.py +0 -0
  154. flyte/io/pickle/transformer.py +117 -0
  155. flyte/io/structured_dataset/__init__.py +129 -0
  156. flyte/io/structured_dataset/basic_dfs.py +219 -0
  157. flyte/io/structured_dataset/structured_dataset.py +1061 -0
  158. flyte/remote/__init__.py +25 -0
  159. flyte/remote/_client/__init__.py +0 -0
  160. flyte/remote/_client/_protocols.py +131 -0
  161. flyte/remote/_client/auth/__init__.py +12 -0
  162. flyte/remote/_client/auth/_authenticators/__init__.py +0 -0
  163. flyte/remote/_client/auth/_authenticators/base.py +397 -0
  164. flyte/remote/_client/auth/_authenticators/client_credentials.py +73 -0
  165. flyte/remote/_client/auth/_authenticators/device_code.py +118 -0
  166. flyte/remote/_client/auth/_authenticators/external_command.py +79 -0
  167. flyte/remote/_client/auth/_authenticators/factory.py +200 -0
  168. flyte/remote/_client/auth/_authenticators/pkce.py +516 -0
  169. flyte/remote/_client/auth/_channel.py +184 -0
  170. flyte/remote/_client/auth/_client_config.py +83 -0
  171. flyte/remote/_client/auth/_default_html.py +32 -0
  172. flyte/remote/_client/auth/_grpc_utils/__init__.py +0 -0
  173. flyte/remote/_client/auth/_grpc_utils/auth_interceptor.py +288 -0
  174. flyte/remote/_client/auth/_grpc_utils/default_metadata_interceptor.py +151 -0
  175. flyte/remote/_client/auth/_keyring.py +143 -0
  176. flyte/remote/_client/auth/_token_client.py +260 -0
  177. flyte/remote/_client/auth/errors.py +16 -0
  178. flyte/remote/_client/controlplane.py +95 -0
  179. flyte/remote/_console.py +18 -0
  180. flyte/remote/_data.py +155 -0
  181. flyte/remote/_logs.py +116 -0
  182. flyte/remote/_project.py +86 -0
  183. flyte/remote/_run.py +873 -0
  184. flyte/remote/_secret.py +132 -0
  185. flyte/remote/_task.py +227 -0
  186. flyte/report/__init__.py +3 -0
  187. flyte/report/_report.py +178 -0
  188. flyte/report/_template.html +124 -0
  189. flyte/storage/__init__.py +24 -0
  190. flyte/storage/_remote_fs.py +34 -0
  191. flyte/storage/_storage.py +251 -0
  192. flyte/storage/_utils.py +5 -0
  193. flyte/types/__init__.py +13 -0
  194. flyte/types/_interface.py +25 -0
  195. flyte/types/_renderer.py +162 -0
  196. flyte/types/_string_literals.py +120 -0
  197. flyte/types/_type_engine.py +2211 -0
  198. flyte/types/_utils.py +80 -0
  199. flyte-0.2.0b0.dist-info/METADATA +179 -0
  200. flyte-0.2.0b0.dist-info/RECORD +204 -0
  201. {flyte-0.1.0.dist-info → flyte-0.2.0b0.dist-info}/WHEEL +2 -1
  202. flyte-0.2.0b0.dist-info/entry_points.txt +3 -0
  203. flyte-0.2.0b0.dist-info/top_level.txt +1 -0
  204. flyte-0.1.0.dist-info/METADATA +0 -6
  205. flyte-0.1.0.dist-info/RECORD +0 -5
flyte/_cli/_get.py ADDED
@@ -0,0 +1,235 @@
1
+ import asyncio
2
+ from typing import Tuple, Union
3
+
4
+ import rich_click as click
5
+ from rich.console import Console
6
+ from rich.pretty import pretty_repr
7
+
8
+ from . import _common as common
9
+
10
+
11
+ @click.group(name="get")
12
+ def get():
13
+ """
14
+ Get the value of a task or environment.
15
+ """
16
+
17
+
18
+ @get.command()
19
+ @click.argument("name", type=str, required=False)
20
+ @click.pass_obj
21
+ def project(cfg: common.CLIConfig, name: str | None = None):
22
+ """
23
+ Get the current project.
24
+ """
25
+ from flyte.remote import Project
26
+
27
+ print(cfg)
28
+ cfg.init()
29
+
30
+ console = Console()
31
+ if name:
32
+ console.print(pretty_repr(Project.get(name)))
33
+ else:
34
+ console.print(common.get_table("Projects", Project.listall()))
35
+
36
+
37
+ @get.command(cls=common.CommandBase)
38
+ @click.argument("name", type=str, required=False)
39
+ @click.pass_obj
40
+ def run(cfg: common.CLIConfig, name: str | None = None, project: str | None = None, domain: str | None = None):
41
+ """
42
+ Get the current run.
43
+ """
44
+ from flyte.remote import Run, RunDetails
45
+
46
+ cfg.init(project=project, domain=domain)
47
+
48
+ console = Console()
49
+ if name:
50
+ details = RunDetails.get(name=name)
51
+ console.print(pretty_repr(details))
52
+ else:
53
+ console.print(common.get_table("Runs", Run.listall()))
54
+
55
+
56
+ @get.command(cls=common.CommandBase)
57
+ @click.argument("name", type=str, required=False)
58
+ @click.argument("version", type=str, required=False)
59
+ @click.pass_obj
60
+ def task(
61
+ cfg: common.CLIConfig,
62
+ name: str | None = None,
63
+ version: str | None = None,
64
+ project: str | None = None,
65
+ domain: str | None = None,
66
+ ):
67
+ """
68
+ Get the current task.
69
+ """
70
+ from flyte.remote import Task
71
+
72
+ cfg.init(project=project, domain=domain)
73
+
74
+ console = Console()
75
+ if name:
76
+ if not version:
77
+ raise click.BadParameter("Version is required when getting a task by name.")
78
+ v = Task.get(name=name, version=version)
79
+ if v is None:
80
+ raise click.BadParameter(f"Task {name} not found.")
81
+ t = v.fetch(v)
82
+ console.print(pretty_repr(t))
83
+ else:
84
+ raise click.BadParameter("Task listing is not supported yet, please provide a name.")
85
+ # console.print(common.get_table("Tasks", Task.listall()))
86
+
87
+
88
+ @get.command(cls=common.CommandBase)
89
+ @click.argument("run_name", type=str, required=True)
90
+ @click.argument("action_name", type=str, required=False)
91
+ @click.pass_obj
92
+ def action(
93
+ cfg: common.CLIConfig,
94
+ run_name: str,
95
+ action_name: str | None = None,
96
+ project: str | None = None,
97
+ domain: str | None = None,
98
+ ):
99
+ """
100
+ Get all actions for a run or details for a specific action.
101
+ """
102
+ import flyte.remote as remote
103
+
104
+ cfg.init(project=project, domain=domain)
105
+
106
+ console = Console()
107
+ if action_name:
108
+ console.print(pretty_repr(remote.Action.get(run_name=run_name, name=action_name)))
109
+ else:
110
+ # List all actions for the run
111
+ console.print(common.get_table(f"Actions for {run_name}", remote.Action.listall(for_run_name=run_name)))
112
+
113
+
114
+ @get.command(cls=common.CommandBase)
115
+ @click.argument("run_name", type=str, required=False)
116
+ @click.argument("action_name", type=str, required=False)
117
+ @click.option("--lines", "-l", type=int, default=30, help="Number of lines to show")
118
+ @click.option("--show-ts", is_flag=True, help="Show timestamps")
119
+ @click.option(
120
+ "--follow",
121
+ "-f",
122
+ is_flag=True,
123
+ default=False,
124
+ help="Follow the logs (like tail -f), will open a panel with logs scrolling.",
125
+ )
126
+ @click.pass_obj
127
+ def logs(
128
+ cfg: common.CLIConfig,
129
+ run_name: str,
130
+ action_name: str | None = None,
131
+ project: str | None = None,
132
+ domain: str | None = None,
133
+ lines: int = 30,
134
+ show_ts: bool = False,
135
+ follow: bool = True,
136
+ ):
137
+ """
138
+ Get the current run.
139
+ """
140
+ import flyte.remote as remote
141
+
142
+ cfg.init(project=project, domain=domain)
143
+
144
+ async def _run_log_view(_obj):
145
+ task = asyncio.create_task(_obj.show_logs(max_lines=lines, show_ts=show_ts, raw=not follow))
146
+ try:
147
+ await task
148
+ except KeyboardInterrupt:
149
+ task.cancel()
150
+
151
+ if action_name:
152
+ obj = remote.Action.get(run_name=run_name, name=action_name)
153
+ else:
154
+ obj = remote.Run.get(run_name)
155
+ asyncio.run(_run_log_view(obj))
156
+
157
+
158
+ @get.command(cls=common.CommandBase)
159
+ @click.argument("name", type=str, required=False)
160
+ @click.pass_obj
161
+ def secret(
162
+ cfg: common.CLIConfig,
163
+ name: str | None = None,
164
+ project: str | None = None,
165
+ domain: str | None = None,
166
+ ):
167
+ """
168
+ Get the current secret.
169
+ """
170
+ import flyte.remote as remote
171
+
172
+ cfg.init(project=project, domain=domain)
173
+
174
+ console = Console()
175
+ if name:
176
+ console.print(pretty_repr(remote.Secret.get(name)))
177
+ else:
178
+ console.print(common.get_table("Secrets", remote.Secret.listall()))
179
+
180
+
181
+ @get.command(cls=common.CommandBase)
182
+ @click.argument("run_name", type=str, required=True)
183
+ @click.argument("action_name", type=str, required=False)
184
+ @click.option("--inputs-only", "-i", is_flag=True, help="Show only inputs")
185
+ @click.option("--outputs-only", "-o", is_flag=True, help="Show only outputs")
186
+ @click.pass_obj
187
+ def io(
188
+ cfg: common.CLIConfig,
189
+ run_name: str,
190
+ action_name: str | None = None,
191
+ project: str | None = None,
192
+ domain: str | None = None,
193
+ inputs_only: bool = False,
194
+ outputs_only: bool = False,
195
+ ):
196
+ """
197
+ Get the inputs and outputs of a run or action.
198
+ """
199
+ if inputs_only and outputs_only:
200
+ raise click.BadParameter("Cannot use both --inputs-only and --outputs-only")
201
+
202
+ import flyte.remote as remote
203
+
204
+ cfg.init(project=project, domain=domain)
205
+ console = Console()
206
+ if action_name:
207
+ obj = remote.ActionDetails.get(run_name=run_name, name=action_name)
208
+ else:
209
+ obj = remote.RunDetails.get(run_name)
210
+
211
+ async def _get_io(
212
+ details: Union[remote.RunDetails, remote.ActionDetails],
213
+ ) -> Tuple[remote.ActionInputs | None, remote.ActionOutputs | None | str]:
214
+ if inputs_only or outputs_only:
215
+ if inputs_only:
216
+ return await details.inputs(), None
217
+ elif outputs_only:
218
+ return None, await details.outputs()
219
+ inputs = await details.inputs()
220
+ outputs: remote.ActionOutputs | None | str = None
221
+ try:
222
+ outputs = await details.outputs()
223
+ except Exception:
224
+ # If the outputs are not available, we can still show the inputs
225
+ outputs = "[red]not yet available[/red]"
226
+ return inputs, outputs
227
+
228
+ inputs, outputs = asyncio.run(_get_io(obj))
229
+ # Show inputs and outputs side by side
230
+ console.print(
231
+ common.get_panel(
232
+ "Inputs & Outputs",
233
+ f"[green bold]Inputs[/green bold]\n{inputs}\n\n[blue bold]Outputs[/blue bold]\n{outputs}",
234
+ )
235
+ )