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
@@ -1,176 +0,0 @@
1
- import asyncio
2
- import gzip
3
- import logging
4
- import os
5
- import pathlib
6
- import tempfile
7
- from pathlib import Path
8
-
9
- from flyteidl.core.tasks_pb2 import TaskTemplate
10
-
11
- import union.storage as storage
12
- from union._datastructures import CodeBundle
13
- from union._logging import log, logger
14
-
15
- from ._ignore import GitIgnore, Ignore, StandardIgnore
16
- from ._packaging import create_bundle, list_files_to_bundle, print_ls_tree
17
- from ._utils import CopyFiles, hash_file
18
-
19
- _pickled_file_extension = ".pkl.gz"
20
- _tar_file_extension = ".tar.gz"
21
-
22
-
23
- async def build_pkl_bundle(
24
- o: TaskTemplate,
25
- upload_to_controlplane: bool = True,
26
- upload_from_dataplane_path: str | None = None,
27
- copy_bundle_to: pathlib.Path | None = None,
28
- ) -> CodeBundle:
29
- """
30
- Build a Pickled for the given task.
31
-
32
- TODO We can optimize this by having an LRU cache for the function, this is so that if the same task is being
33
- pickled multiple times, we can avoid the overhead of pickling it multiple times, by copying to a common place
34
- and reusing based on task hash.
35
-
36
- :param o: Object to be pickled. This is the task template.
37
- :param upload_to_controlplane: Whether to upload the pickled file to the control plane or not
38
- :param upload_from_dataplane_path: If we are on the dataplane, this is the path where the
39
- pickled file should be uploaded to. upload_to_controlplane has to be False in this case.
40
- :param copy_bundle_to: If set, the bundle will be copied to this path. This is used for testing purposes.
41
- :return: CodeBundle object containing the pickled file path and the computed version.
42
- """
43
- import cloudpickle
44
-
45
- import union.storage as storage
46
-
47
- if upload_to_controlplane and upload_from_dataplane_path:
48
- raise ValueError("Cannot upload to control plane and upload from dataplane path at the same time.")
49
-
50
- logger.debug("Building pickled code bundle.")
51
- with tempfile.TemporaryDirectory() as tmp_dir:
52
- dest = pathlib.Path(tmp_dir) / f"code_bundle{_pickled_file_extension}"
53
- with gzip.GzipFile(filename=dest, mode="wb", mtime=0) as gzipped:
54
- cloudpickle.dump(o, gzipped)
55
-
56
- if upload_to_controlplane:
57
- logger.debug("Uploading pickled code bundle to control plane.")
58
- from union.remote import upload_file
59
-
60
- hash_digest, remote_path = await upload_file(dest)
61
- return CodeBundle(pkl=remote_path, computed_version=hash_digest)
62
-
63
- elif upload_from_dataplane_path:
64
- logger.debug(f"Uploading pickled code bundle to dataplane path {upload_from_dataplane_path}.")
65
- _, str_digest, _ = hash_file(file_path=dest)
66
- final_path = await storage.put(str(dest), upload_from_dataplane_path)
67
- return CodeBundle(pkl=final_path, computed_version=str_digest)
68
-
69
- else:
70
- logger.debug("Dryrun enabled, not uploading pickled code bundle.")
71
- _, str_digest, _ = hash_file(file_path=dest)
72
- if copy_bundle_to:
73
- import shutil
74
-
75
- # Copy the bundle to the given path
76
- shutil.copy(dest, copy_bundle_to)
77
- local_path = copy_bundle_to / dest.name
78
- return CodeBundle(pkl=str(local_path), computed_version=str_digest)
79
- return CodeBundle(pkl=str(dest), computed_version=str_digest)
80
-
81
-
82
- async def build_code_bundle(
83
- from_dir: Path,
84
- *ignore: Ignore,
85
- extract_dir: str = ".",
86
- dryrun: bool = False,
87
- copy_bundle_to: pathlib.Path | None = None,
88
- copy_style: CopyFiles = "loaded_modules",
89
- ) -> CodeBundle:
90
- """
91
- Build the code bundle for the current environment.
92
- :param from_dir: The directory to bundle of the code to bundle. This is the root directory for the source.
93
- :param extract_dir: The directory to extract the code bundle to, when in the container. It defaults to the current
94
- working directory.
95
- :param ignore: The list of ignores to apply. This is a list of Ignore classes.
96
- :param dryrun: If dryrun is enabled, files will not be uploaded to the control plane.
97
- :param copy_bundle_to: If set, the bundle will be copied to this path. This is used for testing purposes.
98
- :param copy_style: What to put into the tarball. (either all, or loaded_modules. if none, skip this function)
99
-
100
- :return: The code bundle, which contains the path where the code was zipped to.
101
- """
102
- logger.debug("Building code bundle.")
103
- from union.remote import upload_file
104
-
105
- if not ignore:
106
- ignore = [StandardIgnore, GitIgnore]
107
-
108
- logger.debug(f"Finding files to bundle, ignoring as configured by: {ignore}")
109
- files, digest = list_files_to_bundle(from_dir, True, *ignore, copy_style=copy_style)
110
- if logger.getEffectiveLevel() <= logging.INFO:
111
- print_ls_tree(from_dir, files)
112
-
113
- logger.debug("Building code bundle.")
114
- with tempfile.TemporaryDirectory() as tmp_dir:
115
- bundle_path, tar_size, archive_size = create_bundle(from_dir, pathlib.Path(tmp_dir), files, digest)
116
- logger.info(f"Code bundle created at {bundle_path}, size: {tar_size} MB, archive size: {archive_size} MB")
117
- if not dryrun:
118
- hash_digest, remote_path = await upload_file(bundle_path)
119
- else:
120
- remote_path = "na"
121
- if copy_bundle_to:
122
- import shutil
123
-
124
- # Copy the bundle to the given path
125
- shutil.copy(bundle_path, copy_bundle_to)
126
- remote_path = str(copy_bundle_to / bundle_path.name)
127
- _, hash_digest, _ = hash_file(file_path=bundle_path)
128
- return CodeBundle(tgz=remote_path, destination=extract_dir, computed_version=hash_digest)
129
-
130
-
131
- @log(level=logging.INFO)
132
- async def download_bundle(bundle: CodeBundle) -> pathlib.Path:
133
- """
134
- Downloads a code bundle (tgz | pkl) to the local destination path.
135
- :param bundle: The code bundle to download.
136
-
137
- :return: The path to the downloaded code bundle.
138
- """
139
- dest = pathlib.Path(bundle.destination)
140
- if not dest.is_dir():
141
- raise ValueError(f"Destination path should be a directory, found {dest}, {dest.stat()}")
142
-
143
- # TODO make storage apis better to accept pathlib.Path
144
- if bundle.tgz:
145
- downloaded_bundle = dest / os.path.basename(bundle.tgz)
146
- # Download the tgz file
147
- downloaded_bundle = await storage.get(bundle.tgz, str(downloaded_bundle.absolute()))
148
- downloaded_bundle = pathlib.Path(downloaded_bundle)
149
- # NOTE the os.path.join(destination, ''). This is to ensure that the given path is in fact a directory and all
150
- # downloaded data should be copied into this directory. We do this to account for a difference in behavior in
151
- # fsspec, which requires a trailing slash in case of pre-existing directory.
152
- process = await asyncio.create_subprocess_exec(
153
- "tar",
154
- "-xvf",
155
- str(downloaded_bundle),
156
- "-C",
157
- str(dest),
158
- stdout=asyncio.subprocess.PIPE,
159
- stderr=asyncio.subprocess.PIPE,
160
- )
161
- stdout, stderr = await process.communicate()
162
-
163
- if process.returncode != 0:
164
- raise RuntimeError(stderr.decode())
165
- return downloaded_bundle.absolute()
166
-
167
- elif bundle.pkl:
168
- # Lets gunzip the pkl file
169
-
170
- downloaded_bundle = dest / os.path.basename(bundle.pkl)
171
- # Download the tgz file
172
- downloaded_bundle = await storage.get(bundle.pkl, str(downloaded_bundle.absolute()))
173
- downloaded_bundle = pathlib.Path(downloaded_bundle)
174
- return downloaded_bundle.absolute()
175
- else:
176
- raise ValueError("Code bundle should be either tgz or pkl, found neither.")
union/_context.py DELETED
@@ -1,146 +0,0 @@
1
- from __future__ import annotations
2
-
3
- import contextvars
4
- from dataclasses import dataclass, replace
5
- from typing import TYPE_CHECKING, Callable, Optional, ParamSpec, TypeVar
6
-
7
- from union._datastructures import GroupData, RawDataPath, TaskContext
8
-
9
- if TYPE_CHECKING:
10
- from union.report import Report
11
-
12
- P = ParamSpec("P") # capture the function's parameters
13
- R = TypeVar("R") # return type
14
-
15
-
16
- @dataclass(frozen=True, kw_only=True)
17
- class ContextData:
18
- """
19
- A ContextData cannot be created without an execution. Even for local execution's there should be an execution ID
20
-
21
- :param: action The action ID of the current execution. This is always set, within a run.
22
- :param: group_data If nested in a group the current group information
23
- :param: task_context The context of the current task execution, this is what is available to the user, it is set
24
- when the task is executed through `run` methods. If the Task is executed as regular python methods, this
25
- will be None.
26
- """
27
-
28
- group_data: Optional[GroupData] = None
29
- task_context: Optional[TaskContext] = None
30
- raw_data_path: Optional[RawDataPath] = None
31
-
32
- def replace(self, **kwargs) -> ContextData:
33
- return replace(self, **kwargs)
34
-
35
-
36
- class Context:
37
- """
38
- A context class to hold the current execution context.
39
- This is not coroutine safe, it assumes that the context is set in a single thread.
40
- You should use the `contextual_run` function to run a function in a new context tree.
41
-
42
- A context tree is defined as a tree of contexts, where under the root, all coroutines that were started in
43
- this context tree can access the context mutations, but no coroutine, created outside of the context tree can access
44
- the context mutations.
45
- """
46
-
47
- def __init__(self, data: ContextData):
48
- if data is None:
49
- raise ValueError("Cannot create a new context without contextdata.")
50
- self._data = data
51
- self._id = id(self) # Immutable unique identifier
52
-
53
- @property
54
- def data(self) -> ContextData:
55
- """Viewable data."""
56
- return self._data
57
-
58
- @property
59
- def raw_data(self) -> RawDataPath:
60
- """
61
- Get the raw data prefix for the current context first by looking up the task context, then the raw data path
62
- """
63
- if self.data and self.data.task_context and self.data.task_context.raw_data_path:
64
- return self.data.task_context.raw_data_path
65
- if self.data and self.data.raw_data_path:
66
- return self.data.raw_data_path
67
- raise ValueError("Raw data path has not been set in the context.")
68
-
69
- @property
70
- def id(self) -> int:
71
- """Viewable ID."""
72
- return self._id
73
-
74
- def replace_task_context(self, tctx: TaskContext) -> Context:
75
- """
76
- Replace the task context in the current context.
77
- """
78
- return Context(self.data.replace(task_context=tctx))
79
-
80
- def new_raw_data_path(self, raw_data_path: RawDataPath) -> Context:
81
- """
82
- Return a copy of the context with the given raw data path object
83
- """
84
- return Context(self.data.replace(raw_data_path=raw_data_path))
85
-
86
- def get_report(self) -> Optional[Report]:
87
- """
88
- Returns a report if within a task context, else a None
89
- :return:
90
- """
91
- if self.data.task_context:
92
- return self.data.task_context.report
93
- return None
94
-
95
- def is_task_context(self) -> bool:
96
- """
97
- Returns true if the context is a task context
98
- :return:
99
- """
100
- return self.data.task_context is not None
101
-
102
- def __enter__(self):
103
- """Enter the context, setting it as the current context."""
104
- self._token = root_context_var.set(self)
105
- return self
106
-
107
- def __exit__(self, exc_type, exc_val, exc_tb):
108
- """Exit the context, restoring the previous context."""
109
- root_context_var.reset(self._token)
110
-
111
- async def __aenter__(self):
112
- """Async version of context entry."""
113
- self._token = root_context_var.set(self)
114
- return self
115
-
116
- async def __aexit__(self, exc_type, exc_val, exc_tb):
117
- """Async version of context exit."""
118
- root_context_var.reset(self._token)
119
-
120
- def __repr__(self):
121
- return f"{self.data}"
122
-
123
- def __str__(self):
124
- return self.__repr__()
125
-
126
-
127
- # Global context variable to hold the current context
128
- root_context_var = contextvars.ContextVar("root", default=Context(data=ContextData()))
129
-
130
-
131
- def ctx() -> Optional[TaskContext]:
132
- """Retrieve the current task context from the context variable."""
133
- return internal_ctx().data.task_context
134
-
135
-
136
- def internal_ctx() -> Context:
137
- """Retrieve the current context from the context variable."""
138
- return root_context_var.get()
139
-
140
-
141
- async def contextual_run(func: Callable[P, R], *args: P.args, **kwargs: P.kwargs) -> R:
142
- """
143
- Run a function with a new context subtree.
144
- """
145
- _ctx = contextvars.copy_context()
146
- return await _ctx.run(func, *args, **kwargs)
union/_datastructures.py DELETED
@@ -1,295 +0,0 @@
1
- from __future__ import annotations
2
-
3
- import inspect
4
- import os
5
- import pathlib
6
- import tempfile
7
- from dataclasses import dataclass, field, replace
8
- from typing import TYPE_CHECKING, Any, Callable, Dict, Optional, Tuple, Type
9
-
10
- from union._docstring import Docstring
11
- from union._interface import extract_return_annotation
12
- from union._logging import logger
13
- from union._utils.helpers import base62_encode
14
-
15
- if TYPE_CHECKING:
16
- from union._internal.imagebuild.image_builder import ImageCache
17
- from union.report import Report
18
-
19
-
20
- def generate_random_name() -> str:
21
- """
22
- Generate a random name for the task. This is used to create unique names for tasks.
23
- TODO we can use unique-namer in the future, for now its just guids
24
- """
25
- from uuid import uuid4
26
-
27
- return str(uuid4()) # Placeholder for actual random name generation logic
28
-
29
-
30
- @dataclass(frozen=True, kw_only=True)
31
- class ActionID:
32
- """
33
- A class representing the ID of an Action, nested within a Run. This is used to identify a specific action on a task.
34
- """
35
-
36
- name: str
37
- run_name: str | None = None
38
- project: str | None = None
39
- domain: str | None = None
40
- org: str | None = None
41
-
42
- def __post_init__(self):
43
- if self.run_name is None:
44
- object.__setattr__(self, "run_name", self.name)
45
-
46
- @classmethod
47
- def create_random(cls):
48
- name = generate_random_name()
49
- return cls(name=name, run_name=name)
50
-
51
- def new_sub_action(self, name: str | None = None) -> ActionID:
52
- """
53
- Create a new sub-run with the given name. If name is None, a random name will be generated.
54
- """
55
- if name is None:
56
- name = generate_random_name()
57
- return replace(self, name=name)
58
-
59
- def new_sub_action_from(self, input_hash: str, group: str | None) -> ActionID:
60
- """Make a deterministic name"""
61
- import hashlib
62
-
63
- components = f"{self.run_name}-{self.name}-{input_hash}" + (f"-{group}" if group else "")
64
- # has the components into something deterministic
65
- bytes_digest = hashlib.md5(components.encode()).digest()
66
- new_name = base62_encode(bytes_digest)
67
- return self.new_sub_action(new_name)
68
-
69
-
70
- @dataclass(frozen=True, kw_only=True)
71
- class RawDataPath:
72
- """
73
- A class representing the raw data path for a task. This is used to store the raw data for the task execution and
74
- also get mutations on the path.
75
- """
76
-
77
- path: str
78
-
79
- @classmethod
80
- def from_local_folder(cls, local_folder: str | pathlib.Path | None = None) -> RawDataPath:
81
- """
82
- Create a new context attribute object, with local path given. Will be created if it doesn't exist.
83
- :return: Path to the temporary directory
84
- """
85
- match local_folder:
86
- case pathlib.Path():
87
- local_folder.mkdir(parents=True, exist_ok=True)
88
- return RawDataPath(path=str(local_folder))
89
- case None:
90
- # Create a temporary directory for data storage
91
- p = tempfile.mkdtemp()
92
- logger.debug(f"Creating temporary directory for data storage: {p}")
93
- return RawDataPath(path=p)
94
- case str():
95
- return RawDataPath(path=local_folder)
96
- case _:
97
- raise ValueError(f"Invalid local path {local_folder}")
98
-
99
- def get_random_remote_path(self, file_name: Optional[str] = None) -> str:
100
- """
101
- Returns a random path for uploading a file/directory to.
102
-
103
- :param file_name: If given, will be joined after a randomly generated portion.
104
- :return:
105
- """
106
- import random
107
- from uuid import UUID
108
-
109
- import fsspec
110
- from fsspec.utils import get_protocol
111
-
112
- random_string = UUID(int=random.getrandbits(128)).hex
113
- file_prefix = self.path
114
-
115
- protocol = get_protocol(file_prefix)
116
- if "file" in protocol:
117
- local_path = pathlib.Path(file_prefix) / random_string
118
- if file_name:
119
- # Only if file name is given do we create the parent, because it may be needed as a folder otherwise
120
- local_path = local_path / file_name
121
- if not local_path.exists():
122
- local_path.parent.mkdir(exist_ok=True, parents=True)
123
- local_path.touch()
124
- return str(local_path.absolute())
125
-
126
- fs = fsspec.filesystem(protocol)
127
- if file_prefix.endswith(fs.sep):
128
- file_prefix = file_prefix[:-1]
129
- remote_path = fs.sep.join([file_prefix, random_string])
130
- if file_name:
131
- remote_path = fs.sep.join([remote_path, file_name])
132
- return remote_path
133
-
134
-
135
- @dataclass(frozen=True)
136
- class GroupData:
137
- name: str
138
-
139
-
140
- @dataclass(frozen=True, kw_only=True)
141
- class TaskContext:
142
- """
143
- A context class to hold the current task executions context.
144
- This can be used to access various contextual parameters in the task execution by the user.
145
-
146
- :param action: The action ID of the current execution. This is always set, within a run.
147
- :param version: The version of the executed task. This is set when the task is executed by an action and will be
148
- set on all sub-actions.
149
- """
150
-
151
- action: ActionID
152
- version: str
153
- raw_data_path: RawDataPath
154
- output_path: str
155
- report: Report | None = None # This field is available if reports are enabled
156
- group_data: GroupData | None = None
157
- checkpoints: Checkpoints | None = None
158
- code_bundle: CodeBundle | None = None
159
- compiled_image_cache: ImageCache | None = None
160
- data: Dict[str, Any] = field(default_factory=dict)
161
-
162
- def replace(self, **kwargs) -> TaskContext:
163
- if "data" in kwargs:
164
- rec_data = kwargs.pop("data")
165
- if rec_data is None:
166
- return replace(self, **kwargs)
167
- data = {}
168
- if self.data is not None:
169
- data = self.data.copy()
170
- data.update(rec_data)
171
- kwargs.update({"data": data})
172
- return replace(self, **kwargs)
173
-
174
- def __getitem__(self, key: str) -> Optional[Any]:
175
- return self.data.get(key)
176
-
177
-
178
- @dataclass(frozen=True, kw_only=True)
179
- class CodeBundle:
180
- """
181
- A class representing a code bundle for a task. This is used to package the code and the inflation path.
182
- The code bundle computes the version of the code using the hash of the code.
183
-
184
- :param computed_version: The version of the code bundle. This is the hash of the code.
185
- :param destination: The destination path for the code bundle to be inflated to.
186
- :param tgz: Optional path to the tgz file.
187
- :param pkl: Optional path to the pkl file.
188
- :param downloaded_path: The path to the downloaded code bundle. This is only available during runtime, when
189
- the code bundle has been downloaded and inflated.
190
- """
191
-
192
- computed_version: str
193
- destination: str = "."
194
- tgz: str | None = None
195
- pkl: str | None = None
196
- downloaded_path: pathlib.Path | None = None
197
-
198
- # runtime_dependencies: Tuple[str, ...] = field(default_factory=tuple) In the future if we want we could add this
199
- # but this messes up actors, spark etc
200
-
201
- def __post_init__(self):
202
- if self.tgz is None and self.pkl is None:
203
- raise ValueError("Either tgz or pkl must be provided")
204
-
205
- def with_downloaded_path(self, path: pathlib.Path) -> CodeBundle:
206
- """
207
- Create a new CodeBundle with the given downloaded path.
208
- """
209
- return replace(self, downloaded_path=path)
210
-
211
-
212
- @dataclass(frozen=True)
213
- class Checkpoints:
214
- """
215
- A class representing the checkpoints for a task. This is used to store the checkpoints for the task execution.
216
- """
217
-
218
- prev_checkpoint_path: str | None
219
- checkpoint_path: str | None
220
-
221
-
222
- @dataclass(frozen=True)
223
- class NativeInterface:
224
- """
225
- A class representing the native interface for a task. This is used to interact with the task and its execution
226
- context.
227
- """
228
-
229
- inputs: Dict[str, Tuple[Type, Any]]
230
- outputs: Dict[str, Type]
231
- docstring: Optional[Docstring] = field(default=(None,))
232
-
233
- @classmethod
234
- def from_callable(cls, func: Callable) -> NativeInterface:
235
- """
236
- Extract the native interface from the given function. This is used to create a native interface for the task.
237
- """
238
- sig = inspect.signature(func)
239
-
240
- # Extract parameter details (name, type, default value)
241
- param_info = {name: (param.annotation, param.default) for name, param in sig.parameters.items()}
242
-
243
- # Get return type
244
- outputs = extract_return_annotation(sig.return_annotation)
245
- return cls(inputs=param_info, outputs=outputs)
246
-
247
- def convert_to_kwargs(self, *args, **kwargs) -> Dict[str, Any]:
248
- """
249
- Convert the given arguments to keyword arguments based on the native interface. This is used to convert the
250
- arguments to the correct types for the task execution.
251
- """
252
- # Convert positional arguments to keyword arguments
253
- if len(args) > len(self.inputs):
254
- raise ValueError(f"Too many positional arguments provided, inputs {self.inputs.keys()}, args {len(args)}")
255
- for arg, input_name in zip(args, self.inputs.keys()):
256
- kwargs[input_name] = arg
257
- return kwargs
258
-
259
- def get_input_types(self) -> Dict[str, Type]:
260
- """
261
- Get the input types for the task. This is used to get the types of the inputs for the task execution.
262
- """
263
- return {k: v[0] for k, v in self.inputs.items()}
264
-
265
-
266
- @dataclass
267
- class SerializationContext:
268
- """
269
- This object holds serialization time contextual information, that can be used when serializing the task and
270
- various parameters of a tasktemplate. This is only available when the task is being serialized and can be
271
- during a deployment or runtime.
272
-
273
- :param version: The version of the task
274
- :param code_bundle: The code bundle for the task. This is used to package the code and the inflation path.
275
- :param input_path: The path to the inputs for the task. This is used to determine where the inputs will be located
276
- :param output_path: The path to the outputs for the task. This is used to determine where the outputs will be
277
- located
278
- """
279
-
280
- version: str
281
- project: str | None = None
282
- domain: str | None = None
283
- org: str | None = None
284
- code_bundle: Optional[CodeBundle] = None
285
- input_path: str = "{{.input}}"
286
- output_path: str = "{{.outputPrefix}}"
287
- _entrypoint_path: str = field(default="_bin/runtime.py", init=False)
288
- image_cache: ImageCache | None = None
289
-
290
- def get_entrypoint_path(self, interpreter_path: str) -> str:
291
- """
292
- Get the entrypoint path for the task. This is used to determine the entrypoint for the task execution.
293
- :param interpreter_path: The path to the interpreter (python)
294
- """
295
- return os.path.join(os.path.dirname(os.path.dirname(interpreter_path)), self._entrypoint_path)