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/errors.py CHANGED
@@ -10,6 +10,16 @@ from typing import Literal
10
10
  ErrorKind = Literal["system", "unknown", "user"]
11
11
 
12
12
 
13
+ def silence_grpc_polling_error(loop, context):
14
+ """
15
+ Suppress specific gRPC polling errors in the event loop.
16
+ """
17
+ exc = context.get("exception")
18
+ if isinstance(exc, BlockingIOError):
19
+ return # suppress
20
+ loop.default_exception_handler(context)
21
+
22
+
13
23
  class BaseRuntimeError(RuntimeError):
14
24
  """
15
25
  Base class for all Union runtime errors. These errors are raised when the underlying task execution fails, either
@@ -86,6 +96,9 @@ class TaskTimeoutError(RuntimeUserError):
86
96
  This error is raised when the underlying task execution runs for longer than the specified timeout.
87
97
  """
88
98
 
99
+ def __init__(self, message: str):
100
+ super().__init__("TaskTimeoutError", message, "user")
101
+
89
102
 
90
103
  class RetriesExhaustedError(RuntimeUserError):
91
104
  """
@@ -119,7 +132,9 @@ class CustomError(RuntimeUserError):
119
132
  Create a CustomError from an exception. The exception's class name is used as the error code and the exception
120
133
  message is used as the error message.
121
134
  """
122
- return cls(e.__class__.__name__, str(e))
135
+ new_exc = cls(e.__class__.__name__, str(e))
136
+ new_exc.__cause__ = e
137
+ return new_exc
123
138
 
124
139
 
125
140
  class NotInTaskContextError(RuntimeUserError):
@@ -134,10 +149,127 @@ class ActionNotFoundError(RuntimeError):
134
149
  """
135
150
 
136
151
 
152
+ # NOTE: Use RemoteTaskError instead, since "reference tasks" (from v1) are now
153
+ # simply "remote tasks" in v2.
137
154
  class ReferenceTaskError(RuntimeUserError):
138
155
  """
139
156
  This error is raised when the user tries to access a task that does not exist.
