zenml-nightly 0.82.1.dev20250526__py3-none-any.whl → 0.82.1.dev20250528__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 (311) hide show
  1. zenml/VERSION +1 -1
  2. zenml/artifacts/utils.py +8 -0
  3. zenml/cli/base.py +6 -1
  4. zenml/cli/model.py +16 -36
  5. zenml/cli/server.py +8 -3
  6. zenml/client.py +20 -4
  7. zenml/client_lazy_loader.py +2 -0
  8. zenml/config/docker_settings.py +15 -2
  9. zenml/enums.py +3 -0
  10. zenml/event_hub/event_hub.py +1 -1
  11. zenml/integrations/bitbucket/plugins/event_sources/bitbucket_webhook_event_source.py +1 -1
  12. zenml/integrations/github/plugins/event_sources/github_webhook_event_source.py +1 -1
  13. zenml/integrations/kubernetes/flavors/kubernetes_orchestrator_flavor.py +3 -0
  14. zenml/integrations/kubernetes/orchestrators/kubernetes_orchestrator_entrypoint.py +37 -26
  15. zenml/logging/step_logging.py +17 -4
  16. zenml/login/web_login.py +1 -1
  17. zenml/model/model.py +13 -23
  18. zenml/models/__init__.py +39 -2
  19. zenml/models/v2/base/scoped.py +34 -15
  20. zenml/models/v2/core/artifact.py +10 -9
  21. zenml/models/v2/core/artifact_version.py +16 -16
  22. zenml/models/v2/core/logs.py +8 -50
  23. zenml/models/v2/core/model.py +10 -10
  24. zenml/models/v2/core/model_version.py +155 -88
  25. zenml/models/v2/core/pipeline.py +10 -11
  26. zenml/models/v2/core/pipeline_deployment.py +1 -9
  27. zenml/models/v2/core/pipeline_run.py +10 -17
  28. zenml/models/v2/core/run_template.py +10 -10
  29. zenml/models/v2/core/step_run.py +100 -16
  30. zenml/models/v2/core/tag.py +5 -4
  31. zenml/models/v2/misc/pipeline_run_dag.py +46 -0
  32. zenml/orchestrators/base_orchestrator.py +8 -19
  33. zenml/orchestrators/cache_utils.py +48 -1
  34. zenml/orchestrators/input_utils.py +35 -39
  35. zenml/orchestrators/step_launcher.py +1 -1
  36. zenml/orchestrators/step_run_utils.py +26 -10
  37. zenml/pipelines/pipeline_definition.py +3 -3
  38. zenml/pipelines/run_utils.py +2 -3
  39. zenml/service_connectors/service_connector.py +5 -1
  40. zenml/stack/stack_component.py +1 -4
  41. zenml/steps/step_context.py +1 -1
  42. zenml/utils/dashboard_utils.py +3 -3
  43. zenml/zen_server/auth.py +6 -3
  44. zenml/zen_server/cloud_utils.py +2 -2
  45. zenml/zen_server/dashboard/assets/{404-_AtuLtaX.js → 404-DmJUgorp.js} +1 -1
  46. zenml/zen_server/dashboard/assets/{@radix-C7hRs6Kx.js → @radix-Cdvw4jJ8.js} +1 -1
  47. zenml/zen_server/dashboard/assets/{@react-router-CNP6g_RL.js → @react-router-DeDfXbUF.js} +5 -5
  48. zenml/zen_server/dashboard/assets/{@reactflow-CQi1Z1Wq.js → @reactflow-8OCk19Fi.js} +1 -1
  49. zenml/zen_server/dashboard/assets/{@tanstack-CSxjHCME.js → @tanstack-5gTMR7G2.js} +4 -4
  50. zenml/zen_server/dashboard/assets/AlertDialogDropdownItem-CZW4QyWn.js +1 -0
  51. zenml/zen_server/dashboard/assets/ButtonGroup-DFWWFGUE.js +1 -0
  52. zenml/zen_server/dashboard/assets/{CodeSnippet-CvI6D0wx.js → CodeSnippet-D2HkkAGr.js} +1 -1
  53. zenml/zen_server/dashboard/assets/CollapsibleCard-CnS09ljw.js +1 -0
  54. zenml/zen_server/dashboard/assets/{ComponentBadge-DKw7Gndh.js → ComponentBadge-CDgdd0Ks.js} +1 -1
  55. zenml/zen_server/dashboard/assets/ComponentIcon-CbbOc7lb.js +1 -0
  56. zenml/zen_server/dashboard/assets/{DeleteAlertDialog-DVvXt-S6.js → DeleteAlertDialog-VIOMDLmx.js} +1 -1
  57. zenml/zen_server/dashboard/assets/DialogItem-ClFCqxEp.js +1 -0
  58. zenml/zen_server/dashboard/assets/{DisplayDate-CYVBBSgr.js → DisplayDate-8RESqe5H.js} +1 -1
  59. zenml/zen_server/dashboard/assets/{EmptyState-M1jafpg6.js → EmptyState-CjrgDtVk.js} +1 -1
  60. zenml/zen_server/dashboard/assets/{Error-BWaXP0VK.js → Error-CQzjbDcN.js} +1 -1
  61. zenml/zen_server/dashboard/assets/ExecutionStatus-CWreILP0.js +1 -0
  62. zenml/zen_server/dashboard/assets/{Helpbox-iE1xLmiZ.js → Helpbox-CiKxG5_X.js} +1 -1
  63. zenml/zen_server/dashboard/assets/Infobox-CGxFvqzi.js +1 -0
  64. zenml/zen_server/dashboard/assets/LeftSideMenu-DCsKdIjC.js +1 -0
  65. zenml/zen_server/dashboard/assets/{Lock-DW-0_M0o.js → Lock-CrIAdQo6.js} +1 -1
  66. zenml/zen_server/dashboard/assets/NestedCollapsible-3M4llYtH.js +1 -0
  67. zenml/zen_server/dashboard/assets/NumberBox-C0mQktmV.js +1 -0
  68. zenml/zen_server/dashboard/assets/Partials-DSjkttlz.js +1 -0
  69. zenml/zen_server/dashboard/assets/{PasswordChecker-lYTOtNom.js → PasswordChecker-B88WjuCe.js} +1 -1
  70. zenml/zen_server/dashboard/assets/ProCta-Dm5cWKpS.js +1 -0
  71. zenml/zen_server/dashboard/assets/{ProviderIcon-DLo7t1lo.js → ProviderIcon-DPwMR6nF.js} +1 -1
  72. zenml/zen_server/dashboard/assets/ProviderRadio-DEDNRgAb.js +1 -0
  73. zenml/zen_server/dashboard/assets/RunsBody-BRBn1e2O.js +1 -0
  74. zenml/zen_server/dashboard/assets/SearchField-DY6-UbRT.js +1 -0
  75. zenml/zen_server/dashboard/assets/SecretTooltip-CZTRnaCV.js +1 -0
  76. zenml/zen_server/dashboard/assets/{SetPassword-DR-EiLI5.js → SetPassword-BjNGDC5e.js} +1 -1
  77. zenml/zen_server/dashboard/assets/SheetHeader-CASpN2Lz.js +1 -0
  78. zenml/zen_server/dashboard/assets/StackComponentList-Be1pQt9m.js +1 -0
  79. zenml/zen_server/dashboard/assets/StackList-BdiR5DvR.js +1 -0
  80. zenml/zen_server/dashboard/assets/StackName-ojLC6xdl.js +1 -0
  81. zenml/zen_server/dashboard/assets/Tabs-DNSKblCM.js +1 -0
  82. zenml/zen_server/dashboard/assets/Tick-BPrWnNlN.js +1 -0
  83. zenml/zen_server/dashboard/assets/{UpdatePasswordSchemas-DbFEaezI.js → UpdatePasswordSchemas-CNfKDo2Q.js} +1 -1
  84. zenml/zen_server/dashboard/assets/UsageReason-Cb-mpV8M.js +1 -0
  85. zenml/zen_server/dashboard/assets/{Wizard-CMI6Ksgz.js → Wizard-Dg8Pmn5A.js} +1 -1
  86. zenml/zen_server/dashboard/assets/WizardFooter-BcNDIvlQ.js +1 -0
  87. zenml/zen_server/dashboard/assets/{all-pipeline-runs-query-BGASHYtF.js → all-pipeline-runs-query-DCdax7I5.js} +1 -1
  88. zenml/zen_server/dashboard/assets/{arrow-left-CwgF2MEM.js → arrow-left-MRXv5pAH.js} +1 -1
  89. zenml/zen_server/dashboard/assets/bulk-delete-C_kpIB9A.js +3 -0
  90. zenml/zen_server/dashboard/assets/{check-DK77doTf.js → check-B9QMTa3f.js} +1 -1
  91. zenml/zen_server/dashboard/assets/{check-circle-mvyzYvIW.js → check-circle-C4tYvbtw.js} +1 -1
  92. zenml/zen_server/dashboard/assets/{chevron-down-A-rmltmI.js → chevron-down-jbbQh82s.js} +1 -1
  93. zenml/zen_server/dashboard/assets/{chevron-right-double-uNWbJT-C.js → chevron-right-double-Dgp_gEsp.js} +1 -1
  94. zenml/zen_server/dashboard/assets/{clock-CPA5cYxq.js → clock-B_mTG8PH.js} +1 -1
  95. zenml/zen_server/dashboard/assets/{code-browser-j2EpcxIA.js → code-browser-CiD8qkBx.js} +1 -1
  96. zenml/zen_server/dashboard/assets/configuration-form-B2hmKGnF.js +1 -0
  97. zenml/zen_server/dashboard/assets/connectivity-4UKGMYnr.webp +0 -0
  98. zenml/zen_server/dashboard/assets/constants-1EZZxtay.js +1 -0
  99. zenml/zen_server/dashboard/assets/create-stack-TKmMtrkQ.js +1 -0
  100. zenml/zen_server/dashboard/assets/dates-Buh6SMo7.js +1 -0
  101. zenml/zen_server/dashboard/assets/delete-run-CCR9md_s.js +1 -0
  102. zenml/zen_server/dashboard/assets/eye-CbVlAYty.js +1 -0
  103. zenml/zen_server/dashboard/assets/{file-text-BdxZdjP_.js → file-text-Cd8wVfq5.js} +1 -1
  104. zenml/zen_server/dashboard/assets/form-DFJkaFDX.js +1 -0
  105. zenml/zen_server/dashboard/assets/form-schemas-CrznJVzA.js +1 -0
  106. zenml/zen_server/dashboard/assets/{gcp-CHNvgEss.js → gcp-B1I3Qvcx.js} +1 -1
  107. zenml/zen_server/dashboard/assets/{help-DyMolRxD.js → help-Co6aedki.js} +1 -1
  108. zenml/zen_server/dashboard/assets/index-BFqbGSck.js +308 -0
  109. zenml/zen_server/dashboard/assets/{index-CrhdX_qG.js → index-BjUu1mP4.js} +1 -1
  110. zenml/zen_server/dashboard/assets/{index-DR30v9MZ.js → index-DWpiv-Ft.js} +1 -1
  111. zenml/zen_server/dashboard/assets/index-DuhuqTCI.css +1 -0
  112. zenml/zen_server/dashboard/assets/index-U992soPJ.js +1 -0
  113. zenml/zen_server/dashboard/assets/index.es-C1gfATPn.js +14 -0
  114. zenml/zen_server/dashboard/assets/{index.esm-D7jFlf5N.js → index.esm-DhJo3mA6.js} +1 -1
  115. zenml/zen_server/dashboard/assets/info-QkbQz4QU.js +1 -0
  116. zenml/zen_server/dashboard/assets/{key-icon-DO4DPJHZ.js → key-icon-C07HKw8z.js} +1 -1
  117. zenml/zen_server/dashboard/assets/{layout-h3cbx8WZ.js → layout-DBbfEFBe.js} +1 -1
  118. zenml/zen_server/dashboard/assets/layout-Do9YI4QX.js +1 -0
  119. zenml/zen_server/dashboard/assets/login-mutation-D3tFP6Wm.js +1 -0
  120. zenml/zen_server/dashboard/assets/{logs-B5n0U7tB.js → logs-CQKlJjo0.js} +1 -1
  121. zenml/zen_server/dashboard/assets/{package-D1Mhqeh8.js → package-miExReQl.js} +1 -1
  122. zenml/zen_server/dashboard/assets/page-9RjCitFH.js +1 -0
  123. zenml/zen_server/dashboard/assets/page-B0PsXWiT.js +1 -0
  124. zenml/zen_server/dashboard/assets/page-BCrKmYIZ.js +1 -0
  125. zenml/zen_server/dashboard/assets/page-BcRI3-aR.js +29 -0
  126. zenml/zen_server/dashboard/assets/page-Be3R2uYn.js +1 -0
  127. zenml/zen_server/dashboard/assets/page-BgknnddT.js +1 -0
  128. zenml/zen_server/dashboard/assets/page-BrT0_zSJ.js +40 -0
  129. zenml/zen_server/dashboard/assets/page-Bs3W2FDi.js +1 -0
  130. zenml/zen_server/dashboard/assets/page-C210HcBA.js +1 -0
  131. zenml/zen_server/dashboard/assets/page-C6KaiZ_W.js +1 -0
  132. zenml/zen_server/dashboard/assets/page-CAJ8B0vb.js +1 -0
  133. zenml/zen_server/dashboard/assets/page-CAUYrfui.js +1 -0
  134. zenml/zen_server/dashboard/assets/page-CHxVhF3x.js +1 -0
  135. zenml/zen_server/dashboard/assets/{page-CSwZxZMQ.js → page-CN7lkvXr.js} +1 -1
  136. zenml/zen_server/dashboard/assets/page-CUaMMoPG.js +1 -0
  137. zenml/zen_server/dashboard/assets/page-Cal6XQ4U.js +1 -0
  138. zenml/zen_server/dashboard/assets/page-CdZCmszX.js +1 -0
  139. zenml/zen_server/dashboard/assets/page-ChGcZI_6.js +1 -0
  140. zenml/zen_server/dashboard/assets/page-CktmtZ8Z.js +1 -0
  141. zenml/zen_server/dashboard/assets/page-ClvmVesa.js +1 -0
  142. zenml/zen_server/dashboard/assets/page-CnbIYE80.js +1 -0
  143. zenml/zen_server/dashboard/assets/page-CoXzjeEY.js +1 -0
  144. zenml/zen_server/dashboard/assets/page-CtiuMP_r.js +1 -0
  145. zenml/zen_server/dashboard/assets/page-D9Hfx6GV.js +1 -0
  146. zenml/zen_server/dashboard/assets/page-D9iuB88h.js +1 -0
  147. zenml/zen_server/dashboard/assets/page-DCcuPZ8P.js +1 -0
  148. zenml/zen_server/dashboard/assets/page-DEohTSz6.js +1 -0
  149. zenml/zen_server/dashboard/assets/page-DJIGaUQ9.js +1 -0
  150. zenml/zen_server/dashboard/assets/page-DKK6ulgy.js +1 -0
  151. zenml/zen_server/dashboard/assets/page-DNjKHjnH.js +1 -0
  152. zenml/zen_server/dashboard/assets/page-DUK0Nd_1.js +1 -0
  153. zenml/zen_server/dashboard/assets/page-DUKbOhaD.js +1 -0
  154. zenml/zen_server/dashboard/assets/page-DYOucPtA.js +1 -0
  155. zenml/zen_server/dashboard/assets/page-DpqRelAy.js +1 -0
  156. zenml/zen_server/dashboard/assets/{page-ZfTtFicG.js → page-DwVPpCFg.js} +2 -2
  157. zenml/zen_server/dashboard/assets/page-XURWnYZP.js +1 -0
  158. zenml/zen_server/dashboard/assets/page-abw-2oeW.js +1 -0
  159. zenml/zen_server/dashboard/assets/page-akLcPcKw.js +1 -0
  160. zenml/zen_server/dashboard/assets/page-n9ejQ2V3.js +2 -0
  161. zenml/zen_server/dashboard/assets/page-sJjNT9xA.js +6 -0
  162. zenml/zen_server/dashboard/assets/{persist-UUym702q.js → persist-DWMWVP-y.js} +1 -1
  163. zenml/zen_server/dashboard/assets/{persist-D87V82eO.js → persist-Dec_w7aB.js} +1 -1
  164. zenml/zen_server/dashboard/assets/pipeline-CSUlkd50.js +1 -0
  165. zenml/zen_server/dashboard/assets/{plus-COjQg3AG.js → plus-Cl0_rCVF.js} +1 -1
  166. zenml/zen_server/dashboard/assets/{react-error-boundary.esm-fyoUBS25.js → react-error-boundary.esm-7_MuhCay.js} +1 -1
  167. zenml/zen_server/dashboard/assets/{refresh-CM5T3QeU.js → refresh-BcTM09NW.js} +1 -1
  168. zenml/zen_server/dashboard/assets/resource-tyes-list-o2LXiMay.js +1 -0
  169. zenml/zen_server/dashboard/assets/resource-type-tooltip-DwHrJstL.js +1 -0
  170. zenml/zen_server/dashboard/assets/service-connectors-DSEMwJ5A.js +1 -0
  171. zenml/zen_server/dashboard/assets/{service-BQ9KIhls.js → service-jxtvgks0.js} +2 -2
  172. zenml/zen_server/dashboard/assets/sharedSchema-BXzg0EZz.js +1 -0
  173. zenml/zen_server/dashboard/assets/stack-detail-query-Cm0fsgo-.js +1 -0
  174. zenml/zen_server/dashboard/assets/{terminal-square-DMtel8mb.js → terminal-XFL_4QN-.js} +1 -1
  175. zenml/zen_server/dashboard/assets/terminal-square-XFL_4QN-.js +1 -0
  176. zenml/zen_server/dashboard/assets/transform-CeZdrxDZ.js +1 -0
  177. zenml/zen_server/dashboard/assets/{trash-BWSZ7NRK.js → trash-DP6Tpp_E.js} +1 -1
  178. zenml/zen_server/dashboard/assets/type-guards-CNgPYg8l.js +1 -0
  179. zenml/zen_server/dashboard/assets/update-current-user-mutation-D5MjcQ6F.js +1 -0
  180. zenml/zen_server/dashboard/assets/update-server-settings-mutation-CmnxdxiK.js +1 -0
  181. zenml/zen_server/dashboard/assets/{zod-C0xYeTvL.js → zod-XdS2h1ws.js} +1 -1
  182. zenml/zen_server/dashboard/index.html +7 -7
  183. zenml/zen_server/rbac/utils.py +2 -2
  184. zenml/zen_server/rbac/zenml_cloud_rbac.py +4 -3
  185. zenml/zen_server/routers/auth_endpoints.py +2 -2
  186. zenml/zen_server/routers/devices_endpoints.py +8 -5
  187. zenml/zen_server/routers/pipeline_deployments_endpoints.py +1 -1
  188. zenml/zen_server/routers/pipelines_endpoints.py +1 -1
  189. zenml/zen_server/routers/run_templates_endpoints.py +3 -3
  190. zenml/zen_server/routers/runs_endpoints.py +35 -0
  191. zenml/zen_server/routers/steps_endpoints.py +3 -0
  192. zenml/zen_server/template_execution/utils.py +6 -6
  193. zenml/zen_stores/dag_generator.py +171 -0
  194. zenml/zen_stores/rest_zen_store.py +17 -3
  195. zenml/zen_stores/schemas/action_schemas.py +40 -4
  196. zenml/zen_stores/schemas/api_key_schemas.py +29 -1
  197. zenml/zen_stores/schemas/artifact_schemas.py +168 -48
  198. zenml/zen_stores/schemas/base_schemas.py +26 -1
  199. zenml/zen_stores/schemas/code_repository_schemas.py +46 -5
  200. zenml/zen_stores/schemas/component_schemas.py +44 -3
  201. zenml/zen_stores/schemas/device_schemas.py +43 -2
  202. zenml/zen_stores/schemas/event_source_schemas.py +41 -5
  203. zenml/zen_stores/schemas/flavor_schemas.py +42 -2
  204. zenml/zen_stores/schemas/model_schemas.py +113 -77
  205. zenml/zen_stores/schemas/pipeline_build_schemas.py +53 -4
  206. zenml/zen_stores/schemas/pipeline_deployment_schemas.py +53 -4
  207. zenml/zen_stores/schemas/pipeline_run_schemas.py +111 -47
  208. zenml/zen_stores/schemas/pipeline_schemas.py +41 -9
  209. zenml/zen_stores/schemas/run_template_schemas.py +75 -11
  210. zenml/zen_stores/schemas/schedule_schema.py +50 -5
  211. zenml/zen_stores/schemas/secret_schemas.py +39 -2
  212. zenml/zen_stores/schemas/service_connector_schemas.py +39 -2
  213. zenml/zen_stores/schemas/service_schemas.py +39 -4
  214. zenml/zen_stores/schemas/stack_schemas.py +47 -2
  215. zenml/zen_stores/schemas/step_run_schemas.py +89 -26
  216. zenml/zen_stores/schemas/tag_schemas.py +69 -5
  217. zenml/zen_stores/schemas/trigger_schemas.py +44 -5
  218. zenml/zen_stores/schemas/utils.py +25 -4
  219. zenml/zen_stores/sql_zen_store.py +471 -28
  220. zenml/zen_stores/zen_store_interface.py +9 -1
  221. {zenml_nightly-0.82.1.dev20250526.dist-info → zenml_nightly-0.82.1.dev20250528.dist-info}/METADATA +1 -1
  222. {zenml_nightly-0.82.1.dev20250526.dist-info → zenml_nightly-0.82.1.dev20250528.dist-info}/RECORD +225 -219
  223. zenml/zen_server/dashboard/assets/AlertDialogDropdownItem-BG7-Ki1L.js +0 -1
  224. zenml/zen_server/dashboard/assets/CollapsibleCard-D20FtrzC.js +0 -1
  225. zenml/zen_server/dashboard/assets/Commands-DGbAvMDk.js +0 -1
  226. zenml/zen_server/dashboard/assets/ComponentIcon-ils7uNAk.js +0 -1
  227. zenml/zen_server/dashboard/assets/CsvVizualization-DVN541XF.js +0 -15
  228. zenml/zen_server/dashboard/assets/DialogItem-BHWf3sIB.js +0 -1
  229. zenml/zen_server/dashboard/assets/ExecutionStatus-XrvT2r65.js +0 -1
  230. zenml/zen_server/dashboard/assets/Infobox-D9k5TFH4.js +0 -1
  231. zenml/zen_server/dashboard/assets/InlineAvatar-Cfz4WSLK.js +0 -1
  232. zenml/zen_server/dashboard/assets/MarkdownVisualization-URCyUPcZ.js +0 -14
  233. zenml/zen_server/dashboard/assets/NestedCollapsible-Dor-bi98.js +0 -1
  234. zenml/zen_server/dashboard/assets/NumberBox-D2A7ENHb.js +0 -1
  235. zenml/zen_server/dashboard/assets/Partials-DQJFw1yW.js +0 -1
  236. zenml/zen_server/dashboard/assets/ProBadge-Cp4hb1YT.js +0 -1
  237. zenml/zen_server/dashboard/assets/ProCta-EYoV9CvK.js +0 -1
  238. zenml/zen_server/dashboard/assets/ProviderRadio-BVDA-fAr.js +0 -1
  239. zenml/zen_server/dashboard/assets/RunSelector-BLuBYNJt.js +0 -1
  240. zenml/zen_server/dashboard/assets/RunsBody-W4WHf-sq.js +0 -1
  241. zenml/zen_server/dashboard/assets/SearchField-D-h6jXyg.js +0 -1
  242. zenml/zen_server/dashboard/assets/SecretTooltip-CePCL8kd.js +0 -1
  243. zenml/zen_server/dashboard/assets/StackList-CgmN5H-i.js +0 -1
  244. zenml/zen_server/dashboard/assets/Tabs-DxQ8PDOD.js +0 -1
  245. zenml/zen_server/dashboard/assets/Tick-CEsT3HPR.js +0 -1
  246. zenml/zen_server/dashboard/assets/UsageReason-DjI5qMje.js +0 -1
  247. zenml/zen_server/dashboard/assets/WizardFooter-CFBHFZas.js +0 -1
  248. zenml/zen_server/dashboard/assets/cloud-squares-DeRLMopf.svg +0 -43
  249. zenml/zen_server/dashboard/assets/configuration-form-BtI2Y4eX.js +0 -1
  250. zenml/zen_server/dashboard/assets/connectors-video-C9qY4syJ.svg +0 -21
  251. zenml/zen_server/dashboard/assets/constants-DP3ZEnXH.js +0 -1
  252. zenml/zen_server/dashboard/assets/create-stack-BJ6x5rzj.js +0 -1
  253. zenml/zen_server/dashboard/assets/dates-3pMLCNrD.js +0 -1
  254. zenml/zen_server/dashboard/assets/delete-run-DlSLEl5T.js +0 -1
  255. zenml/zen_server/dashboard/assets/docker-BuDBFEDL.js +0 -1
  256. zenml/zen_server/dashboard/assets/dots-horizontal-BGRJCPCs.js +0 -1
  257. zenml/zen_server/dashboard/assets/flavor-select-BnPxvQDN.js +0 -1
  258. zenml/zen_server/dashboard/assets/form-schemas-CbvoEUHr.js +0 -1
  259. zenml/zen_server/dashboard/assets/index-CFESYpe4.js +0 -1
  260. zenml/zen_server/dashboard/assets/index-CmLcvK2z.js +0 -1
  261. zenml/zen_server/dashboard/assets/index-CzX3ZYlI.css +0 -1
  262. zenml/zen_server/dashboard/assets/index-D2iSHVZq.js +0 -64
  263. zenml/zen_server/dashboard/assets/kubernetes-D6OUjwSK.js +0 -1
  264. zenml/zen_server/dashboard/assets/link-external-DUhCSKNm.js +0 -1
  265. zenml/zen_server/dashboard/assets/login-command-CkqxPtV3.js +0 -1
  266. zenml/zen_server/dashboard/assets/login-mutation-CXc-Klim.js +0 -1
  267. zenml/zen_server/dashboard/assets/not-found-olRU3fnu.js +0 -1
  268. zenml/zen_server/dashboard/assets/page-7keIM1V3.js +0 -1
  269. zenml/zen_server/dashboard/assets/page-B31neFwG.js +0 -1
  270. zenml/zen_server/dashboard/assets/page-B3zo4KYS.js +0 -1
  271. zenml/zen_server/dashboard/assets/page-BN3MHq1a.js +0 -1
  272. zenml/zen_server/dashboard/assets/page-BNgVExjN.js +0 -1
  273. zenml/zen_server/dashboard/assets/page-BPtvu74G.js +0 -1
  274. zenml/zen_server/dashboard/assets/page-BTIuG0ki.js +0 -2
  275. zenml/zen_server/dashboard/assets/page-BcQzleH6.js +0 -1
  276. zenml/zen_server/dashboard/assets/page-C05Jw4M2.js +0 -1
  277. zenml/zen_server/dashboard/assets/page-C28a7K8h.js +0 -1
  278. zenml/zen_server/dashboard/assets/page-C9WLk0X-.js +0 -1
  279. zenml/zen_server/dashboard/assets/page-CINMx64X.js +0 -1
  280. zenml/zen_server/dashboard/assets/page-CYrJbk7P.js +0 -1
  281. zenml/zen_server/dashboard/assets/page-Ce0cqLo3.js +0 -1
  282. zenml/zen_server/dashboard/assets/page-CgNsEkw-.js +0 -1
  283. zenml/zen_server/dashboard/assets/page-Ct2FUYuR.js +0 -1
  284. zenml/zen_server/dashboard/assets/page-D8G2B3Bu.js +0 -1
  285. zenml/zen_server/dashboard/assets/page-DL8a4_lg.js +0 -3
  286. zenml/zen_server/dashboard/assets/page-DMhYn1cF.js +0 -1
  287. zenml/zen_server/dashboard/assets/page-Dd_Yq-Uf.js +0 -6
  288. zenml/zen_server/dashboard/assets/page-DfSvqT8g.js +0 -1
  289. zenml/zen_server/dashboard/assets/page-Dt6ANUTx.js +0 -1
  290. zenml/zen_server/dashboard/assets/page-DtvTleaT.js +0 -1
  291. zenml/zen_server/dashboard/assets/page-DwfGTiVs.js +0 -1
  292. zenml/zen_server/dashboard/assets/page-JgomSTDc.js +0 -1
  293. zenml/zen_server/dashboard/assets/page-L84ig6HB.js +0 -1
  294. zenml/zen_server/dashboard/assets/page-Mabsn4QJ.js +0 -1
  295. zenml/zen_server/dashboard/assets/page-P04L5cm9.js +0 -1
  296. zenml/zen_server/dashboard/assets/page-PfhAnvq4.js +0 -1
  297. zenml/zen_server/dashboard/assets/page-WdRrlNt_.js +0 -1
  298. zenml/zen_server/dashboard/assets/page-cqJDDDeK.js +0 -1
  299. zenml/zen_server/dashboard/assets/page-k-Wxh9L_.js +0 -1
  300. zenml/zen_server/dashboard/assets/page-y-zV4n0c.js +0 -1
  301. zenml/zen_server/dashboard/assets/rocket-Cf-B-XOR.js +0 -1
  302. zenml/zen_server/dashboard/assets/settings_preview-0JLrRgHP.webp +0 -0
  303. zenml/zen_server/dashboard/assets/sharedSchema-Bse2agAf.js +0 -14
  304. zenml/zen_server/dashboard/assets/stack-detail-query-BAcZJrN3.js +0 -1
  305. zenml/zen_server/dashboard/assets/tick-circle-m94Aa6Zt.js +0 -1
  306. zenml/zen_server/dashboard/assets/tour-cover-BYfeen6M.webp +0 -0
  307. zenml/zen_server/dashboard/assets/type-guards-CaeD8wHO.js +0 -1
  308. zenml/zen_server/dashboard/assets/update-server-settings-mutation-DwMM1LJz.js +0 -1
  309. {zenml_nightly-0.82.1.dev20250526.dist-info → zenml_nightly-0.82.1.dev20250528.dist-info}/LICENSE +0 -0
  310. {zenml_nightly-0.82.1.dev20250526.dist-info → zenml_nightly-0.82.1.dev20250528.dist-info}/WHEEL +0 -0
  311. {zenml_nightly-0.82.1.dev20250526.dist-info → zenml_nightly-0.82.1.dev20250528.dist-info}/entry_points.txt +0 -0
