flyte 0.0.1b0__py3-none-any.whl → 2.0.0b46__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.
Files changed (455) hide show
  1. flyte/__init__.py +83 -30
  2. flyte/_bin/connect.py +61 -0
  3. flyte/_bin/debug.py +38 -0
  4. flyte/_bin/runtime.py +87 -19
  5. flyte/_bin/serve.py +351 -0
  6. flyte/_build.py +3 -2
  7. flyte/_cache/cache.py +6 -5
  8. flyte/_cache/local_cache.py +216 -0
  9. flyte/_code_bundle/_ignore.py +31 -5
  10. flyte/_code_bundle/_packaging.py +42 -11
  11. flyte/_code_bundle/_utils.py +57 -34
  12. flyte/_code_bundle/bundle.py +130 -27
  13. flyte/_constants.py +1 -0
  14. flyte/_context.py +21 -5
  15. flyte/_custom_context.py +73 -0
  16. flyte/_debug/constants.py +37 -0
  17. flyte/_debug/utils.py +17 -0
  18. flyte/_debug/vscode.py +315 -0
  19. flyte/_deploy.py +396 -75
  20. flyte/_deployer.py +109 -0
  21. flyte/_environment.py +94 -11
  22. flyte/_excepthook.py +37 -0
  23. flyte/_group.py +2 -1
  24. flyte/_hash.py +1 -16
  25. flyte/_image.py +544 -234
  26. flyte/_initialize.py +443 -294
  27. flyte/_interface.py +40 -5
  28. flyte/_internal/controllers/__init__.py +22 -8
  29. flyte/_internal/controllers/_local_controller.py +159 -35
  30. flyte/_internal/controllers/_trace.py +18 -10
  31. flyte/_internal/controllers/remote/__init__.py +38 -9
  32. flyte/_internal/controllers/remote/_action.py +82 -12
  33. flyte/_internal/controllers/remote/_client.py +6 -2
  34. flyte/_internal/controllers/remote/_controller.py +290 -64
  35. flyte/_internal/controllers/remote/_core.py +155 -95
  36. flyte/_internal/controllers/remote/_informer.py +40 -20
  37. flyte/_internal/controllers/remote/_service_protocol.py +2 -2
  38. flyte/_internal/imagebuild/__init__.py +2 -10
  39. flyte/_internal/imagebuild/docker_builder.py +391 -84
  40. flyte/_internal/imagebuild/image_builder.py +111 -55
  41. flyte/_internal/imagebuild/remote_builder.py +409 -0
  42. flyte/_internal/imagebuild/utils.py +79 -0
  43. flyte/_internal/resolvers/_app_env_module.py +92 -0
  44. flyte/_internal/resolvers/_task_module.py +5 -38
  45. flyte/_internal/resolvers/app_env.py +26 -0
  46. flyte/_internal/resolvers/common.py +8 -1
  47. flyte/_internal/resolvers/default.py +2 -2
  48. flyte/_internal/runtime/convert.py +322 -33
  49. flyte/_internal/runtime/entrypoints.py +106 -18
  50. flyte/_internal/runtime/io.py +71 -23
  51. flyte/_internal/runtime/resources_serde.py +21 -7
  52. flyte/_internal/runtime/reuse.py +125 -0
  53. flyte/_internal/runtime/rusty.py +196 -0
  54. flyte/_internal/runtime/task_serde.py +239 -66
  55. flyte/_internal/runtime/taskrunner.py +48 -8
  56. flyte/_internal/runtime/trigger_serde.py +162 -0
  57. flyte/_internal/runtime/types_serde.py +7 -16
  58. flyte/_keyring/file.py +115 -0
  59. flyte/_link.py +30 -0
  60. flyte/_logging.py +241 -42
  61. flyte/_map.py +312 -0
  62. flyte/_metrics.py +59 -0
  63. flyte/_module.py +74 -0
  64. flyte/_pod.py +30 -0
  65. flyte/_resources.py +296 -33
  66. flyte/_retry.py +1 -7
  67. flyte/_reusable_environment.py +72 -7
  68. flyte/_run.py +461 -132
  69. flyte/_secret.py +47 -11
  70. flyte/_serve.py +333 -0
  71. flyte/_task.py +245 -56
  72. flyte/_task_environment.py +219 -97
  73. flyte/_task_plugins.py +47 -0
  74. flyte/_tools.py +8 -8
  75. flyte/_trace.py +15 -24
  76. flyte/_trigger.py +1027 -0
  77. flyte/_utils/__init__.py +12 -1
  78. flyte/_utils/asyn.py +3 -1
  79. flyte/_utils/async_cache.py +139 -0
  80. flyte/_utils/coro_management.py +5 -4
  81. flyte/_utils/description_parser.py +19 -0
  82. flyte/_utils/docker_credentials.py +173 -0
  83. flyte/_utils/helpers.py +45 -19
  84. flyte/_utils/module_loader.py +123 -0
  85. flyte/_utils/org_discovery.py +57 -0
  86. flyte/_utils/uv_script_parser.py +8 -1
  87. flyte/_version.py +16 -3
  88. flyte/app/__init__.py +27 -0
  89. flyte/app/_app_environment.py +362 -0
  90. flyte/app/_connector_environment.py +40 -0
  91. flyte/app/_deploy.py +130 -0
  92. flyte/app/_parameter.py +343 -0
  93. flyte/app/_runtime/__init__.py +3 -0
  94. flyte/app/_runtime/app_serde.py +383 -0
  95. flyte/app/_types.py +113 -0
  96. flyte/app/extras/__init__.py +9 -0
  97. flyte/app/extras/_auth_middleware.py +217 -0
  98. flyte/app/extras/_fastapi.py +93 -0
  99. flyte/app/extras/_model_loader/__init__.py +3 -0
  100. flyte/app/extras/_model_loader/config.py +7 -0
  101. flyte/app/extras/_model_loader/loader.py +288 -0
  102. flyte/cli/__init__.py +12 -0
  103. flyte/cli/_abort.py +28 -0
  104. flyte/cli/_build.py +114 -0
  105. flyte/cli/_common.py +493 -0
  106. flyte/cli/_create.py +371 -0
  107. flyte/cli/_delete.py +45 -0
  108. flyte/cli/_deploy.py +401 -0
  109. flyte/cli/_gen.py +316 -0
  110. flyte/cli/_get.py +446 -0
  111. flyte/cli/_option.py +33 -0
  112. {union/_cli → flyte/cli}/_params.py +152 -153
  113. flyte/cli/_plugins.py +209 -0
  114. flyte/cli/_prefetch.py +292 -0
  115. flyte/cli/_run.py +690 -0
  116. flyte/cli/_serve.py +338 -0
  117. flyte/cli/_update.py +86 -0
  118. flyte/cli/_user.py +20 -0
  119. flyte/cli/main.py +246 -0
  120. flyte/config/__init__.py +3 -0
  121. flyte/config/_config.py +248 -0
  122. flyte/config/_internal.py +73 -0
  123. flyte/config/_reader.py +225 -0
  124. flyte/connectors/__init__.py +11 -0
  125. flyte/connectors/_connector.py +330 -0
  126. flyte/connectors/_server.py +194 -0
  127. flyte/connectors/utils.py +159 -0
  128. flyte/errors.py +134 -2
  129. flyte/extend.py +24 -0
  130. flyte/extras/_container.py +69 -56
  131. flyte/git/__init__.py +3 -0
  132. flyte/git/_config.py +279 -0
  133. flyte/io/__init__.py +8 -1
  134. flyte/io/{structured_dataset → _dataframe}/__init__.py +32 -30
  135. flyte/io/{structured_dataset → _dataframe}/basic_dfs.py +75 -68
  136. flyte/io/{structured_dataset/structured_dataset.py → _dataframe/dataframe.py} +207 -242
  137. flyte/io/_dir.py +575 -113
  138. flyte/io/_file.py +587 -141
  139. flyte/io/_hashing_io.py +342 -0
  140. flyte/io/extend.py +7 -0
  141. flyte/models.py +635 -0
  142. flyte/prefetch/__init__.py +22 -0
  143. flyte/prefetch/_hf_model.py +563 -0
  144. flyte/remote/__init__.py +14 -3
  145. flyte/remote/_action.py +879 -0
  146. flyte/remote/_app.py +346 -0
  147. flyte/remote/_auth_metadata.py +42 -0
  148. flyte/remote/_client/_protocols.py +62 -4
  149. flyte/remote/_client/auth/_auth_utils.py +19 -0
  150. flyte/remote/_client/auth/_authenticators/base.py +8 -2
  151. flyte/remote/_client/auth/_authenticators/device_code.py +4 -5
  152. flyte/remote/_client/auth/_authenticators/factory.py +4 -0
  153. flyte/remote/_client/auth/_authenticators/passthrough.py +79 -0
  154. flyte/remote/_client/auth/_authenticators/pkce.py +17 -18
  155. flyte/remote/_client/auth/_channel.py +47 -18
  156. flyte/remote/_client/auth/_client_config.py +5 -3
  157. flyte/remote/_client/auth/_keyring.py +15 -2
  158. flyte/remote/_client/auth/_token_client.py +3 -3
  159. flyte/remote/_client/controlplane.py +206 -18
  160. flyte/remote/_common.py +66 -0
  161. flyte/remote/_data.py +107 -22
  162. flyte/remote/_logs.py +116 -33
  163. flyte/remote/_project.py +21 -19
  164. flyte/remote/_run.py +164 -631
  165. flyte/remote/_secret.py +72 -29
  166. flyte/remote/_task.py +387 -46
  167. flyte/remote/_trigger.py +368 -0
  168. flyte/remote/_user.py +43 -0
  169. flyte/report/_report.py +10 -6
  170. flyte/storage/__init__.py +13 -1
  171. flyte/storage/_config.py +237 -0
  172. flyte/storage/_parallel_reader.py +289 -0
  173. flyte/storage/_storage.py +268 -59
  174. flyte/syncify/__init__.py +56 -0
  175. flyte/syncify/_api.py +414 -0
  176. flyte/types/__init__.py +39 -0
  177. flyte/types/_interface.py +22 -7
  178. flyte/{io/pickle/transformer.py → types/_pickle.py} +37 -9
  179. flyte/types/_string_literals.py +8 -9
  180. flyte/types/_type_engine.py +230 -129
  181. flyte/types/_utils.py +1 -1
  182. flyte-2.0.0b46.data/scripts/debug.py +38 -0
  183. flyte-2.0.0b46.data/scripts/runtime.py +194 -0
  184. flyte-2.0.0b46.dist-info/METADATA +352 -0
  185. flyte-2.0.0b46.dist-info/RECORD +221 -0
  186. flyte-2.0.0b46.dist-info/entry_points.txt +8 -0
  187. flyte-2.0.0b46.dist-info/licenses/LICENSE +201 -0
  188. flyte/_api_commons.py +0 -3
  189. flyte/_cli/_common.py +0 -287
  190. flyte/_cli/_create.py +0 -42
  191. flyte/_cli/_delete.py +0 -23
  192. flyte/_cli/_deploy.py +0 -140
  193. flyte/_cli/_get.py +0 -235
  194. flyte/_cli/_run.py +0 -152
  195. flyte/_cli/main.py +0 -72
  196. flyte/_datastructures.py +0 -342
  197. flyte/_internal/controllers/pbhash.py +0 -39
  198. flyte/_protos/common/authorization_pb2.py +0 -66
  199. flyte/_protos/common/authorization_pb2.pyi +0 -108
  200. flyte/_protos/common/authorization_pb2_grpc.py +0 -4
  201. flyte/_protos/common/identifier_pb2.py +0 -71
  202. flyte/_protos/common/identifier_pb2.pyi +0 -82
  203. flyte/_protos/common/identifier_pb2_grpc.py +0 -4
  204. flyte/_protos/common/identity_pb2.py +0 -48
  205. flyte/_protos/common/identity_pb2.pyi +0 -72
  206. flyte/_protos/common/identity_pb2_grpc.py +0 -4
  207. flyte/_protos/common/list_pb2.py +0 -36
  208. flyte/_protos/common/list_pb2.pyi +0 -69
  209. flyte/_protos/common/list_pb2_grpc.py +0 -4
  210. flyte/_protos/common/policy_pb2.py +0 -37
  211. flyte/_protos/common/policy_pb2.pyi +0 -27
  212. flyte/_protos/common/policy_pb2_grpc.py +0 -4
  213. flyte/_protos/common/role_pb2.py +0 -37
  214. flyte/_protos/common/role_pb2.pyi +0 -53
  215. flyte/_protos/common/role_pb2_grpc.py +0 -4
  216. flyte/_protos/common/runtime_version_pb2.py +0 -28
  217. flyte/_protos/common/runtime_version_pb2.pyi +0 -24
  218. flyte/_protos/common/runtime_version_pb2_grpc.py +0 -4
  219. flyte/_protos/logs/dataplane/payload_pb2.py +0 -96
  220. flyte/_protos/logs/dataplane/payload_pb2.pyi +0 -168
  221. flyte/_protos/logs/dataplane/payload_pb2_grpc.py +0 -4
  222. flyte/_protos/secret/definition_pb2.py +0 -49
  223. flyte/_protos/secret/definition_pb2.pyi +0 -93
  224. flyte/_protos/secret/definition_pb2_grpc.py +0 -4
  225. flyte/_protos/secret/payload_pb2.py +0 -62
  226. flyte/_protos/secret/payload_pb2.pyi +0 -94
  227. flyte/_protos/secret/payload_pb2_grpc.py +0 -4
  228. flyte/_protos/secret/secret_pb2.py +0 -38
  229. flyte/_protos/secret/secret_pb2.pyi +0 -6
  230. flyte/_protos/secret/secret_pb2_grpc.py +0 -198
  231. flyte/_protos/secret/secret_pb2_grpc_grpc.py +0 -198
  232. flyte/_protos/validate/validate/validate_pb2.py +0 -76
  233. flyte/_protos/workflow/node_execution_service_pb2.py +0 -26
  234. flyte/_protos/workflow/node_execution_service_pb2.pyi +0 -4
  235. flyte/_protos/workflow/node_execution_service_pb2_grpc.py +0 -32
  236. flyte/_protos/workflow/queue_service_pb2.py +0 -106
  237. flyte/_protos/workflow/queue_service_pb2.pyi +0 -141
  238. flyte/_protos/workflow/queue_service_pb2_grpc.py +0 -172
  239. flyte/_protos/workflow/run_definition_pb2.py +0 -128
  240. flyte/_protos/workflow/run_definition_pb2.pyi +0 -310
  241. flyte/_protos/workflow/run_definition_pb2_grpc.py +0 -4
  242. flyte/_protos/workflow/run_logs_service_pb2.py +0 -41
  243. flyte/_protos/workflow/run_logs_service_pb2.pyi +0 -28
  244. flyte/_protos/workflow/run_logs_service_pb2_grpc.py +0 -69
  245. flyte/_protos/workflow/run_service_pb2.py +0 -133
  246. flyte/_protos/workflow/run_service_pb2.pyi +0 -175
  247. flyte/_protos/workflow/run_service_pb2_grpc.py +0 -412
  248. flyte/_protos/workflow/state_service_pb2.py +0 -58
  249. flyte/_protos/workflow/state_service_pb2.pyi +0 -71
  250. flyte/_protos/workflow/state_service_pb2_grpc.py +0 -138
  251. flyte/_protos/workflow/task_definition_pb2.py +0 -72
  252. flyte/_protos/workflow/task_definition_pb2.pyi +0 -65
  253. flyte/_protos/workflow/task_definition_pb2_grpc.py +0 -4
  254. flyte/_protos/workflow/task_service_pb2.py +0 -44
  255. flyte/_protos/workflow/task_service_pb2.pyi +0 -31
  256. flyte/_protos/workflow/task_service_pb2_grpc.py +0 -104
  257. flyte/io/_dataframe.py +0 -0
  258. flyte/io/pickle/__init__.py +0 -0
  259. flyte/remote/_console.py +0 -18
  260. flyte-0.0.1b0.dist-info/METADATA +0 -179
  261. flyte-0.0.1b0.dist-info/RECORD +0 -390
  262. flyte-0.0.1b0.dist-info/entry_points.txt +0 -3
  263. union/__init__.py +0 -54
  264. union/_api_commons.py +0 -3
  265. union/_bin/__init__.py +0 -0
  266. union/_bin/runtime.py +0 -113
  267. union/_build.py +0 -25
  268. union/_cache/__init__.py +0 -12
  269. union/_cache/cache.py +0 -141
  270. union/_cache/defaults.py +0 -9
  271. union/_cache/policy_function_body.py +0 -42
  272. union/_cli/__init__.py +0 -0
  273. union/_cli/_common.py +0 -263
  274. union/_cli/_create.py +0 -40
  275. union/_cli/_delete.py +0 -23
  276. union/_cli/_deploy.py +0 -120
  277. union/_cli/_get.py +0 -162
  278. union/_cli/_run.py +0 -150
  279. union/_cli/main.py +0 -72
  280. union/_code_bundle/__init__.py +0 -8
  281. union/_code_bundle/_ignore.py +0 -113
  282. union/_code_bundle/_packaging.py +0 -187
  283. union/_code_bundle/_utils.py +0 -342
  284. union/_code_bundle/bundle.py +0 -176
  285. union/_context.py +0 -146
  286. union/_datastructures.py +0 -295
  287. union/_deploy.py +0 -185
  288. union/_doc.py +0 -29
  289. union/_docstring.py +0 -26
  290. union/_environment.py +0 -43
  291. union/_group.py +0 -31
  292. union/_hash.py +0 -23
  293. union/_image.py +0 -760
  294. union/_initialize.py +0 -585
  295. union/_interface.py +0 -84
  296. union/_internal/__init__.py +0 -3
  297. union/_internal/controllers/__init__.py +0 -77
  298. union/_internal/controllers/_local_controller.py +0 -77
  299. union/_internal/controllers/pbhash.py +0 -39
  300. union/_internal/controllers/remote/__init__.py +0 -40
  301. union/_internal/controllers/remote/_action.py +0 -131
  302. union/_internal/controllers/remote/_client.py +0 -43
  303. union/_internal/controllers/remote/_controller.py +0 -169
  304. union/_internal/controllers/remote/_core.py +0 -341
  305. union/_internal/controllers/remote/_informer.py +0 -260
  306. union/_internal/controllers/remote/_service_protocol.py +0 -44
  307. union/_internal/imagebuild/__init__.py +0 -11
  308. union/_internal/imagebuild/docker_builder.py +0 -416
  309. union/_internal/imagebuild/image_builder.py +0 -243
  310. union/_internal/imagebuild/remote_builder.py +0 -0
  311. union/_internal/resolvers/__init__.py +0 -0
  312. union/_internal/resolvers/_task_module.py +0 -31
  313. union/_internal/resolvers/common.py +0 -24
  314. union/_internal/resolvers/default.py +0 -27
  315. union/_internal/runtime/__init__.py +0 -0
  316. union/_internal/runtime/convert.py +0 -163
  317. union/_internal/runtime/entrypoints.py +0 -121
  318. union/_internal/runtime/io.py +0 -136
  319. union/_internal/runtime/resources_serde.py +0 -134
  320. union/_internal/runtime/task_serde.py +0 -202
  321. union/_internal/runtime/taskrunner.py +0 -179
  322. union/_internal/runtime/types_serde.py +0 -53
  323. union/_logging.py +0 -124
  324. union/_protos/__init__.py +0 -0
  325. union/_protos/common/authorization_pb2.py +0 -66
  326. union/_protos/common/authorization_pb2.pyi +0 -106
  327. union/_protos/common/authorization_pb2_grpc.py +0 -4
  328. union/_protos/common/identifier_pb2.py +0 -71
  329. union/_protos/common/identifier_pb2.pyi +0 -82
  330. union/_protos/common/identifier_pb2_grpc.py +0 -4
  331. union/_protos/common/identity_pb2.py +0 -48
  332. union/_protos/common/identity_pb2.pyi +0 -72
  333. union/_protos/common/identity_pb2_grpc.py +0 -4
  334. union/_protos/common/list_pb2.py +0 -36
  335. union/_protos/common/list_pb2.pyi +0 -69
  336. union/_protos/common/list_pb2_grpc.py +0 -4
  337. union/_protos/common/policy_pb2.py +0 -37
  338. union/_protos/common/policy_pb2.pyi +0 -27
  339. union/_protos/common/policy_pb2_grpc.py +0 -4
  340. union/_protos/common/role_pb2.py +0 -37
  341. union/_protos/common/role_pb2.pyi +0 -51
  342. union/_protos/common/role_pb2_grpc.py +0 -4
  343. union/_protos/common/runtime_version_pb2.py +0 -28
  344. union/_protos/common/runtime_version_pb2.pyi +0 -24
  345. union/_protos/common/runtime_version_pb2_grpc.py +0 -4
  346. union/_protos/logs/dataplane/payload_pb2.py +0 -96
  347. union/_protos/logs/dataplane/payload_pb2.pyi +0 -168
  348. union/_protos/logs/dataplane/payload_pb2_grpc.py +0 -4
  349. union/_protos/secret/definition_pb2.py +0 -49
  350. union/_protos/secret/definition_pb2.pyi +0 -93
  351. union/_protos/secret/definition_pb2_grpc.py +0 -4
  352. union/_protos/secret/payload_pb2.py +0 -62
  353. union/_protos/secret/payload_pb2.pyi +0 -94
  354. union/_protos/secret/payload_pb2_grpc.py +0 -4
  355. union/_protos/secret/secret_pb2.py +0 -38
  356. union/_protos/secret/secret_pb2.pyi +0 -6
  357. union/_protos/secret/secret_pb2_grpc.py +0 -198
  358. union/_protos/validate/validate/validate_pb2.py +0 -76
  359. union/_protos/workflow/node_execution_service_pb2.py +0 -26
  360. union/_protos/workflow/node_execution_service_pb2.pyi +0 -4
  361. union/_protos/workflow/node_execution_service_pb2_grpc.py +0 -32
  362. union/_protos/workflow/queue_service_pb2.py +0 -75
  363. union/_protos/workflow/queue_service_pb2.pyi +0 -103
  364. union/_protos/workflow/queue_service_pb2_grpc.py +0 -172
  365. union/_protos/workflow/run_definition_pb2.py +0 -100
  366. union/_protos/workflow/run_definition_pb2.pyi +0 -256
  367. union/_protos/workflow/run_definition_pb2_grpc.py +0 -4
  368. union/_protos/workflow/run_logs_service_pb2.py +0 -41
  369. union/_protos/workflow/run_logs_service_pb2.pyi +0 -28
  370. union/_protos/workflow/run_logs_service_pb2_grpc.py +0 -69
  371. union/_protos/workflow/run_service_pb2.py +0 -133
  372. union/_protos/workflow/run_service_pb2.pyi +0 -173
  373. union/_protos/workflow/run_service_pb2_grpc.py +0 -412
  374. union/_protos/workflow/state_service_pb2.py +0 -58
  375. union/_protos/workflow/state_service_pb2.pyi +0 -69
  376. union/_protos/workflow/state_service_pb2_grpc.py +0 -138
  377. union/_protos/workflow/task_definition_pb2.py +0 -72
  378. union/_protos/workflow/task_definition_pb2.pyi +0 -65
  379. union/_protos/workflow/task_definition_pb2_grpc.py +0 -4
  380. union/_protos/workflow/task_service_pb2.py +0 -44
  381. union/_protos/workflow/task_service_pb2.pyi +0 -31
  382. union/_protos/workflow/task_service_pb2_grpc.py +0 -104
  383. union/_resources.py +0 -226
  384. union/_retry.py +0 -32
  385. union/_reusable_environment.py +0 -25
  386. union/_run.py +0 -374
  387. union/_secret.py +0 -61
  388. union/_task.py +0 -354
  389. union/_task_environment.py +0 -186
  390. union/_timeout.py +0 -47
  391. union/_tools.py +0 -27
  392. union/_utils/__init__.py +0 -11
  393. union/_utils/asyn.py +0 -119
  394. union/_utils/file_handling.py +0 -71
  395. union/_utils/helpers.py +0 -46
  396. union/_utils/lazy_module.py +0 -54
  397. union/_utils/uv_script_parser.py +0 -49
  398. union/_version.py +0 -21
  399. union/connectors/__init__.py +0 -0
  400. union/errors.py +0 -128
  401. union/extras/__init__.py +0 -5
  402. union/extras/_container.py +0 -263
  403. union/io/__init__.py +0 -11
  404. union/io/_dataframe.py +0 -0
  405. union/io/_dir.py +0 -425
  406. union/io/_file.py +0 -418
  407. union/io/pickle/__init__.py +0 -0
  408. union/io/pickle/transformer.py +0 -117
  409. union/io/structured_dataset/__init__.py +0 -122
  410. union/io/structured_dataset/basic_dfs.py +0 -219
  411. union/io/structured_dataset/structured_dataset.py +0 -1057
  412. union/py.typed +0 -0
  413. union/remote/__init__.py +0 -23
  414. union/remote/_client/__init__.py +0 -0
  415. union/remote/_client/_protocols.py +0 -129
  416. union/remote/_client/auth/__init__.py +0 -12
  417. union/remote/_client/auth/_authenticators/__init__.py +0 -0
  418. union/remote/_client/auth/_authenticators/base.py +0 -391
  419. union/remote/_client/auth/_authenticators/client_credentials.py +0 -73
  420. union/remote/_client/auth/_authenticators/device_code.py +0 -120
  421. union/remote/_client/auth/_authenticators/external_command.py +0 -77
  422. union/remote/_client/auth/_authenticators/factory.py +0 -200
  423. union/remote/_client/auth/_authenticators/pkce.py +0 -515
  424. union/remote/_client/auth/_channel.py +0 -184
  425. union/remote/_client/auth/_client_config.py +0 -83
  426. union/remote/_client/auth/_default_html.py +0 -32
  427. union/remote/_client/auth/_grpc_utils/__init__.py +0 -0
  428. union/remote/_client/auth/_grpc_utils/auth_interceptor.py +0 -204
  429. union/remote/_client/auth/_grpc_utils/default_metadata_interceptor.py +0 -144
  430. union/remote/_client/auth/_keyring.py +0 -154
  431. union/remote/_client/auth/_token_client.py +0 -258
  432. union/remote/_client/auth/errors.py +0 -16
  433. union/remote/_client/controlplane.py +0 -86
  434. union/remote/_data.py +0 -149
  435. union/remote/_logs.py +0 -74
  436. union/remote/_project.py +0 -86
  437. union/remote/_run.py +0 -820
  438. union/remote/_secret.py +0 -132
  439. union/remote/_task.py +0 -193
  440. union/report/__init__.py +0 -3
  441. union/report/_report.py +0 -178
  442. union/report/_template.html +0 -124
  443. union/storage/__init__.py +0 -24
  444. union/storage/_remote_fs.py +0 -34
  445. union/storage/_storage.py +0 -247
  446. union/storage/_utils.py +0 -5
  447. union/types/__init__.py +0 -11
  448. union/types/_renderer.py +0 -162
  449. union/types/_string_literals.py +0 -120
  450. union/types/_type_engine.py +0 -2131
  451. union/types/_utils.py +0 -80
  452. /flyte/{_cli → _debug}/__init__.py +0 -0
  453. /flyte/{_protos → _keyring}/__init__.py +0 -0
  454. {flyte-0.0.1b0.dist-info → flyte-2.0.0b46.dist-info}/WHEEL +0 -0
  455. {flyte-0.0.1b0.dist-info → flyte-2.0.0b46.dist-info}/top_level.txt +0 -0
