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/_secret.py CHANGED
@@ -7,30 +7,30 @@ from typing import List, Optional, Union
7
7
  @dataclass
8
8
  class Secret:
9
9
  """
10
- Secrets are used to inject sensitive information into tasks. Secrets can be mounted as environment variables or
11
- files. The secret key is the name of the secret in the secret store. The group is optional and maybe used with some
12
- secret stores to organize secrets. The secret_mount is used to specify how the secret should be mounted. If the
13
- secret_mount is set to "env" the secret will be mounted as an environment variable. If the secret_mount is set to
14
- "file" the secret will be mounted as a file. The as_env_var is an optional parameter that can be used to specify the
10
+ Secrets are used to inject sensitive information into tasks or image build context.
11
+ Secrets can be mounted as environment variables or files.
12
+ The secret key is the name of the secret in the secret store. The group is optional and maybe used with some
13
+ secret stores to organize secrets. The as_env_var is an optional parameter that can be used to specify the
15
14
  name of the environment variable that the secret should be mounted as.
16
15
 
17
16
  Example:
18
17
  ```python
19
- @task(secrets="MY_SECRET")
18
+ @task(secrets="my-secret")
20
19
  async def my_task():
21
- os.environ["MY_SECRET"] # This will be set to the value of the secret
20
+ # This will be set to the value of the secret. Note: The env var is always uppercase, and - is replaced with _.
21
+ os.environ["MY_SECRET"]
22
22
 
23
- @task(secrets=Secret("MY_SECRET", mount="/path/to/secret"))
23
+ @task(secrets=Secret("my-openai-api-key", as_env_var="OPENAI_API_KEY"))
24
24
  async def my_task2():
25
- async with open("/path/to/secret") as f:
26
- secret_value = f.read()
25
+ os.environ["OPENAI_API_KEY"]
27
26
  ```
28
27
 
29
28
  TODO: Add support for secret versioning (some stores) and secret groups (some stores) and mounting as files.
30
29
 
31
30
  :param key: The name of the secret in the secret store.
32
31
  :param group: The group of the secret in the secret store.
33
- :param mount: Use this to specify the path where the secret should be mounted.
32
+ :param mount: For now, the only supported mount path is "/etc/flyte/secrets".
33
+ TODO: support arbitrary mount paths. Today only "/etc/flyte/secrets" is supported
34
34
  :param as_env_var: The name of the environment variable that the secret should be mounted as.
35
35
  """
36
36
 
@@ -40,11 +40,38 @@ class Secret:
40
40
  as_env_var: Optional[str] = None
41
41
 
42
42
  def __post_init__(self):
43
+ if not self.mount and not self.as_env_var:
44
+ self.as_env_var = f"{self.group}_{self.key}" if self.group else self.key
45
+ self.as_env_var = self.as_env_var.replace("-", "_").upper()
46
+ if self.mount:
47
+ if str(self.mount) != "/etc/flyte/secrets":
48
+ raise ValueError("Only /etc/flyte/secrets is supported as secret mount path today.")
43
49
  if self.as_env_var is not None:
44
50
  pattern = r"^[A-Z_][A-Z0-9_]*$"
45
51
  if not re.match(pattern, self.as_env_var):
46
52
  raise ValueError(f"Invalid environment variable name: {self.as_env_var}, must match {pattern}")
47
53
 
54
+ def stable_hash(self) -> str:
55
+ """
56
+ Deterministic, process-independent hash (as hex string).
57
+ """
58
+ import hashlib
59
+
60
+ data = (
61
+ self.key,
62
+ self.group or "",
63
+ str(self.mount) if self.mount else "",
64
+ self.as_env_var or "",
65
+ )
66
+ joined = "|".join(data)
67
+ return hashlib.sha256(joined.encode("utf-8")).hexdigest()
68
+
69
+ def __hash__(self) -> int:
70
+ """
71
+ Deterministic hash function for the Secret class.
72
+ """
73
+ return int(self.stable_hash()[:16], 16)
74
+
48
75
 
49
76
  SecretRequest = Union[str, Secret, List[str | Secret]]
50
77
 
@@ -59,3 +86,12 @@ def secrets_from_request(secrets: SecretRequest) -> List[Secret]:
59
86
  return [secrets]
60
87
  else:
61
88
  return [Secret(key=s) if isinstance(s, str) else s for s in secrets]