@@ -14,11 +14,13 @@
14
14
  """SQLModel implementation of pipeline build tables."""
15
15
 
16
16
  import json
17
- from typing import Any, Optional
17
+ from typing import Any, Optional, Sequence
18
18
  from uuid import UUID
19
19
 
20
20
  from sqlalchemy import Column, String
21
21
  from sqlalchemy.dialects.mysql import MEDIUMTEXT
22
+ from sqlalchemy.orm import joinedload
23
+ from sqlalchemy.sql.base import ExecutableOption
22
24
  from sqlmodel import Field, Relationship
23
25
 
24
26
  from zenml.constants import MEDIUMTEXT_MAX_LENGTH
@@ -27,6 +29,7 @@ from zenml.models import (
27
29
  PipelineBuildResponse,
28
30
  PipelineBuildResponseBody,
29
31
  PipelineBuildResponseMetadata,
32
+ PipelineBuildResponseResources,
30
33
  )
31
34
  from zenml.utils.json_utils import pydantic_encoder
32
35
  from zenml.zen_stores.schemas.base_schemas import BaseSchema
@@ -35,6 +38,7 @@ from zenml.zen_stores.schemas.project_schemas import ProjectSchema
35
38
  from zenml.zen_stores.schemas.schema_utils import build_foreign_key_field
