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
@@ -15,11 +15,13 @@
15
15
 
16
16
  import base64
17
17
  import json
18
- from typing import TYPE_CHECKING, Any, List, Optional
18
+ from typing import TYPE_CHECKING, Any, List, Optional, Sequence
19
19
  from uuid import UUID
20
20
 
21
21
  from pydantic.json import pydantic_encoder
22
22
  from sqlalchemy import TEXT, Column, UniqueConstraint
23
+ from sqlalchemy.orm import joinedload
24
+ from sqlalchemy.sql.base import ExecutableOption
23
25
  from sqlmodel import Field, Relationship
24
26
 
25
27
  from zenml.models import (
@@ -35,6 +37,7 @@ from zenml.zen_stores.schemas.base_schemas import NamedSchema
35
37
  from zenml.zen_stores.schemas.project_schemas import ProjectSchema
36
38
  from zenml.zen_stores.schemas.schema_utils import build_foreign_key_field
37
39
  from zenml.zen_stores.schemas.user_schemas import UserSchema
40
+ from zenml.zen_stores.schemas.utils import jl_arg
38
41
 
39
42
  if TYPE_CHECKING:
40
43
  from zenml.zen_stores.schemas import TriggerSchema
@@ -99,6 +102,39 @@ class ActionSchema(NamedSchema, table=True):
99
102
 
100
103
  configuration: bytes
101
104
 
105
+ @classmethod
106
+ def get_query_options(
107
+ cls,
108
+ include_metadata: bool = False,
109
+ include_resources: bool = False,
110
+ **kwargs: Any,
111
+ ) -> Sequence[ExecutableOption]:
112
+ """Get the query options for the schema.
113
+
114
+ Args:
115
+ include_metadata: Whether metadata will be included when converting
116
+ the schema to a model.
117
+ include_resources: Whether resources will be included when
118
+ converting the schema to a model.
119
+ **kwargs: Keyword arguments to allow schema specific logic
120
+
121
+ Returns:
122
+ A list of query options.
123
+ """
124
+ options = []
125
+
126
+ if include_resources:
127
+ options.extend(
128
+ [
129
+ joinedload(jl_arg(ActionSchema.user)),
130
+ joinedload(
131
+ jl_arg(ActionSchema.service_account), innerjoin=True
132
+ ),
133
+ ]
134
+ )
135
+
136
+ return options
137
+
102
138
  @classmethod
103
139
  def from_request(cls, request: "ActionRequest") -> "ActionSchema":
104
140
  """Convert a `ActionRequest` to a `ActionSchema`.
@@ -169,7 +205,8 @@ class ActionSchema(NamedSchema, table=True):
169
205
  The converted model.
170
206
  """
171
207
  body = ActionResponseBody(
172
- user=self.user.to_model() if self.user else None,
208
+ user_id=self.user_id,
209
+ project_id=self.project_id,
173
210
  created=self.created,
174
211
  updated=self.updated,
175
212
  flavor=self.flavor,
@@ -178,7 +215,6 @@ class ActionSchema(NamedSchema, table=True):
178
215
  metadata = None
179
216
  if include_metadata:
180
217
  metadata = ActionResponseMetadata(
181
- project=self.project.to_model(),
182
218
  configuration=json.loads(
183
219
  base64.b64decode(self.configuration).decode()
184
220
  ),
@@ -188,11 +224,11 @@ class ActionSchema(NamedSchema, table=True):
188
224
  resources = None
189
225
  if include_resources:
190
226
  resources = ActionResponseResources(
227
+ user=self.user.to_model() if self.user else None,
191
228
  service_account=self.service_account.to_model(),
192
229
  )
193
230
  return ActionResponse(
194
231
  id=self.id,
195
- project_id=self.project_id,
196
232
  name=self.name,
197
233
  body=body,
198
234
  metadata=metadata,
@@ -15,11 +15,13 @@
15
15
 
16
16
  from datetime import datetime
17
17
  from secrets import token_hex
18
- from typing import Any, Optional, Tuple
18
+ from typing import Any, Optional, Sequence, Tuple
19
19
  from uuid import UUID
20
20
 
21
21
  from passlib.context import CryptContext
22
22
  from sqlalchemy import TEXT, Column, UniqueConstraint
23
+ from sqlalchemy.orm import joinedload
24
+ from sqlalchemy.sql.base import ExecutableOption
23
25
  from sqlmodel import Field, Relationship
24
26
 
25
27
  from zenml.models import (
@@ -36,6 +38,7 @@ from zenml.utils.time_utils import utc_now
36
38
  from zenml.zen_stores.schemas.base_schemas import NamedSchema
37
39
  from zenml.zen_stores.schemas.schema_utils import build_foreign_key_field
38
40
  from zenml.zen_stores.schemas.user_schemas import UserSchema
41
+ from zenml.zen_stores.schemas.utils import jl_arg
39
42
 
40
43
 
41
44
  class APIKeySchema(NamedSchema, table=True):
@@ -90,6 +93,31 @@ class APIKeySchema(NamedSchema, table=True):
90
93
  context = CryptContext(schemes=["bcrypt"], deprecated="auto")
91
94
  return context.hash(key)
92
95
 
96
+ @classmethod
97
+ def get_query_options(
98
+ cls,
99
+ include_metadata: bool = False,
100
+ include_resources: bool = False,
101
+ **kwargs: Any,
102
+ ) -> Sequence[ExecutableOption]:
103
+ """Get the query options for the schema.
104
+
105
+ Args:
106
+ include_metadata: Whether metadata will be included when converting
107
+ the schema to a model.
108
+ include_resources: Whether resources will be included when
109
+ converting the schema to a model.
110
+ **kwargs: Keyword arguments to allow schema specific logic
111
+
112
+ Returns:
113
+ A list of query options.
114
+ """
115
+ options = [
116
+ joinedload(jl_arg(APIKeySchema.service_account), innerjoin=True),
117
+ ]
118
+
119
+ return options
120
+
93
121
  @classmethod
94
122
  def from_request(
95
123
  cls,
@@ -13,13 +13,14 @@
13
13
  # permissions and limitations under the License.
14
14
  """SQLModel implementation of artifact table."""
15
15
 
16
- from typing import TYPE_CHECKING, Any, List, Optional
16
+ from typing import TYPE_CHECKING, Any, List, Optional, Sequence, Tuple
17
17
  from uuid import UUID
18
18
 
19
19
  from pydantic import ValidationError
20
20
  from sqlalchemy import TEXT, Column, UniqueConstraint
21
- from sqlalchemy.orm import object_session
22
- from sqlmodel import Field, Relationship, desc, select
21
+ from sqlalchemy.orm import joinedload, object_session
22
+ from sqlalchemy.sql.base import ExecutableOption
23
+ from sqlmodel import Field, Relationship, asc, col, desc, select
23
24
 
24
25
  from zenml.config.source import Source
25
26
  from zenml.enums import (
@@ -33,11 +34,13 @@ from zenml.models import (
33
34
  ArtifactResponse,
34
35
  ArtifactResponseBody,
35
36
  ArtifactResponseMetadata,
37
+ ArtifactResponseResources,
36
38
  ArtifactUpdate,
37
39
  ArtifactVersionRequest,
38
40
  ArtifactVersionResponse,
39
41
  ArtifactVersionResponseBody,
40
42
  ArtifactVersionResponseMetadata,
43
+ ArtifactVersionResponseResources,
41
44
  ArtifactVersionUpdate,
42
45
  )
43
46
  from zenml.models.v2.core.artifact import ArtifactRequest
@@ -46,12 +49,11 @@ from zenml.zen_stores.schemas.base_schemas import BaseSchema, NamedSchema
46
49
  from zenml.zen_stores.schemas.component_schemas import StackComponentSchema
47
50
  from zenml.zen_stores.schemas.project_schemas import ProjectSchema
48
51
  from zenml.zen_stores.schemas.schema_utils import build_foreign_key_field
49
- from zenml.zen_stores.schemas.step_run_schemas import (
50
- StepRunInputArtifactSchema,
51
- StepRunOutputArtifactSchema,
52
- )
53
52
  from zenml.zen_stores.schemas.user_schemas import UserSchema
54
- from zenml.zen_stores.schemas.utils import RunMetadataInterface
53
+ from zenml.zen_stores.schemas.utils import (
54
+ RunMetadataInterface,
55
+ jl_arg,
56
+ )
55
57
 
56
58
  if TYPE_CHECKING:
57
59
  from zenml.zen_stores.schemas.artifact_visualization_schemas import (
@@ -61,6 +63,10 @@ if TYPE_CHECKING:
61
63
  ModelVersionArtifactSchema,
62
64
  )
63
65
  from zenml.zen_stores.schemas.run_metadata_schemas import RunMetadataSchema
66
+ from zenml.zen_stores.schemas.step_run_schemas import (
67
+ StepRunInputArtifactSchema,
68
+ StepRunOutputArtifactSchema,
69
+ )
64
70
  from zenml.zen_stores.schemas.tag_schemas import TagSchema
65
71
 
66
72
 
@@ -114,6 +120,37 @@ class ArtifactSchema(NamedSchema, table=True):
114
120
  back_populates="artifacts",
115
121
  )
116
122
 
123
+ @classmethod
124
+ def get_query_options(
125
+ cls,
126
+ include_metadata: bool = False,
127
+ include_resources: bool = False,
128
+ **kwargs: Any,
129
+ ) -> Sequence[ExecutableOption]:
130
+ """Get the query options for the schema.
131
+
132
+ Args:
133
+ include_metadata: Whether metadata will be included when converting
134
+ the schema to a model.
135
+ include_resources: Whether resources will be included when
136
+ converting the schema to a model.
137
+ **kwargs: Keyword arguments to allow schema specific logic
138
+
139
+ Returns:
140
+ A list of query options.
141
+ """
142
+ options = []
143
+
144
+ if include_resources:
145
+ options.extend(
146
+ [
147
+ joinedload(jl_arg(ArtifactSchema.user)),
148
+ # joinedload(jl_arg(ArtifactSchema.tags)),
149
+ ]
150
+ )
151
+
152
+ return options
153
+
117
154
  @property
118
155
  def latest_version(self) -> Optional["ArtifactVersionSchema"]:
119
156
  """Fetch the latest version for this artifact.
@@ -178,19 +215,12 @@ class ArtifactSchema(NamedSchema, table=True):
178
215
  Returns:
179
216
  The created `ArtifactResponse`.
180
217
  """
181
- latest_id, latest_name = None, None
182
- if latest_version := self.latest_version:
183
- latest_id = latest_version.id
184
- latest_name = latest_version.version
185
-
186
218
  # Create the body of the model
187
219
  body = ArtifactResponseBody(
220
+ user_id=self.user_id,
221
+ project_id=self.project_id,
188
222
  created=self.created,
189
223
  updated=self.updated,
190
- tags=[tag.to_model() for tag in self.tags],
191
- latest_version_name=latest_name,
192
- latest_version_id=latest_id,
193
- user=self.user.to_model() if self.user else None,
194
224
  )
195
225
 
196
226
  # Create the metadata of the model
@@ -198,15 +228,28 @@ class ArtifactSchema(NamedSchema, table=True):
198
228
  if include_metadata:
199
229
  metadata = ArtifactResponseMetadata(
200
230
  has_custom_name=self.has_custom_name,
201
- project=self.project.to_model(),
231
+ )
232
+
233
+ resources = None
234
+ if include_resources:
235
+ latest_id, latest_name = None, None
236
+ if latest_version := self.latest_version:
237
+ latest_id = latest_version.id
238
+ latest_name = latest_version.version
239
+
240
+ resources = ArtifactResponseResources(
241
+ user=self.user.to_model() if self.user else None,
242
+ tags=[tag.to_model() for tag in self.tags],
243
+ latest_version_id=latest_id,
244
+ latest_version_name=latest_name,
202
245
  )
203
246
 
204
247
  return ArtifactResponse(
205
248
  id=self.id,
206
- project_id=self.project_id,
207
249
  name=self.name,
208
250
  body=body,
209
251
  metadata=metadata,
252
+ resources=resources,
210
253
  )
211
254
 
212
255
  def update(self, artifact_update: ArtifactUpdate) -> "ArtifactSchema":
@@ -305,24 +348,105 @@ class ArtifactVersionSchema(BaseSchema, RunMetadataInterface, table=True):
305
348
  overlaps="run_metadata",
306
349
  ),
307
350
  )
308
- output_of_step_runs: List["StepRunOutputArtifactSchema"] = Relationship(
309
- back_populates="artifact_version",
310
- sa_relationship_kwargs={"cascade": "delete"},
311
- )
312
- input_of_step_runs: List["StepRunInputArtifactSchema"] = Relationship(
313
- back_populates="artifact_version",
314
- sa_relationship_kwargs={"cascade": "delete"},
315
- )
316
351
  visualizations: List["ArtifactVisualizationSchema"] = Relationship(
317
352
  back_populates="artifact_version",
318
353
  sa_relationship_kwargs={"cascade": "delete"},
319
354
  )
355
+
356
+ # Needed for cascade deletion behavior
320
357
  model_versions_artifacts_links: List["ModelVersionArtifactSchema"] = (
321
358
  Relationship(
322
359
  back_populates="artifact_version",
323
360
  sa_relationship_kwargs={"cascade": "delete"},
324
361
  )
325
362
  )
363
+ output_of_step_runs: List["StepRunOutputArtifactSchema"] = Relationship(
364
+ back_populates="artifact_version",
365
+ sa_relationship_kwargs={"cascade": "delete"},
366
+ )
367
+ input_of_step_runs: List["StepRunInputArtifactSchema"] = Relationship(
368
+ back_populates="artifact_version",
369
+ sa_relationship_kwargs={"cascade": "delete"},
370
+ )
371
+
372
+ @classmethod
373
+ def get_query_options(
374
+ cls,
375
+ include_metadata: bool = False,
376
+ include_resources: bool = False,
377
+ **kwargs: Any,
378
+ ) -> Sequence[ExecutableOption]:
379
+ """Get the query options for the schema.
380
+
381
+ Args:
382
+ include_metadata: Whether metadata will be included when converting
383
+ the schema to a model.
384
+ include_resources: Whether resources will be included when
385
+ converting the schema to a model.
386
+ **kwargs: Keyword arguments to allow schema specific logic
387
+
388
+ Returns:
389
+ A list of query options.
390
+ """
391
+ options = []
392
+
393
+ # if include_metadata:
394
+ # options.extend(
395
+ # [
396
+ # joinedload(jl_arg(ArtifactVersionSchema.visualizations)),
397
+ # joinedload(jl_arg(ArtifactVersionSchema.run_metadata)),
398
+ # ]
399
+ # )
400
+
401
+ if include_resources:
402
+ options.extend(
403
+ [
404
+ joinedload(jl_arg(ArtifactVersionSchema.user)),
405
+ # joinedload(jl_arg(ArtifactVersionSchema.tags)),
406
+ ]
407
+ )
408
+
409
+ return options
410
+
411
+ @property
412
+ def producer_run_ids(self) -> Optional[Tuple[UUID, UUID]]:
413
+ """Fetch the producer run IDs for this artifact version.
414
+
415
+ Raises:
416
+ RuntimeError: If no session for the schema exists.
417
+
418
+ Returns:
419
+ The producer step run ID and pipeline run ID for this artifact
420
+ version.
421
+ """
422
+ from zenml.zen_stores.schemas import (
423
+ StepRunOutputArtifactSchema,
424
+ StepRunSchema,
425
+ )
426
+
427
+ if session := object_session(self):
428
+ row = session.execute(
429
+ select(StepRunSchema.id, StepRunSchema.pipeline_run_id)
430
+ .join(
431
+ StepRunOutputArtifactSchema,
432
+ col(StepRunOutputArtifactSchema.step_id)
433
+ == col(StepRunSchema.id),
434
+ )
435
+ .where(col(StepRunOutputArtifactSchema.artifact_id) == self.id)
436
+ .where(
437
+ col(StepRunSchema.status)
438
+ == ExecutionStatus.COMPLETED.value
439
+ )
440
+ # Fetch the oldest step run
441
+ .order_by(asc(StepRunSchema.created))
442
+ .limit(1)
443
+ ).one_or_none()
444
+
445
+ return (row[0], row[1]) if row else None
446
+ else:
447
+ raise RuntimeError(
448
+ "Missing DB session to fetch producer run for artifact version."
449
+ )
326
450
 
327
451
  @classmethod
328
452
  def from_request(
@@ -391,35 +515,19 @@ class ArtifactVersionSchema(BaseSchema, RunMetadataInterface, table=True):
391
515
  # This is an old source which was an importable source path
392
516
  data_type = Source.from_import_path(self.data_type)
393
517
 
394
- producer_step_run_id, producer_pipeline_run_id = None, None
395
- if self.output_of_step_runs:
396
- original_step_runs = [
397
- sr
398
- for sr in self.output_of_step_runs
399
- if sr.step_run.status == ExecutionStatus.COMPLETED
400
- ]
401
- if len(original_step_runs) == 1:
402
- step_run = original_step_runs[0].step_run
403
- producer_step_run_id = step_run.id
404
- producer_pipeline_run_id = step_run.pipeline_run_id
405
- else:
406
- step_run = self.output_of_step_runs[0].step_run
407
- producer_step_run_id = step_run.original_step_run_id
408
-
409
518
  # Create the body of the model
410
519
  artifact = self.artifact.to_model()
411
520
  body = ArtifactVersionResponseBody(
521
+ user_id=self.user_id,
522
+ project_id=self.project_id,
412
523
  artifact=artifact,
413
524
  version=self.version or str(self.version_number),
414
- user=self.user.to_model() if self.user else None,
415
525
  uri=self.uri,
416
526
  type=ArtifactType(self.type),
417
527
  materializer=materializer,
418
528
  data_type=data_type,
419
529
  created=self.created,
420
530
  updated=self.updated,
421
- tags=[tag.to_model() for tag in self.tags],
422
- producer_pipeline_run_id=producer_pipeline_run_id,
423
531
  save_type=ArtifactSaveType(self.save_type),
424
532
  artifact_store_id=self.artifact_store_id,
425
533
  )
@@ -428,17 +536,29 @@ class ArtifactVersionSchema(BaseSchema, RunMetadataInterface, table=True):
428
536
  metadata = None
429
537
  if include_metadata:
430
538
  metadata = ArtifactVersionResponseMetadata(
431
- project=self.project.to_model(),
432
- producer_step_run_id=producer_step_run_id,
433
539
  visualizations=[v.to_model() for v in self.visualizations],
434
540
  run_metadata=self.fetch_metadata(),
435
541
  )
436
542
 
437
543
  resources = None
544
+ if include_resources:
545
+ producer_step_run_id, producer_pipeline_run_id = None, None
546
+ if producer_run_ids := self.producer_run_ids:
547
+ # TODO: Why was the producer_pipeline_run_id only set for one
548
+ # of the cases before?
549
+ producer_step_run_id, producer_pipeline_run_id = (
550
+ producer_run_ids
551
+ )
552
+
553
+ resources = ArtifactVersionResponseResources(
554
+ user=self.user.to_model() if self.user else None,
555
+ tags=[tag.to_model() for tag in self.tags],
556
+ producer_step_run_id=producer_step_run_id,
557
+ producer_pipeline_run_id=producer_pipeline_run_id,
558
+ )
438
559
 
439
560
  return ArtifactVersionResponse(
440
561
  id=self.id,
441
- project_id=self.project_id,
442
562
  body=body,
443
563
  metadata=metadata,
444
564
  resources=resources,
@@ -14,9 +14,10 @@
14
14
  """Base classes for SQLModel schemas."""
15
15
 
16
16
  from datetime import datetime
17
- from typing import TYPE_CHECKING, Any, TypeVar
17
+ from typing import TYPE_CHECKING, Any, Sequence, TypeVar
18
18
  from uuid import UUID, uuid4
19
19
 
20
+ from sqlalchemy.sql.base import ExecutableOption
20
21
  from sqlmodel import Field, SQLModel
21
22
 
22
23
  from zenml.utils.time_utils import utc_now
@@ -34,6 +35,30 @@ class BaseSchema(SQLModel):
34
35
  created: datetime = Field(default_factory=utc_now)
35
36
  updated: datetime = Field(default_factory=utc_now)
36
37
 
38
+ @classmethod
39
+ def get_query_options(
40
+ cls,
41
+ include_metadata: bool = False,
42
+ include_resources: bool = False,
43
+ **kwargs: Any,
44
+ ) -> Sequence[ExecutableOption]:
45
+ """Get the query options for the schema.
46
+
47
+ This method should return query options that improve the performance
48
+ when trying to later on converting that schema to a model.
49
+
50
+ Args:
51
+ include_metadata: Whether metadata will be included when converting
52
+ the schema to a model.
53
+ include_resources: Whether resources will be included when
54
+ converting the schema to a model.
55
+ **kwargs: Keyword arguments to allow schema specific logic
56
+
57
+ Returns:
58
+ A list of query options.
59
+ """
60
+ return []
61
+
37
62
  def to_model(
38
63
  self,
39
64
  include_metadata: bool = False,
@@ -14,10 +14,12 @@
14
14
  """SQL Model Implementations for code repositories."""
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 TEXT, Column, UniqueConstraint
21
+ from sqlalchemy.orm import joinedload
22
+ from sqlalchemy.sql.base import ExecutableOption
21
23
  from sqlmodel import Field, Relationship
22
24
 
23
25
  from zenml.models import (
@@ -29,6 +31,7 @@ from zenml.models import (
29
31
  CodeRepositoryResponse,
30
32
  CodeRepositoryResponseBody,
31
33
  CodeRepositoryResponseMetadata,
34
+ CodeRepositoryResponseResources,
32
35
  CodeRepositoryUpdate,
33
36
  )
34
37
  from zenml.utils.time_utils import utc_now
@@ -36,6 +39,7 @@ from zenml.zen_stores.schemas.base_schemas import BaseSchema, NamedSchema
36
39
  from zenml.zen_stores.schemas.project_schemas import ProjectSchema
37
40
  from zenml.zen_stores.schemas.schema_utils import build_foreign_key_field
38
41
  from zenml.zen_stores.schemas.user_schemas import UserSchema
42
+ from zenml.zen_stores.schemas.utils import jl_arg
39
43
 
40
44
 
41
45
  class CodeRepositorySchema(NamedSchema, table=True):
@@ -78,6 +82,36 @@ class CodeRepositorySchema(NamedSchema, table=True):
78
82
  logo_url: Optional[str] = Field()
79
83
  description: Optional[str] = Field(sa_column=Column(TEXT, nullable=True))
80
84
 
85
+ @classmethod
86
+ def get_query_options(
87
+ cls,
88
+ include_metadata: bool = False,
89
+ include_resources: bool = False,
90
+ **kwargs: Any,
91
+ ) -> Sequence[ExecutableOption]:
92
+ """Get the query options for the schema.
93
+
94
+ Args:
95
+ include_metadata: Whether metadata will be included when converting
96
+ the schema to a model.
97
+ include_resources: Whether resources will be included when
98
+ converting the schema to a model.
99
+ **kwargs: Keyword arguments to allow schema specific logic
100
+
101
+ Returns:
102
+ A list of query options.
103
+ """
104
+ options = []
105
+
106
+ if include_resources:
107
+ options.extend(
108
+ [
109
+ joinedload(jl_arg(CodeRepositorySchema.user)),
110
+ ]
111
+ )
112
+
113
+ return options
114
+
81
115
  @classmethod
82
116
  def from_request(
83
117
  cls, request: "CodeRepositoryRequest"
@@ -118,7 +152,8 @@ class CodeRepositorySchema(NamedSchema, table=True):
118
152
  The created CodeRepositoryResponse.
119
153
  """
120
154
  body = CodeRepositoryResponseBody(
121
- user=self.user.to_model() if self.user else None,
155
+ user_id=self.user_id,
156
+ project_id=self.project_id,
122
157
  source=json.loads(self.source),
123
158
  logo_url=self.logo_url,
124
159
  created=self.created,
@@ -127,16 +162,22 @@ class CodeRepositorySchema(NamedSchema, table=True):
127
162
  metadata = None
128
163
  if include_metadata:
129
164
  metadata = CodeRepositoryResponseMetadata(
130
- project=self.project.to_model(),
131
165
  config=json.loads(self.config),
132
166
  description=self.description,
133
167
  )
168
+
169
+ resources = None
170
+ if include_resources:
171
+ resources = CodeRepositoryResponseResources(
172
+ user=self.user.to_model() if self.user else None,
173
+ )
174
+
134
175
  return CodeRepositoryResponse(
135
176
  id=self.id,
136
- project_id=self.project_id,
137
177
  name=self.name,
138
- metadata=metadata,
139
178
  body=body,
179
+ metadata=metadata,
180
+ resources=resources,
140
181
  )
141
182
 
142
183
  def update(self, update: "CodeRepositoryUpdate") -> "CodeRepositorySchema":