89
+
90
+
91
+ if __name__ == "__main__":
92
+ # Example usage
93
+ secret1 = Secret(key="MY_SECRET", mount=pathlib.Path("/path/to/secret"), as_env_var="MY_SECRET_ENV")
94
+ secret2 = Secret(
95
+ key="ANOTHER_SECRET",
96
+ )
97
+ print(hash(secret1), hash(secret2))
flyte/_serve.py ADDED
@@ -0,0 +1,333 @@
1
+ from __future__ import annotations
2
+
3
+ import hashlib
4
+ import pathlib
5
+ from dataclasses import replace
6
+ from typing import TYPE_CHECKING, Optional
7
+
8
+ import cloudpickle
9
+
10
+ from flyte._initialize import get_init_config
11
+ from flyte._logging import LogFormat, logger
12
+ from flyte._tools import ipython_check
13
+ from flyte.models import SerializationContext
14
+ from flyte.syncify import syncify
15
+
16
+ if TYPE_CHECKING:
17
+ import flyte.io
18
+ from flyte.app import AppEnvironment
19
+ from flyte.remote import App
20
+
21
+ from ._code_bundle import CopyFiles
22
+
23
+
24
+ class _Serve:
25
+ """
26
+ Context manager for serving apps with custom configuration.
27
+
28
+ Similar to _Runner for tasks, but specifically for AppEnvironment serving.
29
+ """
30
+
31
+ def __init__(
32
+ self,
33
+ version: Optional[str] = None,
34
+ copy_style: CopyFiles = "loaded_modules",
35
+ dry_run: bool = False,
36
+ project: str | None = None,
37
+ domain: str | None = None,
38
+ env_vars: dict[str, str] | None = None,
39
+ parameter_values: dict[str, dict[str, str | flyte.io.File | flyte.io.Dir]] | None = None,
40
+ cluster_pool: str | None = None,
41
+ log_level: int | None = None,
42
+ log_format: LogFormat = "console",
43
+ interactive_mode: bool | None = None,
44
+ copy_bundle_to: pathlib.Path | None = None,
45
+ ):
46
+ """
47
+ Initialize serve context.
48
+
49
+ Args:
50
+ version: Optional version override for the app deployment
51
+ copy_style: Code bundle copy style (default: "loaded_modules")
52
+ dry_run: If True, don't actually deploy (default: False)
53
+ project: Optional project override
54
+ domain: Optional domain override
55
+ env_vars: Optional environment variables to inject into the app
56
+ parameter_values: Optional parameter values to inject into the app
57
+ cluster_pool: Optional cluster pool override
58
+ log_level: Optional log level to set for the app (e.g., logging.INFO)
59
+ log_format: Optional log format ("console" or "json", default: "console")
60
+ interactive_mode: If True, raises NotImplementedError (apps don't support interactive/notebook mode)
61
+ copy_bundle_to: When dry_run is True, the bundle will be copied to this location if specified
62
+ """
63
+ self._version = version
64
+ self._copy_style = copy_style
65
+ self._dry_run = dry_run
66
+ self._project = project
67
+ self._domain = domain
68
+ self._env_vars = env_vars or {}
69
+ self._parameter_values = parameter_values or {}
70
+ self._cluster_pool = cluster_pool
71
+ self._log_level = log_level
72
+ self._log_format = log_format
73
+ self._interactive_mode = interactive_mode if interactive_mode is not None else ipython_check()
74
+ self._copy_bundle_to = copy_bundle_to
75
+
76
+ @syncify
77
+ async def serve(self, app_env: "AppEnvironment") -> "App":
78
+ """
79
+ Serve an app with the configured context.
80
+
81
+ Args:
82
+ app_env: The app environment to serve
83
+
84
+ Returns:
85
+ Deployed and activated App instance
86
+
87
+ Raises:
88
+ NotImplementedError: If interactive mode is detected
89
+ """
90
+ from copy import deepcopy
91
+
92
+ from flyte.app import _deploy
93
+
94
+ from ._code_bundle import build_code_bundle, build_pkl_bundle
95
+ from ._deploy import build_images, plan_deploy
96
+
97
+ cfg = get_init_config()
98
+ project = self._project or cfg.project
99
+ domain = self._domain or cfg.domain
100
+
101
+ # Configure logging env vars (similar to _run.py)
102
+ env = self._env_vars.copy()
103
+ if env.get("LOG_LEVEL") is None:
104
+ if self._log_level:
105
+ env["LOG_LEVEL"] = str(self._log_level)
106
+ else:
107
+ env["LOG_LEVEL"] = str(logger.getEffectiveLevel())
108
+ env["LOG_FORMAT"] = self._log_format
109
+
110
+ # Update env_vars with logging configuration
111
+ self._env_vars = env
112
+
113
+ # Plan deployment
114
+ deployments = plan_deploy(app_env)
115
+ assert deployments
116
+ app_deployment = deployments[0]
117
+
118
+ # Build images
119
+ image_cache = await build_images.aio(app_env)
120
+ assert image_cache
121
+
122
+ # Build code bundle (tgz style)
123
+ if self._interactive_mode:
124
+ code_bundle = await build_pkl_bundle(
125
+ app_env,
126
+ upload_to_controlplane=not self._dry_run,
127
+ copy_bundle_to=self._copy_bundle_to,
128
+ )
129
+ else:
130
+ code_bundle = await build_code_bundle(
131
+ from_dir=cfg.root_dir,
132
+ dryrun=self._dry_run,
133
+ copy_style=self._copy_style,
134
+ copy_bundle_to=self._copy_bundle_to,
135
+ )
136
+
137
+ # Compute version
138
+ if self._version:
139
+ version = self._version
140
+ elif app_deployment.version:
141
+ version = app_deployment.version
142
+ else:
143
+ h = hashlib.md5()
144
+ h.update(cloudpickle.dumps(app_deployment.envs))
145
+ h.update(code_bundle.computed_version.encode("utf-8"))
146
+ h.update(cloudpickle.dumps(image_cache))
147
+ version = h.hexdigest()
148
+
149
+ # Create serialization context
150
+ sc = SerializationContext(
151
+ project=project,
152
+ domain=domain,
153
+ org=cfg.org,
154
+ code_bundle=code_bundle,
155
+ version=version,
156
+ image_cache=image_cache,
157
+ root_dir=cfg.root_dir,
158
+ )
159
+
160
+ # Inject parameter overrides from the serve
161
+ parameter_overrides = None
162
+ if app_env_parameter_values := self._parameter_values.get(app_env.name):
163
+ parameter_overrides = []
164
+ for parameter in app_env.parameters:
165
+ value = app_env_parameter_values.get(parameter.name, parameter.value)
166
+ parameter_overrides.append(replace(parameter, value=value))
167
+
168
+ # Deploy app
169
+ deployed_app = await _deploy._deploy_app(app_env, sc, parameter_overrides=parameter_overrides)
170
+ assert deployed_app
171
+
172
+ logger.warning(f"Deployed App, you can check the console at {deployed_app.url}")
173
+ # Mutate app_idl if env_vars or cluster_pool are provided
174
+ # This is a temporary solution until the update/create APIs support these attributes
175
+ if self._env_vars or self._cluster_pool:
176
+ from flyteidl2.core import literals_pb2
177
+
178
+ app_idl = deepcopy(deployed_app.pb2)
179
+
180
+ # TODO This should be part of the params!
181
+ # Update env_vars
182
+ if self._env_vars:
183
+ if app_idl.spec.container:
184
+ # Merge with existing env vars
185
+ if app_idl.spec.container.env:
186
+ existing_env = {kv.key: kv.value for kv in app_idl.spec.container.env}
187
+ else:
188
+ existing_env = {}
189
+ existing_env.update(self._env_vars)
190
+ app_idl.spec.container.env.extend(
191
+ [literals_pb2.KeyValuePair(key=k, value=v) for k, v in existing_env.items()]
192
+ )
193
+ elif app_idl.spec.pod:
194
+ # For pod specs, we'd need to update the containers in the pod
195
+ # This is more complex as it requires modifying the serialized pod_spec
196
+ raise NotImplementedError(
197
+ "Env var override for pod-based apps is not yet supported. "
198
+ "Please use container-based apps or set env_vars in the AppEnvironment definition."
199
+ )
200
+
201
+ # Update cluster_pool
202
+ if self._cluster_pool:
203
+ app_idl.spec.cluster_pool = self._cluster_pool
204
+
205
+ # Update the deployed app with mutated IDL
206
+ # Note: This is a workaround. Ideally, the API would support these fields directly
207
+ deployed_app = type(deployed_app)(pb2=app_idl)
208
+
209
+ # Watch for activation
210
+ return await deployed_app.watch.aio(wait_for="activated")
211
+
212
+
213
+ def with_servecontext(
214
+ version: Optional[str] = None,
215
+ copy_style: CopyFiles = "loaded_modules",
216
+ dry_run: bool = False,
217
+ project: str | None = None,
218
+ domain: str | None = None,
219
+ env_vars: dict[str, str] | None = None,
220
+ parameter_values: dict[str, dict[str, str | flyte.io.File | flyte.io.Dir]] | None = None,
221
+ cluster_pool: str | None = None,
222
+ log_level: int | None = None,
223
+ log_format: LogFormat = "console",
224
+ interactive_mode: bool | None = None,
225
+ copy_bundle_to: pathlib.Path | None = None,
226
+ ) -> _Serve:
227
+ """
228
+ Create a serve context with custom configuration.
229
+
230
+ This function allows you to customize how an app is served, including
231
+ overriding environment variables, cluster pool, logging, and other deployment settings.
232
+
233
+ Example:
234
+ ```python
235
+ import logging
236
+ import flyte
237
+ from flyte.app.extras import FastAPIAppEnvironment
238
+
239
+ env = FastAPIAppEnvironment(name="my-app", ...)
240
+
241
+ # Serve with custom env vars, logging, and cluster pool
242
+ app = flyte.with_servecontext(
243
+ env_vars={"DATABASE_URL": "postgresql://..."},
244
+ log_level=logging.DEBUG,
245
+ log_format="json",
246
+ cluster_pool="gpu-pool",
247
+ project="my-project",
248
+ domain="development",
249
+ ).serve(env)
250
+
251
+ print(f"App URL: {app.url}")
252
+ ```
253
+
254
+ Args:
255
+ version: Optional version override for the app deployment
256
+ copy_style: Code bundle copy style. Options: "loaded_modules", "all", "none" (default: "loaded_modules")
257
+ dry_run: If True, don't actually deploy (default: False)
258
+ project: Optional project override
259
+ domain: Optional domain override
260
+ env_vars: Optional environment variables to inject/override in the app container
261
+ parameter_values: Optional parameter values to inject/override in the app container. Must be a dictionary that
262
+ maps app environment names to a dictionary of parameter names to values.
263
+ cluster_pool: Optional cluster pool to deploy the app to
264
+ log_level: Optional log level (e.g., logging.DEBUG, logging.INFO). If not provided, uses init config or default
265
+ log_format: Optional log format ("console" or "json", default: "console")
266
+ interactive_mode: Optional, can be forced to True or False.
267
+ If not provided, it will be set based on the current environment. For example Jupyter notebooks are
268
+ considered interactive mode, while scripts are not. This is used to determine how the code bundle is
269
+ created. This is used to determine if the app should be served in interactive mode or not.
270
+ copy_bundle_to: When dry_run is True, the bundle will be copied to this location if specified
271
+
272
+ Returns:
273
+ _Serve: Serve context manager with configured settings
274
+
275
+ Raises:
276
+ NotImplementedError: If called from a notebook/interactive environment
277
+
278
+ Notes:
279
+ - Apps do not support pickle-based bundling (interactive mode)
280
+ - LOG_LEVEL and LOG_FORMAT are automatically set as env vars if not explicitly provided in env_vars
281
+ - The env_vars and cluster_pool overrides mutate the app IDL after creation
282
+ - This is a temporary solution until the API natively supports these fields
283
+ """
284
+ return _Serve(
285
+ version=version,
286
+ copy_style=copy_style,
287
+ dry_run=dry_run,
288
+ project=project,
289
+ domain=domain,
290
+ env_vars=env_vars,
291
+ parameter_values=parameter_values,
292
+ cluster_pool=cluster_pool,
293
+ log_level=log_level,
294
+ log_format=log_format,
295
+ interactive_mode=interactive_mode,
296
+ copy_bundle_to=copy_bundle_to,
297
+ )
298
+
299
+
300
+ @syncify
301
+ async def serve(app_env: "AppEnvironment") -> "App":
302
+ """
303
+ Serve a Flyte app using an AppEnvironment.
304
+
305
+ This is the simple, direct way to serve an app. For more control over
306
+ deployment settings (env vars, cluster pool, etc.), use with_servecontext().
307
+
308
+ Example:
309
+ ```python
310
+ import flyte
311
+ from flyte.app.extras import FastAPIAppEnvironment
312
+
313
+ env = FastAPIAppEnvironment(name="my-app", ...)
314
+
315
+ # Simple serve
316
+ app = flyte.serve(env)
317
+ print(f"App URL: {app.url}")
318
+ ```
319
+
320
+ Args:
321
+ app_env: The app environment to serve
322
+
323
+ Returns:
324
+ Deployed and activated App instance
325
+
326
+ Raises:
327
+ NotImplementedError: If called from a notebook/interactive environment
328
+
329
+ See Also:
330
+ with_servecontext: For customizing deployment settings
331
+ """
332
+ # Use default serve context
333
+ return await _Serve().serve.aio(app_env)