36
39
  from zenml.zen_stores.schemas.stack_schemas import StackSchema
37
40
  from zenml.zen_stores.schemas.user_schemas import UserSchema
41
+ from zenml.zen_stores.schemas.utils import jl_arg
38
42
 
39
43
 
40
44
  class PipelineBuildSchema(BaseSchema, table=True):
@@ -103,6 +107,44 @@ class PipelineBuildSchema(BaseSchema, table=True):
103
107
  # Build duration in seconds
104
108
  duration: Optional[int] = None
105
109
 
110
+ @classmethod
111
+ def get_query_options(
112
+ cls,
113
+ include_metadata: bool = False,
114
+ include_resources: bool = False,
115
+ **kwargs: Any,
116
+ ) -> Sequence[ExecutableOption]:
117
+ """Get the query options for the schema.
118
+
119
+ Args:
120
+ include_metadata: Whether metadata will be included when converting
121
+ the schema to a model.
122
+ include_resources: Whether resources will be included when
123
+ converting the schema to a model.
124
+ **kwargs: Keyword arguments to allow schema specific logic
125
+
126
+ Returns:
127
+ A list of query options.
128
+ """
129
+ options = []
130
+
131
+ if include_metadata:
132
+ options.extend(
133
+ [
134
+ joinedload(jl_arg(PipelineBuildSchema.pipeline)),
135
+ joinedload(jl_arg(PipelineBuildSchema.stack)),
136
+ ]
137
+ )
138
+
139
+ if include_resources:
140
+ options.extend(
141
+ [
142
+ joinedload(jl_arg(PipelineBuildSchema.user)),
143
+ ]
144
+ )
145
+
146
+ return options
147
+
106
148
  @classmethod