140
157
  """
141
158
 
159
+ CODE = "ReferenceTaskUsageError"
160
+
161
+ def __init__(self, message: str):
162
+ super().__init__(self.CODE, message, "user")
163
+
164
+
165
+ class RemoteTaskError(ReferenceTaskError):
166
+ """
167
+ This error is raised when the user tries to access a task that does not exist.
168
+ """
169
+
170
+ CODE = "RemoteTaskUsageError"
171
+
172
+
173
+ class LogsNotYetAvailableError(BaseRuntimeError):
174
+ """
175
+ This error is raised when the logs are not yet available for a task.
176
+ """
177
+
178
+ def __init__(self, message: str):
179
+ super().__init__("LogsNotYetAvailable", "system", message, None)
180
+
181
+
182
+ class RuntimeDataValidationError(RuntimeUserError):
183
+ """
184
+ This error is raised when the user tries to access a resource that does not exist or is invalid.
185
+ """
186
+
187
+ def __init__(self, var: str, e: Exception | str, task_name: str = ""):
188
+ super().__init__(
189
+ "DataValidationError", f"In task {task_name} variable {var}, failed to serialize/deserialize because of {e}"
190
+ )
191
+
192
+
193
+ class DeploymentError(RuntimeUserError):
194
+ """
195
+ This error is raised when the deployment of a task fails, or some preconditions for deployment are not met.
196
+ """
197
+
198
+ def __init__(self, message: str):
199
+ super().__init__("DeploymentError", message, "user")
200
+
201
+
202
+ class ImageBuildError(RuntimeUserError):
203
+ """
204
+ This error is raised when the image build fails.
205
+ """
206
+
207
+ def __init__(self, message: str):
208
+ super().__init__("ImageBuildError", message, "user")
209
+
210
+
211
+ class ModuleLoadError(RuntimeUserError):
212
+ """
213
+ This error is raised when the module cannot be loaded, either because it does not exist or because of a
214
+ syntax error.
215
+ """
216
+
217
+ def __init__(self, message: str):
218
+ super().__init__("ModuleLoadError", message, "user")
219
+
220
+
221
+ class InlineIOMaxBytesBreached(RuntimeUserError):
222
+ """
223
+ This error is raised when the inline IO max bytes limit is breached.
224
+ This can be adjusted per task by setting max_inline_io_bytes in the task definition.
225
+ """
226
+
227
+ def __init__(self, message: str):
228
+ super().__init__("InlineIOMaxBytesBreached", message, "user")
229
+
230
+
231
+ class RunAbortedError(RuntimeUserError):
232
+ """
233
+ This error is raised when the run is aborted by the user.
234
+ """
235
+
236
+ def __init__(self, message: str):
237
+ super().__init__("RunAbortedError", message, "user")
238
+
239
+
240
+ class SlowDownError(RuntimeUserError):
241
+ """
242
+ This error is raised when the user tries to access a resource that does not exist or is invalid.
243
+ """
244
+
245
+ def __init__(self, message: str):
246
+ super().__init__("SlowDownError", message, "user")
247
+
248
+
249
+ class OnlyAsyncIOSupportedError(RuntimeUserError):
250
+ """
251
+ This error is raised when the user tries to use sync IO in an async task.
252
+ """
253
+
254
+ def __init__(self, message: str):
255
+ super().__init__("OnlyAsyncIOSupportedError", message, "user")
256
+
257
+
258
+ class ParameterMaterializationError(RuntimeUserError):
259
+ """
260
+ This error is raised when the user tries to use a Parameter in an App, that has delayed Materialization,
261
+ but the materialization fails.
262
+ """
263
+
264
+ def __init__(self, message: str):
265
+ super().__init__("ParameterMaterializationError", message, "user")
266
+
267
+
268
+ class RestrictedTypeError(RuntimeUserError):
269
+ """
270
+ This error is raised when the user uses a restricted type, for example current a Tuple is not supported for one
271
+ value.
272
+ """
273
+
142
274
  def __init__(self, message: str):
143
- super().__init__("ReferenceTaskUsageError", message, "user")
275
+ super().__init__("RestrictedTypeUsage", message, "user")
flyte/extend.py ADDED
@@ -0,0 +1,24 @@
1
+ from flyte._image import Architecture
2
+
3
+ from ._initialize import is_initialized
4
+ from ._internal.imagebuild.image_builder import ImageBuildEngine, ImageBuilder, ImageChecker
5
+ from ._internal.runtime.entrypoints import download_code_bundle
6
+ from ._internal.runtime.resources_serde import get_proto_resources
7
+ from ._resources import PRIMARY_CONTAINER_DEFAULT_NAME, pod_spec_from_resources
8
+ from ._task import AsyncFunctionTaskTemplate, TaskTemplate
9
+ from ._task_plugins import TaskPluginRegistry
10
+
11
+ __all__ = [
12
+ "PRIMARY_CONTAINER_DEFAULT_NAME",
13
+ "Architecture",
14
+ "AsyncFunctionTaskTemplate",
15
+ "ImageBuildEngine",
16
+ "ImageBuilder",
17
+ "ImageChecker",
18
+ "TaskPluginRegistry",
19
+ "TaskTemplate",
20
+ "download_code_bundle",
21
+ "get_proto_resources",
22
+ "is_initialized",
23
+ "pod_spec_from_resources",
24
+ ]
@@ -2,27 +2,23 @@ import os
2
2
  import pathlib
3
3
  from typing import Any, Dict, List, Literal, Optional, Tuple, Type, Union
4
4
 
5
- from flyteidl.core import tasks_pb2
5
+ from flyteidl2.core import tasks_pb2
6
6
 
7
7
  from flyte import Image, storage
8
- from flyte._datastructures import NativeInterface, SerializationContext
9
8
  from flyte._logging import logger
10
9
  from flyte._task import TaskTemplate
10
+ from flyte.io import Dir, File
11
+ from flyte.models import NativeInterface, SerializationContext
11
12
 
12
- _PRIMARY_CONTAINER_NAME_FIELD = "primary_container_name"
13
13
 
14
-
15
- def _extract_command_key(cmd: str, **kwargs) -> Any:
14
+ def _extract_command_key(cmd: str, **kwargs) -> List[Any] | None:
16
15
  """
17
16
  Extract the key from the command using regex.
