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,24 +0,0 @@
1
- from asyncio import Protocol
2
- from typing import List
3
-
4
- from union._task import TaskTemplate
5
-
6
-
7
- class Resolver(Protocol):
8
- """
9
- Resolver interface for loading tasks. This interface should be implemented by Resolvers.
10
- """
11
-
12
- @property
13
- def import_path(self) -> str: ...
14
-
15
- def load_task(self, loader_args: List[str]) -> TaskTemplate:
16
- """
17
- Given the set of identifier keys, should return one TaskTemplate or raise an error if not found
18
- """
19
-
20
- def loader_args(self, t: TaskTemplate) -> List[str]:
21
- """
22
- Return a list of strings that can help identify the parameter TaskTemplate. Each string should not have
23
- spaces or special characters. This is used to identify the task in the resolver.
24
- """
@@ -1,27 +0,0 @@
1
- import importlib
2
- from typing import List
3
-
4
- from union._internal.resolvers._task_module import extract_task_module
5
- from union._internal.resolvers.common import Resolver
6
- from union._task import TaskTemplate
7
-
8
-
9
- class DefaultTaskResolver(Resolver):
10
- """
11
- Please see the notes in the TaskResolverMixin as it describes this default behavior.
12
- """
13
-
14
- @property
15
- def import_path(self) -> str:
16
- return "union._internal.resolvers.default.DefaultTaskResolver"
17
-
18
- def load_task(self, loader_args: List[str]) -> TaskTemplate:
19
- _, task_module, _, task_name, *_ = loader_args
20
-
21
- task_module = importlib.import_module(name=task_module) # type: ignore
22
- task_def = getattr(task_module, task_name)
23
- return task_def
24
-
25
- def loader_args(self, task: TaskTemplate) -> List[str]: # type:ignore
26
- t, m = extract_task_module(task)
27
- return ["mod", m, "instance", t]
File without changes
@@ -1,163 +0,0 @@
1
- from dataclasses import dataclass
2
- from typing import Any, Dict, Tuple, Union
3
-
4
- from flyteidl.core import execution_pb2, literals_pb2
5
-
6
- import union.errors
7
- from union._datastructures import NativeInterface
8
- from union._protos.workflow import run_definition_pb2
9
- from union.types import TypeEngine
10
-
11
-
12
- @dataclass(frozen=True)
13
- class Inputs:
14
- proto_inputs: run_definition_pb2.Inputs
15
-
16
-
17
- @dataclass(frozen=True)
18
- class Outputs:
19
- proto_outputs: run_definition_pb2.Outputs
20
-
21
-
22
- @dataclass
23
- class Error:
24
- err: execution_pb2.ExecutionError
25
-
26
-
27
- # ------------------------------- CONVERT Methods ------------------------------- #
28
-
29
-
30
- def _clean_error_code(code: str) -> Tuple[str, str | None]:
31
- """
32
- The error code may have a server injected code and is of the form `RetriesExhausedError|<code>` or `<code>`.
33
-
34
- :param code:
35
- :return: "user code", optional server code
36
- """
37
- if "|" in code:
38
- server_code, user_code = code.split("|", 1)
39
- return user_code.strip(), server_code.strip()
40
- return code.strip(), None
41
-
42
-
43
- async def convert_inputs_to_native(inputs: Inputs, python_interface: NativeInterface) -> Dict[str, Any]:
44
- literals = {named_literal.name: named_literal.value for named_literal in inputs.proto_inputs.literals}
45
- inputs = await TypeEngine.literal_map_to_kwargs(
46
- literals_pb2.LiteralMap(literals=literals), python_interface.get_input_types()
47
- )
48
- return inputs
49
-
50
-
51
- async def convert_from_native_to_inputs(interface: NativeInterface, *args, **kwargs) -> Inputs:
52
- kwargs = interface.convert_to_kwargs(*args, **kwargs)
53
- literal_map = await TypeEngine.dict_to_literal_map(kwargs, interface.get_input_types())
54
- return Inputs(
55
- proto_inputs=run_definition_pb2.Inputs(
56
- literals=[run_definition_pb2.NamedLiteral(name=k, value=v) for k, v in literal_map.literals.items()]
57
- )
58
- )
59
-
60
-
61
- async def convert_from_native_to_outputs(o: Any, interface: NativeInterface) -> Outputs:
62
- # Always make it a tuple even if it's just one item to simplify logic below
63
- if not isinstance(o, tuple):
64
- o = (o,)
65
-
66
- assert len(interface.outputs) == len(interface.outputs), (
67
- f"Received {len(o)} outputs but interface has {len(interface.outputs)}"
68
- )
69
- named = []
70
- for (output_name, python_type), v in zip(interface.outputs.items(), o):
71
- lit = await TypeEngine.to_literal(v, python_type, TypeEngine.to_literal_type(python_type))
72
- named.append(run_definition_pb2.NamedLiteral(name=output_name, value=lit))
73
-
74
- return Outputs(proto_outputs=run_definition_pb2.Outputs(literals=named))
75
-
76
-
77
- async def convert_outputs_to_native(interface: NativeInterface, outputs: Outputs) -> Union[Any, Tuple[Any, ...]]:
78
- lm = literals_pb2.LiteralMap(
79
- literals={named_literal.name: named_literal.value for named_literal in outputs.proto_outputs.literals}
80
- )
81
- kwargs = await TypeEngine.literal_map_to_kwargs(lm, interface.outputs)
82
- if len(kwargs) == 0:
83
- return None
84
- elif len(kwargs) == 1:
85
- return next(iter(kwargs.values()))
86
- else:
87
- # Return as tuple if multiple outputs, make sure to order correctly as it seems proto maps can change ordering
88
- return tuple(kwargs[k] for k in interface.outputs.keys())
89
-
90
-
91
- def convert_error_to_native(err: execution_pb2.ExecutionError | Exception | Error) -> BaseException | None:
92
- if not err:
93
- return None
94
-
95
- if isinstance(err, Exception):
96
- return err
97
-
98
- if isinstance(err, Error):
99
- err = err.err
100
-
101
- user_code, server_code = _clean_error_code(err.code)
102
- match err.kind:
103
- case execution_pb2.ExecutionError.UNKNOWN:
104
- return union.errors.RuntimeUnknownError(code=user_code, message=err.message, worker=err.worker)
105
- case execution_pb2.ExecutionError.USER:
106
- if "OOM" in err.code.upper():
107
- return union.errors.OOMError(code=user_code, message=err.message, worker=err.worker)
108
- elif "Interrupted" in err.code:
109
- return union.errors.TaskInterruptedError(code=user_code, message=err.message, worker=err.worker)
110
- elif "PrimaryContainerNotFound" in err.code:
111
- return union.errors.PrimaryContainerNotFoundError(
112
- code=user_code, message=err.message, worker=err.worker
113
- )
114
- elif "RetriesExhausted" in err.code:
115
- return union.errors.RetriesExhaustedError(code=user_code, message=err.message, worker=err.worker)
116
- elif "Unknown" in err.code:
117
- return union.errors.RuntimeUnknownError(code=user_code, message=err.message, worker=err.worker)
118
- elif "InvalidImageName" in err.code:
119
- return union.errors.InvalidImageNameError(code=user_code, message=err.message, worker=err.worker)
120
- elif "ImagePullBackOff" in err.code:
121
- return union.errors.ImagePullBackOffError(code=user_code, message=err.message, worker=err.worker)
122
- return union.errors.RuntimeUserError(code=user_code, message=err.message, worker=err.worker)
123
- case execution_pb2.ExecutionError.SYSTEM:
124
- return union.errors.RuntimeSystemError(code=user_code, message=err.message, worker=err.worker)
125
-
126
-
127
- def convert_from_native_to_error(err: BaseException) -> Error:
128
- if isinstance(err, union.errors.RuntimeUnknownError):
129
- return Error(
130
- err=execution_pb2.ExecutionError(
131
- kind=execution_pb2.ExecutionError.UNKNOWN,
132
- code=err.code,
133
- message=str(err),
134
- worker=err.worker,
135
- )
136
- )
137
- elif isinstance(err, union.errors.RuntimeUserError):
138
- return Error(
139
- err=execution_pb2.ExecutionError(
140
- kind=execution_pb2.ExecutionError.USER,
141
- code=err.code,
142
- message=str(err),
143
- worker=err.worker,
144
- )
145
- )
146
- elif isinstance(err, union.errors.RuntimeSystemError):
147
- return Error(
148
- err=execution_pb2.ExecutionError(
149
- kind=execution_pb2.ExecutionError.SYSTEM,
150
- code=err.code,
151
- message=str(err),
152
- worker=err.worker,
153
- )
154
- )
155
- else:
156
- return Error(
157
- err=execution_pb2.ExecutionError(
158
- kind=execution_pb2.ExecutionError.UNKNOWN,
159
- code=type(err).__name__,
160
- message=str(err),
161
- worker="UNKNOWN",
162
- )
163
- )
@@ -1,121 +0,0 @@
1
- from typing import List, Optional, Tuple
2
-
3
- from union._code_bundle import download_bundle
4
- from union._context import contextual_run
5
- from union._datastructures import ActionID, Checkpoints, CodeBundle, RawDataPath
6
- from union._internal import Controller
7
- from union._internal.imagebuild.image_builder import ImageCache
8
- from union._logging import logger
9
- from union._task import TaskTemplate
10
-
11
- from .convert import Error, Inputs, Outputs
12
- from .task_serde import load_task
13
- from .taskrunner import (
14
- convert_and_run,
15
- extract_download_run_upload,
16
- )
17
-
18
-
19
- async def direct_dispatch(
20
- task: TaskTemplate,
21
- *,
22
- action: ActionID,
23
- raw_data_path: RawDataPath,
24
- controller: Controller,
25
- version: str,
26
- checkpoints: Checkpoints | None = None,
27
- code_bundle: CodeBundle | None = None,
28
- inputs: Inputs | None = None,
29
- output_path: str | None = None,
30
- ) -> Tuple[Outputs, Optional[Error]]:
31
- """
32
- This method is used today by the local_controller and is positioned to be used by a rust core in the future.
33
- The caller, loads the task and invokes this method. This method is used to convert the inputs to native types,
34
- The reason for this is that the rust entrypoint will not have access to the python context, and
35
- will not be able to run the tasks in the context tree.
36
- """
37
- return await contextual_run(
38
- convert_and_run,
39
- task=task,
40
- inputs=inputs,
41
- action=action,
42
- raw_data_path=raw_data_path,
43
- checkpoints=checkpoints,
44
- code_bundle=code_bundle,
45
- controller=controller,
46
- version=version,
47
- output_path=output_path,
48
- )
49
-
50
-
51
- async def _download_and_load_task(
52
- code_bundle: CodeBundle | None, resolver: str, resolver_args: List[str]
53
- ) -> TaskTemplate:
54
- if code_bundle and (code_bundle.tgz or code_bundle.pkl):
55
- logger.debug(f"Downloading {code_bundle}")
56
- downloaded_path = await download_bundle(code_bundle)
57
- code_bundle = code_bundle.with_downloaded_path(downloaded_path)
58
- if code_bundle.pkl:
59
- try:
60
- logger.debug(f"Loading task from pkl: {code_bundle.downloaded_path}")
61
- import gzip
62
-
63
- import cloudpickle
64
-
65
- with gzip.open(code_bundle.downloaded_path, "rb") as f:
66
- return cloudpickle.load(f)
67
- except Exception as e:
68
- logger.exception(f"Failed to load pickled task from {code_bundle.downloaded_path}. Reason: {e!s}")
69
- raise
70
- logger.debug(
71
- f"Loading task from tgz: {code_bundle.downloaded_path}, resolver: {resolver}, args: {resolver_args}"
72
- )
73
- return load_task(resolver, *resolver_args)
74
- logger.debug(f"No code bundle provided, loading task from resolver: {resolver}, args: {resolver_args}")
75
- return load_task(resolver, *resolver_args)
76
-
77
-
78
- async def load_and_run_task(
79
- action: ActionID,
80
- raw_data_path: RawDataPath,
81
- output_path: str,
82
- version: str,
83
- controller: Controller,
84
- resolver: str | None = None,
85
- resolver_args: List[str] | None = None,
86
- checkpoints: Checkpoints | None = None,
87
- code_bundle: CodeBundle | None = None,
88
- input_path: str | None = None,
89
- image_cache: ImageCache | None = None,
90
- ):
91
- """
92
- This method is invoked from the runtime/CLI and is used to run a task. This creates the context tree,
93
- for the tasks to run in. It also handles the loading of the task.
94
-
95
- :param controller: Controller to use for the task.
96
- :param resolver: The resolver to use to load the task.
97
- :param resolver_args: The arguments to pass to the resolver.
98
- :param action: The ActionID to use for the task.
99
- :param raw_data_path: The raw data path to use for the task.
100
- :param output_path: The output path to use for the task.
101
- :param version: The version of the task to run.
102
- :param checkpoints: The checkpoints to use for the task.
103
- :param code_bundle: The code bundle to use for the task.
104
- :param input_path: The input path to use for the task.
105
- :param image_cache: Mappings of Image identifiers to image URIs.
106
- """
107
- task = await _download_and_load_task(code_bundle, resolver, resolver_args)
108
-
109
- await contextual_run(
110
- extract_download_run_upload,
111
- task,
112
- action=action,
113
- version=version,
114
- controller=controller,
115
- raw_data_path=raw_data_path,
116
- output_path=output_path,
117
- checkpoints=checkpoints,
118
- code_bundle=code_bundle,
119
- input_path=input_path,
120
- image_cache=image_cache,
121
- )
@@ -1,136 +0,0 @@
1
- """
2
- This module contains the methods for uploading and downloading inputs and outputs.
3
- It uses the storage module to handle the actual uploading and downloading of files.
4
-
5
- TODO: Convert to use streaming apis
6
- """
7
-
8
- import logging
9
-
10
- from flyteidl.core import errors_pb2, execution_pb2
11
-
12
- import union.storage as storage
13
- from union._protos.workflow import run_definition_pb2
14
-
15
- from ..._logging import log
16
- from .convert import Inputs, Outputs, _clean_error_code
17
-
18
- # ------------------------------- CONSTANTS ------------------------------- #
19
- _INPUTS_FILE_NAME = "inputs.pb"
20
- _OUTPUTS_FILE_NAME = "outputs.pb"
21
- _CHECKPOINT_FILE_NAME = "_flytecheckpoints"
22
- _ERROR_FILE_NAME = "error.pb"
23
- _REPORT_FILE_NAME = "report.html"
24
- _PKL_FILE_NAME = "code_bundle.pkl.gz"
25
-
26
-
27
- def pkl_path(base_path: str) -> str:
28
- return storage.join(base_path, _PKL_FILE_NAME)
29
-
30
-
31
- def inputs_path(base_path: str) -> str:
32
- return storage.join(base_path, _INPUTS_FILE_NAME)
33
-
34
-
35
- def outputs_path(base_path: str) -> str:
36
- return storage.join(base_path, _OUTPUTS_FILE_NAME)
37
-
38
-
39
- def error_path(base_path: str) -> str:
40
- return storage.join(base_path, _ERROR_FILE_NAME)
41
-
42
-
43
- def report_path(base_path: str) -> str:
44
- return storage.join(base_path, _REPORT_FILE_NAME)
45
-
46
-
47
- # ------------------------------- UPLOAD Methods ------------------------------- #
48
-
49
-
50
- async def upload_inputs(inputs: Inputs, input_path: str):
51
- """
52
- :param Inputs inputs: Inputs
53
- :param str input_path: The path to upload the input file.
54
- """
55
- await storage.put_stream(data_iterable=inputs.proto_inputs.SerializeToString(), to_path=input_path)
56
-
57
-
58
- async def upload_outputs(outputs: Outputs, output_path: str):
59
- """
60
- :param outputs: Outputs
61
- :param output_path: The path to upload the output file.
62
- """
63
- output_uri = outputs_path(output_path)
64
- await storage.put_stream(data_iterable=outputs.proto_outputs.SerializeToString(), to_path=output_uri)
65
-
66
-
67
- async def upload_error(err: execution_pb2.ExecutionError, output_prefix: str):
68
- """
69
- :param err: execution_pb2.ExecutionError
70
- :param output_prefix: The output prefix of the remote uri.
71
- """
72
- # TODO - clean this up + conditionally set kind
73
- error_document = errors_pb2.ErrorDocument(
74
- error=errors_pb2.ContainerError(
75
- code=err.code,
76
- message=err.message,
77
- kind=errors_pb2.ContainerError.RECOVERABLE,
78
- origin=err.kind,
79
- timestamp=err.timestamp,
80
- worker=err.worker,
81
- )
82
- )
83
- error_uri = error_path(output_prefix)
84
- await storage.put_stream(data_iterable=error_document.SerializeToString(), to_path=error_uri)
85
-
86
-
87
- # ------------------------------- DOWNLOAD Methods ------------------------------- #
88
- @log(level=logging.INFO)
89
- async def load_inputs(path: str) -> Inputs:
90
- """
91
- :param path: Input file to be downloaded
92
- :return: Inputs object
93
- """
94
- lm = run_definition_pb2.Inputs()
95
- proto_str = b"".join([c async for c in storage.get_stream(path=path)])
96
- lm.ParseFromString(proto_str)
97
- return Inputs(proto_inputs=lm)
98
-
99
-
100
- async def load_outputs(path: str) -> Outputs:
101
- """
102
- :param path: output file to be loaded
103
- :return: Outputs object
104
- """
105
- lm = run_definition_pb2.Outputs()
106
- proto_str = b"".join([c async for c in storage.get_stream(path=path)])
107
- lm.ParseFromString(proto_str)
108
- return Outputs(proto_outputs=lm)
109
-
110
-
111
- async def load_error(path: str) -> execution_pb2.ExecutionError:
112
- """
113
- :param path: error file to be downloaded
114
- :return: execution_pb2.ExecutionError
115
- """
116
- err = errors_pb2.ErrorDocument()
117
- proto_str = b"".join([c async for c in storage.get_stream(path=path)])
118
- err.ParseFromString(proto_str)
119
-
120
- if err.error is not None:
121
- user_code, server_code = _clean_error_code(err.error.code)
122
- return execution_pb2.ExecutionError(
123
- code=user_code,
124
- message=err.error.message,
125
- kind=err.error.origin,
126
- error_uri=path,
127
- timestamp=err.error.timestamp,
128
- worker=err.error.worker,
129
- )
130
-
131
- return execution_pb2.ExecutionError(
132
- code="Unknown",
133
- message=f"Received unloadable error from path {path}",
134
- kind=execution_pb2.ExecutionError.SYSTEM,
135
- error_uri=path,
136
- )
@@ -1,134 +0,0 @@
1
- from typing import List, Optional, Tuple
2
-
3
- from flyteidl.core import tasks_pb2
4
-
5
- from union._resources import CPUBaseType, Resources
6
-
7
- ACCELERATOR_DEVICE_MAP = {
8
- "A100": "nvidia-tesla-a100",
9
- "A100 80G": "nvidia-a100-80gb",
10
- "A10": "nvidia-a10",
11
- "A10G": "nvidia-a10g",
12
- "A100G": "nvidia-a100g",
13
- "L4": "nvidia-l4",
14
- "L40s": "nvidia-l40",
15
- "L4_VWS": "nvidia-l4-vws",
16
- "K80": "nvidia-tesla-k80",
17
- "M60": "nvidia-tesla-m60",
18
- "P4": "nvidia-tesla-p4",
19
- "P100": "nvidia-tesla-p100",
20
- "T4": "nvidia-tesla-t4",
21
- "V100": "nvidia-tesla-v100",
22
- "V5E": "tpu-v5-lite-podslice",
23
- "V5P": "tpu-v5p-slice",
24
- "V6E": "tpu-v6e-slice",
25
- }
26
-
27
-
28
- def _get_cpu_resource_entry(cpu: CPUBaseType) -> tasks_pb2.Resources.ResourceEntry:
29
- return tasks_pb2.Resources.ResourceEntry(
30
- name=tasks_pb2.Resources.ResourceName.CPU,
31
- value=str(cpu),
32
- )
33
-
34
-
35
- def _get_memory_resource_entry(memory: str) -> tasks_pb2.Resources.ResourceEntry:
36
- return tasks_pb2.Resources.ResourceEntry(
37
- name=tasks_pb2.Resources.ResourceName.MEMORY,
38
- value=memory,
39
- )
40
-
41
-
42
- def _get_gpu_resource_entry(gpu: int) -> tasks_pb2.Resources.ResourceEntry:
43
- return tasks_pb2.Resources.ResourceEntry(
44
- name=tasks_pb2.Resources.ResourceName.GPU,
45
- value=str(gpu),
46
- )
47
-
48
-
49
- def _get_gpu_extended_resource_entry(resources: Resources) -> Optional[tasks_pb2.GPUAccelerator]:
50
- if resources is None:
51
- return None
52
- if resources.gpu is None or isinstance(resources.gpu, int):
53
- return None
54
- device = resources.get_device()
55
- if device.device not in ACCELERATOR_DEVICE_MAP:
56
- raise ValueError(f"GPU of type {device.device} unknown, cannot map to device name")
57
- return tasks_pb2.GPUAccelerator(
58
- device=ACCELERATOR_DEVICE_MAP[device.device],
59
- partition_size=device.partition if device.partition else None,
60
- )
61
-
62
-
63
- def _get_disk_resource_entry(disk: str) -> tasks_pb2.Resources.ResourceEntry:
64
- return tasks_pb2.Resources.ResourceEntry(
65
- name=tasks_pb2.Resources.ResourceName.EPHEMERAL_STORAGE,
66
- value=disk,
67
- )
68
-
69
-
70
- def get_proto_extended_resources(resources: Resources) -> Optional[tasks_pb2.ExtendedResources]:
71
- """
72
- TODO Implement partitioning logic string handling for GPU
73
- :param resources:
74
- """
75
- if resources is None:
76
- return None
77
- acc = _get_gpu_extended_resource_entry(resources)
78
- shm = resources.get_shared_memory()
79
- if acc is None and shm is None:
80
- return None
81
- proto_shm = None
82
- if shm is not None:
83
- proto_shm = tasks_pb2.SharedMemory(
84
- mount_path="/dev/shm",
85
- mount_name="union-shm",
86
- size_limit=shm,
87
- )
88
- return tasks_pb2.ExtendedResources(gpu_accelerator=acc, shared_memory=proto_shm)
89
-
90
-
91
- def _convert_resources_to_resource_entries(
92
- resources: Resources | None,
93
- ) -> Tuple[List[tasks_pb2.Resources.ResourceEntry], List[tasks_pb2.Resources.ResourceEntry]]:
94
- request_entries, limit_entries = [], []
95
- if resources is None:
96
- return request_entries, limit_entries
97
- if resources.cpu is not None:
98
- if isinstance(resources.cpu, tuple):
99
- request_entries.append(_get_cpu_resource_entry(resources.cpu[0]))
100
- limit_entries.append(_get_cpu_resource_entry(resources.cpu[1]))
101
- else:
102
- request_entries.append(_get_cpu_resource_entry(resources.cpu))
103
-
104
- if resources.memory is not None:
105
- if isinstance(resources.memory, tuple):
106
- request_entries.append(_get_memory_resource_entry(resources.memory[0]))
107
- limit_entries.append(_get_memory_resource_entry(resources.memory[1]))
108
- else:
109
- request_entries.append(_get_memory_resource_entry(resources.memory))
110
-
111
- if resources.gpu is not None:
112
- device = resources.get_device()
113
- request_entries.append(_get_gpu_resource_entry(device.quantity))
114
-
115
- if resources.disk is not None:
116
- request_entries.append(_get_disk_resource_entry(resources.disk))
117
-
118
- return request_entries, limit_entries
119
-
120
-
121
- def get_proto_resources(resources: Resources) -> Optional[tasks_pb2.Resources]:
122
- """
123
- Get main resources IDL representation from the resources object
124
-
125
- :param resources: User facing Resources object containing potentially both requests and limits
126
- :return: The given resources as requests and limits
127
- """
128
- request_entries, limit_entries = _convert_resources_to_resource_entries(resources)
129
- request_entries = request_entries if request_entries else None
130
- limit_entries = limit_entries if limit_entries else None
131
- if not request_entries and not limit_entries:
132
- return None
133
-
134
- return tasks_pb2.Resources(requests=request_entries, limits=limit_entries)