107
149
  def from_request(
108
150
  cls, request: PipelineBuildRequest
@@ -148,14 +190,14 @@ class PipelineBuildSchema(BaseSchema, table=True):
148
190
  The created `PipelineBuildResponse`.
149
191
  """
150
192
  body = PipelineBuildResponseBody(
151
- user=self.user.to_model() if self.user else None,
193
+ user_id=self.user_id,
194
+ project_id=self.project_id,
152
195
  created=self.created,
153
196
  updated=self.updated,
154
197
  )
155
198
  metadata = None
156
199
  if include_metadata:
157
200
  metadata = PipelineBuildResponseMetadata(
158
- project=self.project.to_model(),
159
201
  pipeline=self.pipeline.to_model() if self.pipeline else None,
160
202
  stack=self.stack.to_model() if self.stack else None,
161
203
  images=json.loads(self.images),
@@ -167,9 +209,16 @@ class PipelineBuildSchema(BaseSchema, table=True):
167
209
  contains_code=self.contains_code,
168
210
  duration=self.duration,
169
211
  )
212
+
213
+ resources = None
214
+ if include_resources:
215
+ resources = PipelineBuildResponseResources(
216
+ user=self.user.to_model() if self.user else None,
217
+ )
218
+
170
219
  return PipelineBuildResponse(
171
220
  id=self.id,
172
- project_id=self.project_id,
173
221
  body=body,
174
222
  metadata=metadata,
223
+ resources=resources,
175
224
  )
@@ -14,11 +14,13 @@
14
14
  """SQLModel implementation of pipeline deployment tables."""
15
15
 
16
16
  import json
17
- from typing import TYPE_CHECKING, Any, List, Optional
17
+ from typing import TYPE_CHECKING, Any, List, Optional, Sequence
18
18
  from uuid import UUID
19
19
 
20
20
  from sqlalchemy import TEXT, Column, String
21
21
  from sqlalchemy.dialects.mysql import MEDIUMTEXT
22
+ from sqlalchemy.orm import joinedload
23
+ from sqlalchemy.sql.base import ExecutableOption
22
24
  from sqlmodel import Field, Relationship
23
25
 
24
26
  from zenml.config.pipeline_configurations import PipelineConfiguration
@@ -31,6 +33,7 @@ from zenml.models import (
31
33
  PipelineDeploymentResponse,
32
34
  PipelineDeploymentResponseBody,
33
35
  PipelineDeploymentResponseMetadata,
36
+ PipelineDeploymentResponseResources,
34
37
  )
35
38
  from zenml.zen_stores.schemas.base_schemas import BaseSchema
36
39
  from zenml.zen_stores.schemas.code_repository_schemas import (
@@ -43,6 +46,7 @@ from zenml.zen_stores.schemas.schedule_schema import ScheduleSchema
43
46
  from zenml.zen_stores.schemas.schema_utils import build_foreign_key_field
44
47
  from zenml.zen_stores.schemas.stack_schemas import StackSchema
45
48
  from zenml.zen_stores.schemas.user_schemas import UserSchema
49
+ from zenml.zen_stores.schemas.utils import jl_arg
46
50
 
47
51
  if TYPE_CHECKING:
48
52
  from zenml.zen_stores.schemas.pipeline_run_schemas import PipelineRunSchema
@@ -171,6 +175,45 @@ class PipelineDeploymentSchema(BaseSchema, table=True):
171
175
  sa_relationship_kwargs={"cascade": "delete"}
172
176
  )
173
177
 
178
+ @classmethod
179
+ def get_query_options(
180
+ cls,
181
+ include_metadata: bool = False,
182
+ include_resources: bool = False,
183
+ **kwargs: Any,
184
+ ) -> Sequence[ExecutableOption]:
185
+ """Get the query options for the schema.
186
+
187
+ Args:
188
+ include_metadata: Whether metadata will be included when converting
189
+ the schema to a model.
190
+ include_resources: Whether resources will be included when
191
+ converting the schema to a model.
192
+ **kwargs: Keyword arguments to allow schema specific logic
193
+
194
+ Returns:
195
+ A list of query options.
196
+ """
197
+ options = []
198
+
199
+ if include_metadata:
200
+ options.extend(
201
+ [
202
+ joinedload(jl_arg(PipelineDeploymentSchema.stack)),
203
+ joinedload(jl_arg(PipelineDeploymentSchema.build)),
204
+ joinedload(jl_arg(PipelineDeploymentSchema.pipeline)),
205
+ joinedload(jl_arg(PipelineDeploymentSchema.schedule)),
206
+ joinedload(
207
+ jl_arg(PipelineDeploymentSchema.code_reference)
208
+ ),
209
+ ]
210
+ )
211
+
212
+ if include_resources:
213
+ options.extend([joinedload(jl_arg(PipelineDeploymentSchema.user))])
214
+
215
+ return options
216
+
174
217
  @classmethod
175
218
  def from_request(
176
219
  cls,
@@ -250,7 +293,8 @@ class PipelineDeploymentSchema(BaseSchema, table=True):
250
293
  The created `PipelineDeploymentResponse`.
251
294
  """
252
295
  body = PipelineDeploymentResponseBody(
253
- user=self.user.to_model() if self.user else None,
296
+ user_id=self.user_id,
297
+ project_id=self.project_id,
254
298
  created=self.created,
255
299
  updated=self.updated,
256
300
  )
@@ -270,7 +314,6 @@ class PipelineDeploymentSchema(BaseSchema, table=True):
270
314
  client_environment.pop("python_packages", None)
271
315
 
272
316
  metadata = PipelineDeploymentResponseMetadata(
273
- project=self.project.to_model(),
274
317
  run_name_template=self.run_name_template,
275
318
  pipeline_configuration=pipeline_configuration,
276
319
  step_configurations=step_configurations,
@@ -293,9 +336,15 @@ class PipelineDeploymentSchema(BaseSchema, table=True):
293
336
  code_path=self.code_path,
294
337
  template_id=self.template_id,
295
338
  )
339
+
340
+ resources = None
341
+ if include_resources:
342
+ resources = PipelineDeploymentResponseResources(
343
+ user=self.user.to_model() if self.user else None,
344
+ )
296
345
  return PipelineDeploymentResponse(
297
346
  id=self.id,
298
- project_id=self.project_id,
299
347
  body=body,
300
348
  metadata=metadata,
349
+ resources=resources,
301
350
  )
@@ -15,11 +15,13 @@
15
15
 
16
16
  import json
17
17
  from datetime import datetime
18
- from typing import TYPE_CHECKING, Any, Dict, List, Optional
18
+ from typing import TYPE_CHECKING, Any, Dict, List, Optional, Sequence
19
19
  from uuid import UUID
20
20
 
21
21
  from pydantic import ConfigDict
22
22
  from sqlalchemy import UniqueConstraint
23
+ from sqlalchemy.orm import joinedload
24
+ from sqlalchemy.sql.base import ExecutableOption
23
25
  from sqlmodel import TEXT, Column, Field, Relationship
24
26
 
25
27
  from zenml.config.pipeline_configurations import PipelineConfiguration
@@ -53,7 +55,10 @@ from zenml.zen_stores.schemas.schema_utils import build_foreign_key_field
53
55
  from zenml.zen_stores.schemas.stack_schemas import StackSchema
54
56
  from zenml.zen_stores.schemas.trigger_schemas import TriggerExecutionSchema
55
57
  from zenml.zen_stores.schemas.user_schemas import UserSchema
56
- from zenml.zen_stores.schemas.utils import RunMetadataInterface
58
+ from zenml.zen_stores.schemas.utils import (
59
+ RunMetadataInterface,
60
+ jl_arg,
61
+ )
57
62
 
58
63
  if TYPE_CHECKING:
59
64
  from zenml.zen_stores.schemas.logs_schemas import LogsSchema
@@ -155,12 +160,6 @@ class PipelineRunSchema(NamedSchema, RunMetadataInterface, table=True):
155
160
  back_populates="pipeline_run",
156
161
  sa_relationship_kwargs={"cascade": "delete", "uselist": False},
157
162
  )