18
17
  """
19
18
  import re
20
19
 
21
- input_regex = r"^\{\{\s*\.inputs\.(.*?)\s*\}\}$"
22
- match = re.match(input_regex, cmd)
23
- if match:
24
- return match.group(1)
25
- return None
20
+ input_regex = r"\{\{\.inputs\.([a-zA-Z0-9_]+)\}\}"
21
+ return re.findall(input_regex, cmd)
26
22
 
27
23
 
28
24
  def _extract_path_command_key(cmd: str, input_data_dir: Optional[str]) -> Optional[str]:
@@ -32,8 +28,9 @@ def _extract_path_command_key(cmd: str, input_data_dir: Optional[str]) -> Option
32
28
  import re
33
29
 
34
30
  input_data_dir = input_data_dir or ""
35
- input_regex = rf"{re.escape(input_data_dir)}/(.+)$"
36
- match = re.match(input_regex, cmd)
31
+ input_regex = rf"{re.escape(input_data_dir)}/([\w\-.]+)" # captures file or dir names
32
+
33
+ match = re.search(input_regex, cmd)
37
34
  if match:
38
35
  return match.group(1)
39
36
  return None
@@ -70,7 +67,7 @@ class ContainerTask(TaskTemplate):
70
67
  input_data_dir: str | pathlib.Path = "/var/inputs",
71
68
  output_data_dir: str | pathlib.Path = "/var/outputs",
72
69
  metadata_format: MetadataFormat = "JSON",
73
- local_logs: bool = False,
70
+ local_logs: bool = True,
74
71
  **kwargs,
75
72
  ):
76
73
  super().__init__(
@@ -83,9 +80,14 @@ class ContainerTask(TaskTemplate):
83
80
  self._image = image
84
81
  if isinstance(image, str):
85
82
  if image == "auto":
86
- self._image = Image.auto()
83
+ self._image = Image.from_debian_base()
87
84
  else:
88
- self._image = Image.from_prebuilt(image)
85
+ self._image = Image.from_base(image)
86
+
87
+ if command and any(not isinstance(c, str) for c in command):
88
+ raise ValueError("All elements in the command list must be strings.")
89
+ if arguments and any(not isinstance(a, str) for a in arguments):
90
+ raise ValueError("All elements in the arguments list must be strings.")
89
91
  self._cmd = command
90
92
  self._args = arguments
91
93
  self._input_data_dir = input_data_dir
@@ -106,32 +108,34 @@ class ContainerTask(TaskTemplate):
106
108
  For FlyteFile and FlyteDirectory commands, e.g., "/var/inputs/inputs", we extract the key from strings that
107
109
  begin with the specified `input_data_dir`.
108
110
  """
109
- # from flytekit.types.directory import FlyteDirectory
110
- # from flytekit.types.file import FlyteFile
111
+ from flyte.io import Dir, File
111
112
 
112
113
  volume_binding: Dict[str, Dict[str, str]] = {}
113
114
  path_k = _extract_path_command_key(cmd, str(self._input_data_dir))
114
- k = path_k if path_k else _extract_command_key(cmd)
115
-
116
- if k:
117
- input_val = kwargs.get(k)
118
- # TODO: Add support file and directory transformer first
119
- # if type(input_val) in [FlyteFile, FlyteDirectory]:
120
- # if not path_k:
121
- # raise AssertionError(
122
- # "FlyteFile and FlyteDirectory commands should not use the template syntax like this:
123
- # {{.inputs.infile}}\n"
124
- # "Please use a path-like syntax, such as: /var/inputs/infile.\n"
125
- # "This requirement is due to how Flyte Propeller processes template syntax inputs."
126
- # )
127
- # local_flyte_file_or_dir_path = str(input_val)
128
- # remote_flyte_file_or_dir_path = os.path.join(self._input_data_dir, k) # type: ignore
129
- # volume_binding[local_flyte_file_or_dir_path] = {
130
- # "bind": remote_flyte_file_or_dir_path,
131
- # "mode": "rw",
132
- # }
133
- # command = remote_flyte_file_or_dir_path
134
- command = str(input_val)
115
+ keys = [path_k] if path_k else _extract_command_key(cmd)
116
+
117
+ command = cmd
118
+
119
+ if keys:
120
+ for k in keys:
121
+ input_val = kwargs.get(k)
122
+ # TODO: Add support file and directory transformer first
123
+ if input_val and type(input_val) in [File, Dir]:
124
+ if not path_k:
125
+ raise AssertionError(
126
+ "File and Directory commands should not use the template syntax "
127
+ "like this: {{.inputs.infile}}\n"
128
+ "Please use a path-like syntax, such as: /var/inputs/infile.\n"
129
+ "This requirement is due to how Flyte Propeller processes template syntax inputs."
130
+ )
131
+ local_flyte_file_or_dir_path = input_val.path
132
+ remote_flyte_file_or_dir_path = os.path.join(self._input_data_dir, k) # type: ignore
133
+ volume_binding[local_flyte_file_or_dir_path] = {
134
+ "bind": remote_flyte_file_or_dir_path,
135
+ "mode": "rw",
136
+ }
137
+ else:
138
+ command = command.replace(f"{{{{.inputs.{k}}}}}", str(input_val))
135
139
  else:
136
140
  command = cmd
137
141
 
@@ -193,7 +197,9 @@ class ContainerTask(TaskTemplate):
193
197
  microseconds=microseconds,
194
198
  )
195
199
 
196
- def _convert_output_val_to_correct_type(self, output_val: Any, output_type: Type) -> Any:
200
+ async def _convert_output_val_to_correct_type(
201
+ self, output_path: pathlib.Path, output_val: Any, output_type: Type
202
+ ) -> Any:
197
203
  import datetime
198
204
 
199
205
  if issubclass(output_type, bool):
@@ -202,20 +208,31 @@ class ContainerTask(TaskTemplate):
202
208
  return datetime.datetime.fromisoformat(output_val)
203
209
  elif issubclass(output_type, datetime.timedelta):
204
210
  return self._string_to_timedelta(output_val)
211
+ elif issubclass(output_type, File):
212
+ return await File.from_local(output_path)
213
+ elif issubclass(output_type, Dir):
214
+ return await Dir.from_local(output_path)
205
215
  else:
206
216
  return output_type(output_val)
207
217
 
208
- def _get_output_dict(self, output_directory: pathlib.Path) -> Dict[str, Any]:
209
- output_dict = {}
218
+ async def _get_output(self, output_directory: pathlib.Path) -> Tuple[Any]:
219
+ output_items = []
210
220
  if self._outputs:
211
221
  for k, output_type in self._outputs.items():
212
222
  output_path = output_directory / k
213
- with output_path.open("r") as f:
214
- output_val = f.read()
215
- output_dict[k] = self._convert_output_val_to_correct_type(output_val, output_type)
216
- return output_dict
217
-
218
- def execute(self, **kwargs) -> Any:
223
+ if os.path.isfile(output_path):
224
+ with output_path.open("r") as f:
225
+ output_val = f.read()
226
+ else:
227
+ output_val = None
228
+ parsed = await self._convert_output_val_to_correct_type(output_path, output_val, output_type)
229
+ output_items.append(parsed)
230
+ # return a tuple so that each element is treated as a separate output.
231
+ # this allows flyte to map the user-defined output types (dict) to individual values.
232
+ # if we returned a list instead, it would be treated as a single output.
233
+ return tuple(output_items)
234
+
235
+ async def execute(self, **kwargs) -> Any:
219
236
  try:
220
237
  import docker
221
238
  except ImportError:
@@ -235,6 +252,7 @@ class ContainerTask(TaskTemplate):
235
252
  raise AssertionError(f"Only Image objects are supported, not strings. Got {self._image} instead.")
236
253
  uri = self._image.uri
237
254
  self._pull_image_if_not_exists(client, uri)
255
+ print(f"Command: {commands!r}")
238
256
 
239
257
  container = client.containers.run(uri, command=commands, remove=True, volumes=volume_bindings, detach=True)
240
258
 
@@ -247,8 +265,8 @@ class ContainerTask(TaskTemplate):
247
265
 
248
266
  container.wait()
249
267
 
250
- output_dict = self._get_output_dict(output_directory)
251
- return output_dict
268
+ output = await self._get_output(output_directory)
269
+ return output
252
270
 
253
271
  def data_loading_config(self, sctx: SerializationContext) -> tasks_pb2.DataLoadingConfig:
254
272
  literal_to_protobuf = {
@@ -258,16 +276,11 @@ class ContainerTask(TaskTemplate):
258
276
  }
259
277
 
260
278
  return tasks_pb2.DataLoadingConfig(
261
- input_path=self._input_data_dir,
262
- output_path=self._output_data_dir,
279
+ input_path=str(self._input_data_dir) if self._input_data_dir else None,
280
+ output_path=str(self._output_data_dir) if self._output_data_dir else None,
263
281
  enabled=True,
264
282
  format=literal_to_protobuf.get(self._metadata_format, "JSON"),
265
283
  )
266
284
 
267
285
  def container_args(self, sctx: SerializationContext) -> List[str]:
268
286
  return self._cmd + (self._args if self._args else [])
269
-
270
- def config(self, sctx: SerializationContext) -> Dict[str, str]:
271
- if self.pod_template is None:
272
- return {}
273
- return {_PRIMARY_CONTAINER_NAME_FIELD: self.primary_container_name}
flyte/git/__init__.py ADDED
@@ -0,0 +1,3 @@
1
+ from ._config import GitStatus, config_from_root
2
+
3
+ __all__ = ["GitStatus", "config_from_root"]