flyte/_task.py CHANGED
@@ -1,12 +1,12 @@
1
1
  from __future__ import annotations
2
2
 
3
+ import asyncio
3
4
  import weakref
4
5
  from dataclasses import dataclass, field, replace
5
- from functools import cached_property
6
+ from inspect import iscoroutinefunction
6
7
  from typing import (
7
8
  TYPE_CHECKING,
8
9
  Any,
9
- Awaitable,
10
10
  Callable,
11
11
  Coroutine,
12
12
  Dict,
@@ -15,36 +15,46 @@ from typing import (
15
15
  Literal,
16
16
  Optional,
17
17
  ParamSpec,
18
+ Tuple,
19
+ TypeAlias,
18
20
  TypeVar,
19
21
  Union,
22
+ cast,
23
+ overload,
20
24
  )
21
25
 
22
- from flyteidl.core.tasks_pb2 import DataLoadingConfig
23
-
26
+ from flyte._pod import PodTemplate
24
27
  from flyte.errors import RuntimeSystemError, RuntimeUserError
25
28
 
26
29
  from ._cache import Cache, CacheRequest
27
30
  from ._context import internal_ctx
28
- from ._datastructures import NativeInterface, SerializationContext
29
31
  from ._doc import Documentation
30
32
  from ._image import Image
33
+ from ._link import Link
31
34
  from ._resources import Resources
32
35
  from ._retry import RetryStrategy
33
36
  from ._reusable_environment import ReusePolicy
34
37
  from ._secret import SecretRequest
35
38
  from ._timeout import TimeoutType
39
+ from ._trigger import Trigger
40
+ from .models import MAX_INLINE_IO_BYTES, NativeInterface, SerializationContext
36
41
 
37
42
  if TYPE_CHECKING:
38
- from kubernetes.client import V1PodTemplate
43
+ from flyteidl2.core.tasks_pb2 import DataLoadingConfig
39
44
 
40
45
  from ._task_environment import TaskEnvironment
41
46
 
42
47
  P = ParamSpec("P") # capture the function's parameters
43
48
  R = TypeVar("R") # return type
44
49
 
50
+ AsyncFunctionType: TypeAlias = Callable[P, Coroutine[Any, Any, R]]
51
+ SyncFunctionType: TypeAlias = Callable[P, R]
52
+ FunctionTypes: TypeAlias = AsyncFunctionType | SyncFunctionType
53
+ F = TypeVar("F", bound=FunctionTypes)
54
+
45
55
 
46
56
  @dataclass(kw_only=True)
47
- class TaskTemplate(Generic[P, R]):
57
+ class TaskTemplate(Generic[P, R, F]):
48
58
  """
49
59
  Task template is a template for a task that can be executed. It defines various parameters for the task, which
50
60
  can be defined statically at the time of task definition or dynamically at the time of task invocation using
@@ -64,55 +74,60 @@ class TaskTemplate(Generic[P, R]):
64
74
  version with flyte installed
65
75
  :param resources: Optional The resources to use for the task
66
76
  :param cache: Optional The cache policy for the task, defaults to auto, which will cache the results of the task.
67
- :param interruptable: Optional The interruptable policy for the task, defaults to False, which means the task
68
- will not be scheduled on interruptable nodes. If set to True, the task will be scheduled on interruptable nodes,
77
+ :param interruptible: Optional The interruptible policy for the task, defaults to False, which means the task
78
+ will not be scheduled on interruptible nodes. If set to True, the task will be scheduled on interruptible nodes,
69
79
  and the code should handle interruptions and resumptions.
70
80
  :param retries: Optional The number of retries for the task, defaults to 0, which means no retries.
71
81
  :param reusable: Optional The reusability policy for the task, defaults to None, which means the task environment
72
82
  will not be reused across task invocations.
73
83
  :param docs: Optional The documentation for the task, if not provided the function docstring will be used.
74
- :param env: Optional The environment variables to set for the task.
84
+ :param env_vars: Optional The environment variables to set for the task.
75
85
  :param secrets: Optional The secrets that will be injected into the task at runtime.
76
86
  :param timeout: Optional The timeout for the task.
87
+ :param max_inline_io_bytes: Maximum allowed size (in bytes) for all inputs and outputs passed directly to the task
88
+ (e.g., primitives, strings, dicts). Does not apply to files, directories, or dataframes.
89
+ :param pod_template: Optional The pod template to use for the task.
90
+ :param report: Optional Whether to report the task execution to the Flyte console, defaults to False.
91
+ :param queue: Optional The queue to use for the task. If not provided, the default queue will be used.
92
+ :param debuggable: Optional Whether the task supports debugging capabilities, defaults to False.
77
93
  """
78
94
 
79
95
  name: str
80
96
  interface: NativeInterface
97
+ short_name: str = ""
81
98
  task_type: str = "python"
82
99
  task_type_version: int = 0
83
100
  image: Union[str, Image, Literal["auto"]] = "auto"
84
101
  resources: Optional[Resources] = None
85
- cache: CacheRequest = "auto"
86
- interruptable: bool = False
102
+ cache: CacheRequest = "disable"
103
+ interruptible: bool = False
87
104
  retries: Union[int, RetryStrategy] = 0
88
- reusable: Union[ReusePolicy, Literal["auto"], None] = None
105
+ reusable: Union[ReusePolicy, None] = None
89
106
  docs: Optional[Documentation] = None
90
- env: Optional[Dict[str, str]] = None
107
+ env_vars: Optional[Dict[str, str]] = None
91
108
  secrets: Optional[SecretRequest] = None
92
109
  timeout: Optional[TimeoutType] = None
93
- primary_container_name: str = "primary"
94
- pod_template: Optional[Union[str, V1PodTemplate]] = None
110
+ pod_template: Optional[Union[str, PodTemplate]] = None
95
111
  report: bool = False
112
+ queue: Optional[str] = None
113
+ debuggable: bool = False
96
114
 
97
115
  parent_env: Optional[weakref.ReferenceType[TaskEnvironment]] = None
98
- local: bool = field(default=False, init=False)
116
+ parent_env_name: Optional[str] = None
99
117
  ref: bool = field(default=False, init=False, repr=False, compare=False)
118
+ max_inline_io_bytes: int = MAX_INLINE_IO_BYTES
119
+ triggers: Tuple[Trigger, ...] = field(default_factory=tuple)
120
+ links: Tuple[Link, ...] = field(default_factory=tuple)
100
121
 
101
- def __post_init__(self):
102
- # If pod_template is set to a pod, verify
103
- if self.pod_template is not None and not isinstance(self.pod_template, str):
104
- try:
105
- from kubernetes.client import V1PodTemplate # noqa: F401
106
- except ImportError as e:
107
- raise ImportError(
108
- "kubernetes is not installed, please install kubernetes package to use pod_template"
109
- ) from e
122
+ # Only used in python 3.10 and 3.11, where we cannot use markcoroutinefunction
123
+ _call_as_synchronous: bool = False
110
124
 
125
+ def __post_init__(self):
111
126
  # Auto set the image based on the image request
112
127
  if self.image == "auto":
113
- self.image = Image.auto()
128
+ self.image = Image.from_debian_base()
114
129
  elif isinstance(self.image, str):
115
- self.image = Image.from_prebuilt(str(self.image))
130
+ self.image = Image.from_base(str(self.image))
116
131
 
117
132
  # Auto set cache based on the cache request
118
133
  if isinstance(self.cache, str):
@@ -128,6 +143,10 @@ class TaskTemplate(Generic[P, R]):
128
143
  if isinstance(self.retries, int):
129
144
  self.retries = RetryStrategy(count=self.retries)
130
145
 
146
+ if self.short_name == "":
147
+ # If short_name is not set, use the name of the task
148
+ self.short_name = self.name
149
+
131
150
  def __getstate__(self):
132
151
  """
133
152
  This method is called when the object is pickled. We need to remove the parent_env reference
@@ -145,6 +164,10 @@ class TaskTemplate(Generic[P, R]):
145
164
  self.__dict__.update(state)
146
165
  self.parent_env = None
147
166
 
167
+ @property
168
+ def source_file(self) -> Optional[str]:
169
+ return None
170
+
148
171
  async def pre(self, *args, **kwargs) -> Dict[str, Any]:
149
172
  """
150
173
  This is the preexecute function that will be
@@ -208,13 +231,78 @@ class TaskTemplate(Generic[P, R]):
208
231
  def native_interface(self) -> NativeInterface:
209
232
  return self.interface
210
233
 
211
- async def __call__(self, *args: P.args, **kwargs: P.kwargs) -> Coroutine[Any, Any, R]:
234
+ @overload
235
+ async def aio(self: TaskTemplate[P, R, SyncFunctionType], *args: P.args, **kwargs: P.kwargs) -> R: ...
236
+
237
+ @overload
238
+ async def aio(
239
+ self: TaskTemplate[P, R, AsyncFunctionType], *args: P.args, **kwargs: P.kwargs
240
+ ) -> Coroutine[Any, Any, R]: ...
241
+
242
+ async def aio(self, *args: P.args, **kwargs: P.kwargs) -> Coroutine[Any, Any, R] | R:
243
+ """
244
+ The aio function allows executing "sync" tasks, in an async context. This helps with migrating v1 defined sync
245
+ tasks to be used within an asyncio parent task.
246
+ This function will also re-raise exceptions from the underlying task.
247
+
248
+ Example:
249
+ ```python
250
+ @env.task
251
+ def my_legacy_task(x: int) -> int:
252
+ return x
253
+
254
+ @env.task
255
+ async def my_new_parent_task(n: int) -> List[int]:
256
+ collect = []
257
+ for x in range(n):
258
+ collect.append(my_legacy_task.aio(x))
259
+ return asyncio.gather(*collect)
260
+ ```
261
+ :param args:
262
+ :param kwargs:
263
+ :return:
264
+ """
265
+ ctx = internal_ctx()
266
+ if ctx.is_task_context():
267
+ from ._internal.controllers import get_controller
268
+
269
+ # If we are in a task context, that implies we are executing a Run.
270
+ # In this scenario, we should submit the task to the controller.
271
+ controller = get_controller()
272
+ if controller:
273
+ if self._call_as_synchronous:
274
+ fut = controller.submit_sync(self, *args, **kwargs)
275
+ asyncio_future = asyncio.wrap_future(fut) # Wrap the future to make it awaitable
276
+ return await asyncio_future
277
+ else:
278
+ return await controller.submit(self, *args, **kwargs)
279
+ else:
280
+ raise RuntimeSystemError("BadContext", "Controller is not initialized.")
281
+ else:
282
+ from flyte._logging import logger
283
+
284
+ logger.warning(f"Task {self.name} running aio outside of a task context.")
285
+ # Local execute, just stay out of the way, but because .aio is used, we want to return an awaitable,
286
+ # even for synchronous tasks. This is to support migration.
287
+ return self.forward(*args, **kwargs)
288
+
289
+ @overload
290
+ def __call__(self: TaskTemplate[P, R, SyncFunctionType], *args: P.args, **kwargs: P.kwargs) -> R: ...
291
+
292
+ @overload
293
+ def __call__(
294
+ self: TaskTemplate[P, R, AsyncFunctionType], *args: P.args, **kwargs: P.kwargs
295
+ ) -> Coroutine[Any, Any, R]: ...
296
+
297
+ def __call__(self, *args: P.args, **kwargs: P.kwargs) -> Coroutine[Any, Any, R] | R:
212
298
  """
213
299
  This is the entrypoint for an async function task at runtime. It will be called during an execution.
214
300
  Please do not override this method, if you simply want to modify the execution behavior, override the
215
301
  execute method.
216
302
 
217
- # TODO lets provide one hook to implement, _pre, _execute and _post. We do not want actual execute to
303
+ This needs to be overridable to maybe be async.
304
+ The returned thing from here needs to be an awaitable if the underlying task is async, and a regular object
305
+ if the task is not.
218
306
  """
219
307
  try:
220
308
  ctx = internal_ctx()
@@ -224,10 +312,19 @@ class TaskTemplate(Generic[P, R]):
224
312
  # We will also check if we are not initialized, It is not expected to be not initialized
225
313
  from ._internal.controllers import get_controller
226
314
 
227
- controller = await get_controller()
228
- if controller:
229
- return await controller.submit(self, *args, **kwargs)
230
- return await self.execute(*args, **kwargs)
315
+ controller = get_controller()
316
+ if not controller:
317
+ raise RuntimeSystemError("BadContext", "Controller is not initialized.")
318
+
319
+ if self._call_as_synchronous:
320
+ fut = controller.submit_sync(self, *args, **kwargs)
321
+ x = fut.result(None)
322
+ return x
323
+ else:
324
+ return controller.submit(self, *args, **kwargs)
325
+ else:
326
+ # If not in task context, purely function run, stay out of the way
327
+ return self.forward(*args, **kwargs)
231
328
  except RuntimeSystemError:
232
329
  raise
233
330
  except RuntimeUserError:
@@ -235,33 +332,93 @@ class TaskTemplate(Generic[P, R]):
235
332
  except Exception as e:
236
333
  raise RuntimeUserError(type(e).__name__, str(e)) from e
237
334
 
335
+ def forward(self, *args: P.args, **kwargs: P.kwargs) -> Coroutine[Any, Any, R] | R:
336
+ """
337
+ Think of this as a local execute method for your task. This function will be invoked by the __call__ method
338
+ when not in a Flyte task execution context. See the implementation below for an example.
339
+
340
+ :param args:
341
+ :param kwargs:
342
+ :return:
343
+ """
344
+ raise NotImplementedError
345
+
238
346
  def override(
239
347
  self,
240
348
  *,
241
- local: Optional[bool] = None,
242
- ref: Optional[bool] = None,
349
+ short_name: Optional[str] = None,
243
350
  resources: Optional[Resources] = None,
244
- cache: CacheRequest = "auto",
351
+ cache: Optional[CacheRequest] = None,
245
352
  retries: Union[int, RetryStrategy] = 0,
246
353
  timeout: Optional[TimeoutType] = None,
247
- reusable: Union[ReusePolicy, Literal["auto"], None] = None,
248
- env: Optional[Dict[str, str]] = None,
354
+ reusable: Union[ReusePolicy, Literal["off"], None] = None,
355
+ env_vars: Optional[Dict[str, str]] = None,
249
356
  secrets: Optional[SecretRequest] = None,
357
+ max_inline_io_bytes: int | None = None,
358
+ pod_template: Optional[Union[str, PodTemplate]] = None,
359
+ queue: Optional[str] = None,
360
+ interruptible: Optional[bool] = None,
361
+ links: Tuple[Link, ...] = (),
250
362
  **kwargs: Any,
251
363
  ) -> TaskTemplate:
252
364
  """
253
365
  Override various parameters of the task template. This allows for dynamic configuration of the task
254
366
  when it is called, such as changing the image, resources, cache policy, etc.
367
+
368
+ :param short_name: Optional override for the short name of the task.
369
+ :param resources: Optional override for the resources to use for the task.
370
+ :param cache: Optional override for the cache policy for the task.
371
+ :param retries: Optional override for the number of retries for the task.
372
+ :param timeout: Optional override for the timeout for the task.
373
+ :param reusable: Optional override for the reusability policy for the task.
374
+ :param env_vars: Optional override for the environment variables to set for the task.
375
+ :param secrets: Optional override for the secrets that will be injected into the task at runtime.
376
+ :param max_inline_io_bytes: Optional override for the maximum allowed size (in bytes) for all inputs and outputs
377
+ passed directly to the task.
378
+ :param pod_template: Optional override for the pod template to use for the task.
379
+ :param queue: Optional override for the queue to use for the task.
380
+ :param interruptible: Optional override for the interruptible policy for the task.
381
+ :param links: Optional override for the Links associated with the task.
382
+ :param kwargs: Additional keyword arguments for further overrides. Some fields like name, image, docs,
383
+ and interface cannot be overridden.
384
+
385
+ :return: A new TaskTemplate instance with the overridden parameters.
255
386
  """
256
- resources = resources or self.resources
257
387
  cache = cache or self.cache
258
388
  retries = retries or self.retries
259
389
  timeout = timeout or self.timeout
390
+ max_inline_io_bytes = max_inline_io_bytes or self.max_inline_io_bytes
391
+
260
392
  reusable = reusable or self.reusable
261
- env = env or self.env
393
+ if reusable == "off":
394
+ reusable = None
395
+
396
+ if reusable is not None:
397
+ if resources is not None:
398
+ raise ValueError(
399
+ "Cannot override resources when reusable is set."
400
+ " Reusable tasks will use the parent env's resources. You can disable reusability and"
401
+ " override resources if needed. (set reusable='off')"
402
+ )
403
+ if env_vars is not None:
404
+ raise ValueError(
405
+ "Cannot override env when reusable is set."
406
+ " Reusable tasks will use the parent env's env. You can disable reusability and "
407
+ "override env if needed. (set reusable='off')"
408
+ )
409
+ if secrets is not None:
410
+ raise ValueError(
411
+ "Cannot override secrets when reusable is set."
412
+ " Reusable tasks will use the parent env's secrets. You can disable reusability and "
413
+ "override secrets if needed. (set reusable='off')"
414
+ )
415
+
416
+ resources = resources or self.resources
417
+ env_vars = env_vars or self.env_vars
262
418
  secrets = secrets or self.secrets
263
- local = local or self.local
264
- ref = ref or self.ref
419
+
420
+ interruptible = interruptible if interruptible is not None else self.interruptible
421
+
265
422
  for k, v in kwargs.items():
266
423
  if k == "name":
267
424
  raise ValueError("Name cannot be overridden")
@@ -271,45 +428,72 @@ class TaskTemplate(Generic[P, R]):
271
428
  raise ValueError("Docs cannot be overridden")
272
429
  if k == "interface":
273
430
  raise ValueError("Interface cannot be overridden")
431
+
274
432
  return replace(
275
433
  self,
434
+ short_name=short_name or self.short_name,
276
435
  resources=resources,
277
436
  cache=cache,
278
437
  retries=retries,
279
438
  timeout=timeout,
280
- reusable=reusable,
281
- env=env,
439
+ reusable=cast(Optional[ReusePolicy], reusable),
440
+ env_vars=env_vars,
282
441
  secrets=secrets,
442
+ max_inline_io_bytes=max_inline_io_bytes,
443
+ pod_template=pod_template,
444
+ interruptible=interruptible,
445
+ queue=queue or self.queue,
446
+ links=links or self.links,
447
+ **kwargs,
283
448
  )
284
449
 
285
450
 
286
451
  @dataclass(kw_only=True)
287
- class AsyncFunctionTaskTemplate(TaskTemplate[P, R]):
452
+ class AsyncFunctionTaskTemplate(TaskTemplate[P, R, F]):
288
453
  """
289
454
  A task template that wraps an asynchronous functions. This is automatically created when an asynchronous function
290
455
  is decorated with the task decorator.
291
456
  """
292
457
 
293
- func: Callable[P, Awaitable[R]]
458
+ func: F
459
+ plugin_config: Optional[Any] = None # This is used to pass plugin specific configuration
460
+ debuggable: bool = True
294
461
 
295
- @cached_property
296
- def native_interface(self) -> NativeInterface:
297
- return NativeInterface.from_callable(self.func)
462
+ def __post_init__(self):
463
+ super().__post_init__()
464
+ if not iscoroutinefunction(self.func):
465
+ self._call_as_synchronous = True
466
+
467
+ @property
468
+ def source_file(self) -> Optional[str]:
469
+ """
470
+ Returns the source file of the function, if available. This is useful for debugging and tracing.
471
+ """
472
+ if hasattr(self.func, "__code__") and self.func.__code__:
473
+ return self.func.__code__.co_filename
474
+ return None
475
+
476
+ def forward(self, *args: P.args, **kwargs: P.kwargs) -> Coroutine[Any, Any, R] | R:
477
+ # In local execution, we want to just call the function. Note we're not awaiting anything here.
478
+ # If the function was a coroutine function, the coroutine is returned and the await that the caller has
479
+ # in front of the task invocation will handle the awaiting.
480
+ return self.func(*args, **kwargs)
298
481
 
299
482
  async def execute(self, *args: P.args, **kwargs: P.kwargs) -> R:
300
483
  """
301
484
  This is the execute method that will be called when the task is invoked. It will call the actual function.
302
485
  # TODO We may need to keep this as the bare func execute, and need a pre and post execute some other func.
303
486
  """
487
+
304
488
  ctx = internal_ctx()
489
+ assert ctx.data.task_context is not None, "Function should have already returned if not in a task context"
305
490
  ctx_data = await self.pre(*args, **kwargs)
306
- if ctx.data.task_context is not None:
307
- tctx = ctx.data.task_context.replace(data=ctx_data)
308
- with ctx.replace_task_context(tctx):
491
+ tctx = ctx.data.task_context.replace(data=ctx_data)
492
+ with ctx.replace_task_context(tctx):
493
+ if iscoroutinefunction(self.func):
309
494
  v = await self.func(*args, **kwargs)
310
- await self.post(v)
311
- else:
312
- v = await self.func(*args, **kwargs)
495
+ else:
496
+ v = self.func(*args, **kwargs)
313
497
  await self.post(v)
314
498
  return v
315
499
 
@@ -352,6 +536,11 @@ class AsyncFunctionTaskTemplate(TaskTemplate[P, R]):
352
536
 
353
537
  from flyte._internal.resolvers.default import DefaultTaskResolver
354
538
 
539
+ if not serialize_context.root_dir:
540
+ raise RuntimeSystemError(
541
+ "SerializationError",
542
+ "Root dir is required for default task resolver when no code bundle is provided.",
543
+ )
355
544
  _task_resolver = DefaultTaskResolver()
356
545
  args = [
357
546
  *args,