158
- model_versions_pipeline_runs_links: List[
159
- "ModelVersionPipelineRunSchema"
160
- ] = Relationship(
161
- back_populates="pipeline_run",
162
- sa_relationship_kwargs={"cascade": "delete"},
163
- )
164
163
  step_runs: List["StepRunSchema"] = Relationship(
165
164
  sa_relationship_kwargs={"cascade": "delete"},
166
165
  )
@@ -228,8 +227,78 @@ class PipelineRunSchema(NamedSchema, RunMetadataInterface, table=True):
228
227
  ),
229
228
  )
230
229
 
230
+ # Needed for cascade deletion
231
+ model_versions_pipeline_runs_links: List[
232
+ "ModelVersionPipelineRunSchema"
233
+ ] = Relationship(
234
+ back_populates="pipeline_run",
235
+ sa_relationship_kwargs={"cascade": "delete"},
236
+ )
237
+
231
238
  model_config = ConfigDict(protected_namespaces=()) # type: ignore[assignment]
232
239
 
240
+ @classmethod
241
+ def get_query_options(
242
+ cls,
243
+ include_metadata: bool = False,
244
+ include_resources: bool = False,
245
+ **kwargs: Any,
246
+ ) -> Sequence[ExecutableOption]:
247
+ """Get the query options for the schema.
248
+
249
+ Args:
250
+ include_metadata: Whether metadata will be included when converting
251
+ the schema to a model.
252
+ include_resources: Whether resources will be included when
253
+ converting the schema to a model.
254
+ **kwargs: Keyword arguments to allow schema specific logic
255
+
256
+ Returns:
257
+ A list of query options.
258
+ """
259
+ from zenml.zen_stores.schemas import ModelVersionSchema
260
+
261
+ options = [
262
+ joinedload(jl_arg(PipelineRunSchema.deployment)).joinedload(
263
+ jl_arg(PipelineDeploymentSchema.pipeline)
264
+ ),
265
+ joinedload(jl_arg(PipelineRunSchema.deployment)).joinedload(
266
+ jl_arg(PipelineDeploymentSchema.stack)
267
+ ),
268
+ joinedload(jl_arg(PipelineRunSchema.deployment)).joinedload(
269
+ jl_arg(PipelineDeploymentSchema.build)
270
+ ),
271
+ joinedload(jl_arg(PipelineRunSchema.deployment)).joinedload(
272
+ jl_arg(PipelineDeploymentSchema.schedule)
273
+ ),
274
+ joinedload(jl_arg(PipelineRunSchema.deployment)).joinedload(
275
+ jl_arg(PipelineDeploymentSchema.code_reference)
276
+ ),
277
+ ]
278
+
279
+ # if include_metadata:
280
+ # options.extend(
281
+ # [
282
+ # joinedload(jl_arg(PipelineRunSchema.run_metadata)),
283
+ # ]
284
+ # )
285
+
286
+ if include_resources:
287
+ options.extend(
288
+ [
289
+ joinedload(
290
+ jl_arg(PipelineRunSchema.model_version)
291
+ ).joinedload(
292
+ jl_arg(ModelVersionSchema.model), innerjoin=True
293
+ ),
294
+ joinedload(jl_arg(PipelineRunSchema.logs)),
295
+ joinedload(jl_arg(PipelineRunSchema.user)),
296
+ # joinedload(jl_arg(PipelineRunSchema.tags)),
297
+ ]
298
+ )
299
+
300
+ return options
301
+
233
302
  @classmethod
234
303
  def from_request(
235
304
  cls, request: "PipelineRunRequest"
@@ -263,28 +332,35 @@ class PipelineRunSchema(NamedSchema, RunMetadataInterface, table=True):
263
332
  trigger_execution_id=request.trigger_execution_id,
264
333
  )
265
334
 
266
- def fetch_metadata_collection(self) -> Dict[str, List[RunMetadataEntry]]:
335
+ def fetch_metadata_collection(
336
+ self, include_full_metadata: bool = False, **kwargs: Any
337
+ ) -> Dict[str, List[RunMetadataEntry]]:
267
338
  """Fetches all the metadata entries related to the pipeline run.
268
339
 
340
+ Args:
341
+ include_full_metadata: Whether the full metadata will be included.
342
+ **kwargs: Keyword arguments.
343
+
269
344
  Returns:
270
345
  a dictionary, where the key is the key of the metadata entry
271
346
  and the values represent the list of entries with this key.
272
347
  """
273
348
  # Fetch the metadata related to this run
274
- metadata_collection = super().fetch_metadata_collection()
275
-
276
- # Fetch the metadata related to the steps of this run
277
- for s in self.step_runs:
278
- step_metadata = s.fetch_metadata_collection()
279
- for k, v in step_metadata.items():
280
- metadata_collection[f"{s.name}::{k}"] = v
281
-
282
- # Fetch the metadata related to the schedule of this run
283
- if self.deployment is not None:
284
- if schedule := self.deployment.schedule:
285
- schedule_metadata = schedule.fetch_metadata_collection()
286
- for k, v in schedule_metadata.items():
287
- metadata_collection[f"schedule:{k}"] = v
349
+ metadata_collection = super().fetch_metadata_collection(**kwargs)
350
+
351
+ if include_full_metadata:
352
+ # Fetch the metadata related to the steps of this run
353
+ for s in self.step_runs:
354
+ step_metadata = s.fetch_metadata_collection()
355
+ for k, v in step_metadata.items():
356
+ metadata_collection[f"{s.name}::{k}"] = v
357
+
358
+ # Fetch the metadata related to the schedule of this run
359
+ if self.deployment is not None:
360
+ if schedule := self.deployment.schedule:
361
+ schedule_metadata = schedule.fetch_metadata_collection()
362
+ for k, v in schedule_metadata.items():
363
+ metadata_collection[f"schedule:{k}"] = v
288
364
 
289
365
  return metadata_collection
290
366
 
@@ -293,6 +369,7 @@ class PipelineRunSchema(NamedSchema, RunMetadataInterface, table=True):
293
369
  include_metadata: bool = False,
294
370
  include_resources: bool = False,
295
371
  include_python_packages: bool = False,
372
+ include_full_metadata: bool = False,
296
373
  **kwargs: Any,
297
374
  ) -> "PipelineRunResponse":
298
375
  """Convert a `PipelineRunSchema` to a `PipelineRunResponse`.
@@ -301,6 +378,7 @@ class PipelineRunSchema(NamedSchema, RunMetadataInterface, table=True):
301
378
  include_metadata: Whether the metadata will be filled.
302
379
  include_resources: Whether the resources will be filled.
303
380
  include_python_packages: Whether the python packages will be filled.
381
+ include_full_metadata: Whether the full metadata will be included.
304
382
  **kwargs: Keyword arguments to allow schema specific logic
305
383
 
306
384
 
@@ -351,7 +429,8 @@ class PipelineRunSchema(NamedSchema, RunMetadataInterface, table=True):
351
429
  config.finalize_substitutions(start_time=self.start_time, inplace=True)
352
430
 
353
431
  body = PipelineRunResponseBody(
354
- user=self.user.to_model() if self.user else None,
432
+ user_id=self.user_id,
433
+ project_id=self.project_id,
355
434
  status=ExecutionStatus(self.status),
356
435
  stack=stack,
357
436
  pipeline=pipeline,
@@ -375,22 +454,10 @@ class PipelineRunSchema(NamedSchema, RunMetadataInterface, table=True):
375
454
  self.deployment
376
455
  and self.deployment.build
377
456
  and not self.deployment.build.is_local
378
- and self.deployment.build.stack
457
+ and self.deployment.build.stack_id
379
458
  ):
380
459
  is_templatable = True
381
460
 
382
- steps = {
383
- step.name: step.to_model(include_metadata=True)
384
- for step in self.step_runs
385
- }
386
-
387
- step_substitutions = {}
388
- for step_name, step in steps.items():
389
- step_substitutions[step_name] = step.config.substitutions
390
- # We fetch the steps hydrated before, but want them unhydrated
391
- # in the response -> We need to reset the metadata here
392
- step.metadata = None
393
-
394
461
  orchestrator_environment = (
395
462
  json.loads(self.orchestrator_environment)
396
463
  if self.orchestrator_environment
@@ -402,10 +469,10 @@ class PipelineRunSchema(NamedSchema, RunMetadataInterface, table=True):
402
469
  orchestrator_environment.pop("python_packages", None)
403
470
 
404
471
  metadata = PipelineRunResponseMetadata(
405
- project=self.project.to_model(),
406
- run_metadata=self.fetch_metadata(),
472
+ run_metadata=self.fetch_metadata(
473
+ include_full_metadata=include_full_metadata
474
+ ),
407
475
  config=config,
408
- steps=steps,
409
476
  start_time=self.start_time,
410
477
  end_time=self.end_time,
411
478
  client_environment=client_environment,
@@ -418,24 +485,21 @@ class PipelineRunSchema(NamedSchema, RunMetadataInterface, table=True):
418
485
  if self.deployment
419
486
  else None,
420
487
  is_templatable=is_templatable,
421
- step_substitutions=step_substitutions,
422
488
  )
423
489
 
424
490
  resources = None
425
491
  if include_resources:
426
- model_version = None
427
- if self.model_version:
428
- model_version = self.model_version.to_model()
429
-
430
492
  resources = PipelineRunResponseResources(
431
- model_version=model_version,
493
+ user=self.user.to_model() if self.user else None,
494
+ model_version=self.model_version.to_model()
495
+ if self.model_version
496
+ else None,
432
497
  tags=[tag.to_model() for tag in self.tags],
433
498
  logs=self.logs.to_model() if self.logs else None,
434
499
  )
435
500
 
436
501
  return PipelineRunResponse(
437
502
  id=self.id,
438
- project_id=self.project_id,
439
503
  name=self.name,
440
504
  body=body,
441
505
  metadata=metadata,
@@ -13,11 +13,12 @@
13
13
  # permissions and limitations under the License.
14
14
  """SQL Model Implementations for Pipelines and Pipeline Runs."""
15
15
 
16
- from typing import TYPE_CHECKING, Any, List, Optional
16
+ from typing import TYPE_CHECKING, Any, List, Optional, Sequence
17
17
  from uuid import UUID
18
18
 
19
19
  from sqlalchemy import TEXT, Column, UniqueConstraint
20
- from sqlalchemy.orm import object_session
20
+ from sqlalchemy.orm import joinedload, object_session
21
+ from sqlalchemy.sql.base import ExecutableOption
21
22
  from sqlmodel import Field, Relationship, desc, select
22
23
 
23
24
  from zenml.enums import TaggableResourceTypes
@@ -34,6 +35,7 @@ from zenml.zen_stores.schemas.base_schemas import NamedSchema
34
35
  from zenml.zen_stores.schemas.project_schemas import ProjectSchema
35
36
  from zenml.zen_stores.schemas.schema_utils import build_foreign_key_field
36
37
  from zenml.zen_stores.schemas.user_schemas import UserSchema
38
+ from zenml.zen_stores.schemas.utils import jl_arg
37
39
 
38
40
  if TYPE_CHECKING:
39
41
  from zenml.zen_stores.schemas.pipeline_build_schemas import (
@@ -130,6 +132,37 @@ class PipelineSchema(NamedSchema, table=True):
130
132
  "Missing DB session to fetch latest run for pipeline."
131
133
  )
132
134
 
135
+ @classmethod
136
+ def get_query_options(
137
+ cls,
138
+ include_metadata: bool = False,
139
+ include_resources: bool = False,
140
+ **kwargs: Any,
141
+ ) -> Sequence[ExecutableOption]:
142
+ """Get the query options for the schema.
143
+
144
+ Args:
145
+ include_metadata: Whether metadata will be included when converting
146
+ the schema to a model.
147
+ include_resources: Whether resources will be included when
148
+ converting the schema to a model.
149
+ **kwargs: Keyword arguments to allow schema specific logic
150
+
151
+ Returns:
152
+ A list of query options.
153
+ """
154
+ options = []
155
+
156
+ if include_resources:
157
+ options.extend(
158
+ [
159
+ joinedload(jl_arg(PipelineSchema.user)),
160
+ # joinedload(jl_arg(PipelineSchema.tags)),
161
+ ]
162
+ )
163
+
164
+ return options
165
+
133
166
  @classmethod
134
167
  def from_request(
135
168
  cls,
@@ -166,12 +199,9 @@ class PipelineSchema(NamedSchema, table=True):
166
199
  Returns:
167
200
  The created PipelineResponse.
168
201
  """
169
- latest_run = self.latest_run
170
-
171
202
  body = PipelineResponseBody(
172
- user=self.user.to_model() if self.user else None,
173
- latest_run_id=latest_run.id if latest_run else None,
174
- latest_run_status=latest_run.status if latest_run else None,
203
+ user_id=self.user_id,
204
+ project_id=self.project_id,
175
205
  created=self.created,
176
206
  updated=self.updated,
177
207
  )
@@ -179,24 +209,26 @@ class PipelineSchema(NamedSchema, table=True):
179
209
  metadata = None
180
210
  if include_metadata:
181
211
  metadata = PipelineResponseMetadata(
182
- project=self.project.to_model(),
183
212
  description=self.description,
184
213
  )
185
214
 
186
215
  resources = None
187
216
  if include_resources:
217
+ latest_run = self.latest_run
188
218
  latest_run_user = latest_run.user if latest_run else None
189
219
 
190
220
  resources = PipelineResponseResources(
221
+ user=self.user.to_model() if self.user else None,
191
222
  latest_run_user=latest_run_user.to_model()
192
223
  if latest_run_user
193
224
  else None,
225
+ latest_run_id=latest_run.id if latest_run else None,
226
+ latest_run_status=latest_run.status if latest_run else None,
194
227
  tags=[tag.to_model() for tag in self.tags],
195
228
  )
196
229
 
197
230
  return PipelineResponse(
198
231
  id=self.id,
199
- project_id=self.project_id,
200
232
  name=self.name,
201
233
  body=body,
202
234
  metadata=metadata,