zenml-nightly 0.82.1.dev20250527__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.
- zenml/VERSION +1 -1
- zenml/cli/base.py +6 -1
- zenml/cli/model.py +16 -36
- zenml/cli/server.py +8 -3
- zenml/client.py +20 -4
- zenml/client_lazy_loader.py +2 -0
- zenml/config/docker_settings.py +15 -2
- zenml/enums.py +3 -0
- zenml/event_hub/event_hub.py +1 -1
- zenml/integrations/bitbucket/plugins/event_sources/bitbucket_webhook_event_source.py +1 -1
- zenml/integrations/github/plugins/event_sources/github_webhook_event_source.py +1 -1
- zenml/integrations/kubernetes/flavors/kubernetes_orchestrator_flavor.py +3 -0
- zenml/integrations/kubernetes/orchestrators/kubernetes_orchestrator_entrypoint.py +37 -26
- zenml/login/web_login.py +1 -1
- zenml/model/model.py +13 -23
- zenml/models/__init__.py +39 -2
- zenml/models/v2/base/scoped.py +34 -15
- zenml/models/v2/core/artifact.py +10 -9
- zenml/models/v2/core/artifact_version.py +16 -16
- zenml/models/v2/core/logs.py +8 -50
- zenml/models/v2/core/model.py +10 -10
- zenml/models/v2/core/model_version.py +155 -88
- zenml/models/v2/core/pipeline.py +10 -11
- zenml/models/v2/core/pipeline_deployment.py +1 -9
- zenml/models/v2/core/pipeline_run.py +10 -17
- zenml/models/v2/core/run_template.py +10 -10
- zenml/models/v2/core/step_run.py +100 -16
- zenml/models/v2/core/tag.py +5 -4
- zenml/models/v2/misc/pipeline_run_dag.py +46 -0
- zenml/orchestrators/base_orchestrator.py +8 -19
- zenml/orchestrators/cache_utils.py +48 -1
- zenml/orchestrators/input_utils.py +35 -39
- zenml/orchestrators/step_launcher.py +1 -1
- zenml/orchestrators/step_run_utils.py +26 -10
- zenml/pipelines/pipeline_definition.py +3 -3
- zenml/pipelines/run_utils.py +2 -3
- zenml/service_connectors/service_connector.py +5 -1
- zenml/stack/stack_component.py +1 -4
- zenml/steps/step_context.py +1 -1
- zenml/utils/dashboard_utils.py +3 -3
- zenml/zen_server/auth.py +6 -3
- zenml/zen_server/dashboard/assets/{404-_AtuLtaX.js → 404-DmJUgorp.js} +1 -1
- zenml/zen_server/dashboard/assets/{@radix-C7hRs6Kx.js → @radix-Cdvw4jJ8.js} +1 -1
- zenml/zen_server/dashboard/assets/{@react-router-CNP6g_RL.js → @react-router-DeDfXbUF.js} +5 -5
- zenml/zen_server/dashboard/assets/{@reactflow-CQi1Z1Wq.js → @reactflow-8OCk19Fi.js} +1 -1
- zenml/zen_server/dashboard/assets/{@tanstack-CSxjHCME.js → @tanstack-5gTMR7G2.js} +4 -4
- zenml/zen_server/dashboard/assets/AlertDialogDropdownItem-CZW4QyWn.js +1 -0
- zenml/zen_server/dashboard/assets/ButtonGroup-DFWWFGUE.js +1 -0
- zenml/zen_server/dashboard/assets/{CodeSnippet-CvI6D0wx.js → CodeSnippet-D2HkkAGr.js} +1 -1
- zenml/zen_server/dashboard/assets/CollapsibleCard-CnS09ljw.js +1 -0
- zenml/zen_server/dashboard/assets/{ComponentBadge-DKw7Gndh.js → ComponentBadge-CDgdd0Ks.js} +1 -1
- zenml/zen_server/dashboard/assets/ComponentIcon-CbbOc7lb.js +1 -0
- zenml/zen_server/dashboard/assets/{DeleteAlertDialog-DVvXt-S6.js → DeleteAlertDialog-VIOMDLmx.js} +1 -1
- zenml/zen_server/dashboard/assets/DialogItem-ClFCqxEp.js +1 -0
- zenml/zen_server/dashboard/assets/{DisplayDate-CYVBBSgr.js → DisplayDate-8RESqe5H.js} +1 -1
- zenml/zen_server/dashboard/assets/{EmptyState-M1jafpg6.js → EmptyState-CjrgDtVk.js} +1 -1
- zenml/zen_server/dashboard/assets/{Error-BWaXP0VK.js → Error-CQzjbDcN.js} +1 -1
- zenml/zen_server/dashboard/assets/ExecutionStatus-CWreILP0.js +1 -0
- zenml/zen_server/dashboard/assets/{Helpbox-iE1xLmiZ.js → Helpbox-CiKxG5_X.js} +1 -1
- zenml/zen_server/dashboard/assets/Infobox-CGxFvqzi.js +1 -0
- zenml/zen_server/dashboard/assets/LeftSideMenu-DCsKdIjC.js +1 -0
- zenml/zen_server/dashboard/assets/{Lock-DW-0_M0o.js → Lock-CrIAdQo6.js} +1 -1
- zenml/zen_server/dashboard/assets/NestedCollapsible-3M4llYtH.js +1 -0
- zenml/zen_server/dashboard/assets/NumberBox-C0mQktmV.js +1 -0
- zenml/zen_server/dashboard/assets/Partials-DSjkttlz.js +1 -0
- zenml/zen_server/dashboard/assets/{PasswordChecker-lYTOtNom.js → PasswordChecker-B88WjuCe.js} +1 -1
- zenml/zen_server/dashboard/assets/ProCta-Dm5cWKpS.js +1 -0
- zenml/zen_server/dashboard/assets/{ProviderIcon-DLo7t1lo.js → ProviderIcon-DPwMR6nF.js} +1 -1
- zenml/zen_server/dashboard/assets/ProviderRadio-DEDNRgAb.js +1 -0
- zenml/zen_server/dashboard/assets/RunsBody-BRBn1e2O.js +1 -0
- zenml/zen_server/dashboard/assets/SearchField-DY6-UbRT.js +1 -0
- zenml/zen_server/dashboard/assets/SecretTooltip-CZTRnaCV.js +1 -0
- zenml/zen_server/dashboard/assets/{SetPassword-DR-EiLI5.js → SetPassword-BjNGDC5e.js} +1 -1
- zenml/zen_server/dashboard/assets/SheetHeader-CASpN2Lz.js +1 -0
- zenml/zen_server/dashboard/assets/StackComponentList-Be1pQt9m.js +1 -0
- zenml/zen_server/dashboard/assets/StackList-BdiR5DvR.js +1 -0
- zenml/zen_server/dashboard/assets/StackName-ojLC6xdl.js +1 -0
- zenml/zen_server/dashboard/assets/Tabs-DNSKblCM.js +1 -0
- zenml/zen_server/dashboard/assets/Tick-BPrWnNlN.js +1 -0
- zenml/zen_server/dashboard/assets/{UpdatePasswordSchemas-DbFEaezI.js → UpdatePasswordSchemas-CNfKDo2Q.js} +1 -1
- zenml/zen_server/dashboard/assets/UsageReason-Cb-mpV8M.js +1 -0
- zenml/zen_server/dashboard/assets/{Wizard-CMI6Ksgz.js → Wizard-Dg8Pmn5A.js} +1 -1
- zenml/zen_server/dashboard/assets/WizardFooter-BcNDIvlQ.js +1 -0
- zenml/zen_server/dashboard/assets/{all-pipeline-runs-query-BGASHYtF.js → all-pipeline-runs-query-DCdax7I5.js} +1 -1
- zenml/zen_server/dashboard/assets/{arrow-left-CwgF2MEM.js → arrow-left-MRXv5pAH.js} +1 -1
- zenml/zen_server/dashboard/assets/bulk-delete-C_kpIB9A.js +3 -0
- zenml/zen_server/dashboard/assets/{check-DK77doTf.js → check-B9QMTa3f.js} +1 -1
- zenml/zen_server/dashboard/assets/{check-circle-mvyzYvIW.js → check-circle-C4tYvbtw.js} +1 -1
- zenml/zen_server/dashboard/assets/{chevron-down-A-rmltmI.js → chevron-down-jbbQh82s.js} +1 -1
- zenml/zen_server/dashboard/assets/{chevron-right-double-uNWbJT-C.js → chevron-right-double-Dgp_gEsp.js} +1 -1
- zenml/zen_server/dashboard/assets/{clock-CPA5cYxq.js → clock-B_mTG8PH.js} +1 -1
- zenml/zen_server/dashboard/assets/{code-browser-j2EpcxIA.js → code-browser-CiD8qkBx.js} +1 -1
- zenml/zen_server/dashboard/assets/configuration-form-B2hmKGnF.js +1 -0
- zenml/zen_server/dashboard/assets/connectivity-4UKGMYnr.webp +0 -0
- zenml/zen_server/dashboard/assets/constants-1EZZxtay.js +1 -0
- zenml/zen_server/dashboard/assets/create-stack-TKmMtrkQ.js +1 -0
- zenml/zen_server/dashboard/assets/dates-Buh6SMo7.js +1 -0
- zenml/zen_server/dashboard/assets/delete-run-CCR9md_s.js +1 -0
- zenml/zen_server/dashboard/assets/eye-CbVlAYty.js +1 -0
- zenml/zen_server/dashboard/assets/{file-text-BdxZdjP_.js → file-text-Cd8wVfq5.js} +1 -1
- zenml/zen_server/dashboard/assets/form-DFJkaFDX.js +1 -0
- zenml/zen_server/dashboard/assets/form-schemas-CrznJVzA.js +1 -0
- zenml/zen_server/dashboard/assets/{gcp-CHNvgEss.js → gcp-B1I3Qvcx.js} +1 -1
- zenml/zen_server/dashboard/assets/{help-DyMolRxD.js → help-Co6aedki.js} +1 -1
- zenml/zen_server/dashboard/assets/index-BFqbGSck.js +308 -0
- zenml/zen_server/dashboard/assets/{index-CrhdX_qG.js → index-BjUu1mP4.js} +1 -1
- zenml/zen_server/dashboard/assets/{index-DR30v9MZ.js → index-DWpiv-Ft.js} +1 -1
- zenml/zen_server/dashboard/assets/index-DuhuqTCI.css +1 -0
- zenml/zen_server/dashboard/assets/index-U992soPJ.js +1 -0
- zenml/zen_server/dashboard/assets/index.es-C1gfATPn.js +14 -0
- zenml/zen_server/dashboard/assets/{index.esm-D7jFlf5N.js → index.esm-DhJo3mA6.js} +1 -1
- zenml/zen_server/dashboard/assets/info-QkbQz4QU.js +1 -0
- zenml/zen_server/dashboard/assets/{key-icon-DO4DPJHZ.js → key-icon-C07HKw8z.js} +1 -1
- zenml/zen_server/dashboard/assets/{layout-h3cbx8WZ.js → layout-DBbfEFBe.js} +1 -1
- zenml/zen_server/dashboard/assets/layout-Do9YI4QX.js +1 -0
- zenml/zen_server/dashboard/assets/login-mutation-D3tFP6Wm.js +1 -0
- zenml/zen_server/dashboard/assets/{logs-B5n0U7tB.js → logs-CQKlJjo0.js} +1 -1
- zenml/zen_server/dashboard/assets/{package-D1Mhqeh8.js → package-miExReQl.js} +1 -1
- zenml/zen_server/dashboard/assets/page-9RjCitFH.js +1 -0
- zenml/zen_server/dashboard/assets/page-B0PsXWiT.js +1 -0
- zenml/zen_server/dashboard/assets/page-BCrKmYIZ.js +1 -0
- zenml/zen_server/dashboard/assets/page-BcRI3-aR.js +29 -0
- zenml/zen_server/dashboard/assets/page-Be3R2uYn.js +1 -0
- zenml/zen_server/dashboard/assets/page-BgknnddT.js +1 -0
- zenml/zen_server/dashboard/assets/page-BrT0_zSJ.js +40 -0
- zenml/zen_server/dashboard/assets/page-Bs3W2FDi.js +1 -0
- zenml/zen_server/dashboard/assets/page-C210HcBA.js +1 -0
- zenml/zen_server/dashboard/assets/page-C6KaiZ_W.js +1 -0
- zenml/zen_server/dashboard/assets/page-CAJ8B0vb.js +1 -0
- zenml/zen_server/dashboard/assets/page-CAUYrfui.js +1 -0
- zenml/zen_server/dashboard/assets/page-CHxVhF3x.js +1 -0
- zenml/zen_server/dashboard/assets/{page-CSwZxZMQ.js → page-CN7lkvXr.js} +1 -1
- zenml/zen_server/dashboard/assets/page-CUaMMoPG.js +1 -0
- zenml/zen_server/dashboard/assets/page-Cal6XQ4U.js +1 -0
- zenml/zen_server/dashboard/assets/page-CdZCmszX.js +1 -0
- zenml/zen_server/dashboard/assets/page-ChGcZI_6.js +1 -0
- zenml/zen_server/dashboard/assets/page-CktmtZ8Z.js +1 -0
- zenml/zen_server/dashboard/assets/page-ClvmVesa.js +1 -0
- zenml/zen_server/dashboard/assets/page-CnbIYE80.js +1 -0
- zenml/zen_server/dashboard/assets/page-CoXzjeEY.js +1 -0
- zenml/zen_server/dashboard/assets/page-CtiuMP_r.js +1 -0
- zenml/zen_server/dashboard/assets/page-D9Hfx6GV.js +1 -0
- zenml/zen_server/dashboard/assets/page-D9iuB88h.js +1 -0
- zenml/zen_server/dashboard/assets/page-DCcuPZ8P.js +1 -0
- zenml/zen_server/dashboard/assets/page-DEohTSz6.js +1 -0
- zenml/zen_server/dashboard/assets/page-DJIGaUQ9.js +1 -0
- zenml/zen_server/dashboard/assets/page-DKK6ulgy.js +1 -0
- zenml/zen_server/dashboard/assets/page-DNjKHjnH.js +1 -0
- zenml/zen_server/dashboard/assets/page-DUK0Nd_1.js +1 -0
- zenml/zen_server/dashboard/assets/page-DUKbOhaD.js +1 -0
- zenml/zen_server/dashboard/assets/page-DYOucPtA.js +1 -0
- zenml/zen_server/dashboard/assets/page-DpqRelAy.js +1 -0
- zenml/zen_server/dashboard/assets/{page-ZfTtFicG.js → page-DwVPpCFg.js} +2 -2
- zenml/zen_server/dashboard/assets/page-XURWnYZP.js +1 -0
- zenml/zen_server/dashboard/assets/page-abw-2oeW.js +1 -0
- zenml/zen_server/dashboard/assets/page-akLcPcKw.js +1 -0
- zenml/zen_server/dashboard/assets/page-n9ejQ2V3.js +2 -0
- zenml/zen_server/dashboard/assets/page-sJjNT9xA.js +6 -0
- zenml/zen_server/dashboard/assets/{persist-UUym702q.js → persist-DWMWVP-y.js} +1 -1
- zenml/zen_server/dashboard/assets/{persist-D87V82eO.js → persist-Dec_w7aB.js} +1 -1
- zenml/zen_server/dashboard/assets/pipeline-CSUlkd50.js +1 -0
- zenml/zen_server/dashboard/assets/{plus-COjQg3AG.js → plus-Cl0_rCVF.js} +1 -1
- zenml/zen_server/dashboard/assets/{react-error-boundary.esm-fyoUBS25.js → react-error-boundary.esm-7_MuhCay.js} +1 -1
- zenml/zen_server/dashboard/assets/{refresh-CM5T3QeU.js → refresh-BcTM09NW.js} +1 -1
- zenml/zen_server/dashboard/assets/resource-tyes-list-o2LXiMay.js +1 -0
- zenml/zen_server/dashboard/assets/resource-type-tooltip-DwHrJstL.js +1 -0
- zenml/zen_server/dashboard/assets/service-connectors-DSEMwJ5A.js +1 -0
- zenml/zen_server/dashboard/assets/{service-BQ9KIhls.js → service-jxtvgks0.js} +2 -2
- zenml/zen_server/dashboard/assets/sharedSchema-BXzg0EZz.js +1 -0
- zenml/zen_server/dashboard/assets/stack-detail-query-Cm0fsgo-.js +1 -0
- zenml/zen_server/dashboard/assets/{terminal-square-DMtel8mb.js → terminal-XFL_4QN-.js} +1 -1
- zenml/zen_server/dashboard/assets/terminal-square-XFL_4QN-.js +1 -0
- zenml/zen_server/dashboard/assets/transform-CeZdrxDZ.js +1 -0
- zenml/zen_server/dashboard/assets/{trash-BWSZ7NRK.js → trash-DP6Tpp_E.js} +1 -1
- zenml/zen_server/dashboard/assets/type-guards-CNgPYg8l.js +1 -0
- zenml/zen_server/dashboard/assets/update-current-user-mutation-D5MjcQ6F.js +1 -0
- zenml/zen_server/dashboard/assets/update-server-settings-mutation-CmnxdxiK.js +1 -0
- zenml/zen_server/dashboard/assets/{zod-C0xYeTvL.js → zod-XdS2h1ws.js} +1 -1
- zenml/zen_server/dashboard/index.html +7 -7
- zenml/zen_server/rbac/utils.py +2 -2
- zenml/zen_server/routers/auth_endpoints.py +2 -2
- zenml/zen_server/routers/devices_endpoints.py +8 -5
- zenml/zen_server/routers/pipeline_deployments_endpoints.py +1 -1
- zenml/zen_server/routers/pipelines_endpoints.py +1 -1
- zenml/zen_server/routers/run_templates_endpoints.py +3 -3
- zenml/zen_server/routers/runs_endpoints.py +35 -0
- zenml/zen_server/template_execution/utils.py +6 -6
- zenml/zen_stores/dag_generator.py +171 -0
- zenml/zen_stores/rest_zen_store.py +17 -3
- zenml/zen_stores/schemas/action_schemas.py +40 -4
- zenml/zen_stores/schemas/api_key_schemas.py +29 -1
- zenml/zen_stores/schemas/artifact_schemas.py +168 -48
- zenml/zen_stores/schemas/base_schemas.py +26 -1
- zenml/zen_stores/schemas/code_repository_schemas.py +46 -5
- zenml/zen_stores/schemas/component_schemas.py +44 -3
- zenml/zen_stores/schemas/device_schemas.py +43 -2
- zenml/zen_stores/schemas/event_source_schemas.py +41 -5
- zenml/zen_stores/schemas/flavor_schemas.py +42 -2
- zenml/zen_stores/schemas/model_schemas.py +113 -77
- zenml/zen_stores/schemas/pipeline_build_schemas.py +53 -4
- zenml/zen_stores/schemas/pipeline_deployment_schemas.py +53 -4
- zenml/zen_stores/schemas/pipeline_run_schemas.py +111 -47
- zenml/zen_stores/schemas/pipeline_schemas.py +41 -9
- zenml/zen_stores/schemas/run_template_schemas.py +75 -11
- zenml/zen_stores/schemas/schedule_schema.py +50 -5
- zenml/zen_stores/schemas/secret_schemas.py +39 -2
- zenml/zen_stores/schemas/service_connector_schemas.py +39 -2
- zenml/zen_stores/schemas/service_schemas.py +39 -4
- zenml/zen_stores/schemas/stack_schemas.py +47 -2
- zenml/zen_stores/schemas/step_run_schemas.py +89 -26
- zenml/zen_stores/schemas/tag_schemas.py +69 -5
- zenml/zen_stores/schemas/trigger_schemas.py +44 -5
- zenml/zen_stores/schemas/utils.py +25 -4
- zenml/zen_stores/sql_zen_store.py +471 -28
- zenml/zen_stores/zen_store_interface.py +9 -1
- {zenml_nightly-0.82.1.dev20250527.dist-info → zenml_nightly-0.82.1.dev20250528.dist-info}/METADATA +1 -1
- {zenml_nightly-0.82.1.dev20250527.dist-info → zenml_nightly-0.82.1.dev20250528.dist-info}/RECORD +220 -214
- zenml/zen_server/dashboard/assets/AlertDialogDropdownItem-BG7-Ki1L.js +0 -1
- zenml/zen_server/dashboard/assets/CollapsibleCard-D20FtrzC.js +0 -1
- zenml/zen_server/dashboard/assets/Commands-DGbAvMDk.js +0 -1
- zenml/zen_server/dashboard/assets/ComponentIcon-ils7uNAk.js +0 -1
- zenml/zen_server/dashboard/assets/CsvVizualization-DVN541XF.js +0 -15
- zenml/zen_server/dashboard/assets/DialogItem-BHWf3sIB.js +0 -1
- zenml/zen_server/dashboard/assets/ExecutionStatus-XrvT2r65.js +0 -1
- zenml/zen_server/dashboard/assets/Infobox-D9k5TFH4.js +0 -1
- zenml/zen_server/dashboard/assets/InlineAvatar-Cfz4WSLK.js +0 -1
- zenml/zen_server/dashboard/assets/MarkdownVisualization-URCyUPcZ.js +0 -14
- zenml/zen_server/dashboard/assets/NestedCollapsible-Dor-bi98.js +0 -1
- zenml/zen_server/dashboard/assets/NumberBox-D2A7ENHb.js +0 -1
- zenml/zen_server/dashboard/assets/Partials-DQJFw1yW.js +0 -1
- zenml/zen_server/dashboard/assets/ProBadge-Cp4hb1YT.js +0 -1
- zenml/zen_server/dashboard/assets/ProCta-EYoV9CvK.js +0 -1
- zenml/zen_server/dashboard/assets/ProviderRadio-BVDA-fAr.js +0 -1
- zenml/zen_server/dashboard/assets/RunSelector-BLuBYNJt.js +0 -1
- zenml/zen_server/dashboard/assets/RunsBody-W4WHf-sq.js +0 -1
- zenml/zen_server/dashboard/assets/SearchField-D-h6jXyg.js +0 -1
- zenml/zen_server/dashboard/assets/SecretTooltip-CePCL8kd.js +0 -1
- zenml/zen_server/dashboard/assets/StackList-CgmN5H-i.js +0 -1
- zenml/zen_server/dashboard/assets/Tabs-DxQ8PDOD.js +0 -1
- zenml/zen_server/dashboard/assets/Tick-CEsT3HPR.js +0 -1
- zenml/zen_server/dashboard/assets/UsageReason-DjI5qMje.js +0 -1
- zenml/zen_server/dashboard/assets/WizardFooter-CFBHFZas.js +0 -1
- zenml/zen_server/dashboard/assets/cloud-squares-DeRLMopf.svg +0 -43
- zenml/zen_server/dashboard/assets/configuration-form-BtI2Y4eX.js +0 -1
- zenml/zen_server/dashboard/assets/connectors-video-C9qY4syJ.svg +0 -21
- zenml/zen_server/dashboard/assets/constants-DP3ZEnXH.js +0 -1
- zenml/zen_server/dashboard/assets/create-stack-BJ6x5rzj.js +0 -1
- zenml/zen_server/dashboard/assets/dates-3pMLCNrD.js +0 -1
- zenml/zen_server/dashboard/assets/delete-run-DlSLEl5T.js +0 -1
- zenml/zen_server/dashboard/assets/docker-BuDBFEDL.js +0 -1
- zenml/zen_server/dashboard/assets/dots-horizontal-BGRJCPCs.js +0 -1
- zenml/zen_server/dashboard/assets/flavor-select-BnPxvQDN.js +0 -1
- zenml/zen_server/dashboard/assets/form-schemas-CbvoEUHr.js +0 -1
- zenml/zen_server/dashboard/assets/index-CFESYpe4.js +0 -1
- zenml/zen_server/dashboard/assets/index-CmLcvK2z.js +0 -1
- zenml/zen_server/dashboard/assets/index-CzX3ZYlI.css +0 -1
- zenml/zen_server/dashboard/assets/index-D2iSHVZq.js +0 -64
- zenml/zen_server/dashboard/assets/kubernetes-D6OUjwSK.js +0 -1
- zenml/zen_server/dashboard/assets/link-external-DUhCSKNm.js +0 -1
- zenml/zen_server/dashboard/assets/login-command-CkqxPtV3.js +0 -1
- zenml/zen_server/dashboard/assets/login-mutation-CXc-Klim.js +0 -1
- zenml/zen_server/dashboard/assets/not-found-olRU3fnu.js +0 -1
- zenml/zen_server/dashboard/assets/page-7keIM1V3.js +0 -1
- zenml/zen_server/dashboard/assets/page-B31neFwG.js +0 -1
- zenml/zen_server/dashboard/assets/page-B3zo4KYS.js +0 -1
- zenml/zen_server/dashboard/assets/page-BN3MHq1a.js +0 -1
- zenml/zen_server/dashboard/assets/page-BNgVExjN.js +0 -1
- zenml/zen_server/dashboard/assets/page-BPtvu74G.js +0 -1
- zenml/zen_server/dashboard/assets/page-BTIuG0ki.js +0 -2
- zenml/zen_server/dashboard/assets/page-BcQzleH6.js +0 -1
- zenml/zen_server/dashboard/assets/page-C05Jw4M2.js +0 -1
- zenml/zen_server/dashboard/assets/page-C28a7K8h.js +0 -1
- zenml/zen_server/dashboard/assets/page-C9WLk0X-.js +0 -1
- zenml/zen_server/dashboard/assets/page-CINMx64X.js +0 -1
- zenml/zen_server/dashboard/assets/page-CYrJbk7P.js +0 -1
- zenml/zen_server/dashboard/assets/page-Ce0cqLo3.js +0 -1
- zenml/zen_server/dashboard/assets/page-CgNsEkw-.js +0 -1
- zenml/zen_server/dashboard/assets/page-Ct2FUYuR.js +0 -1
- zenml/zen_server/dashboard/assets/page-D8G2B3Bu.js +0 -1
- zenml/zen_server/dashboard/assets/page-DL8a4_lg.js +0 -3
- zenml/zen_server/dashboard/assets/page-DMhYn1cF.js +0 -1
- zenml/zen_server/dashboard/assets/page-Dd_Yq-Uf.js +0 -6
- zenml/zen_server/dashboard/assets/page-DfSvqT8g.js +0 -1
- zenml/zen_server/dashboard/assets/page-Dt6ANUTx.js +0 -1
- zenml/zen_server/dashboard/assets/page-DtvTleaT.js +0 -1
- zenml/zen_server/dashboard/assets/page-DwfGTiVs.js +0 -1
- zenml/zen_server/dashboard/assets/page-JgomSTDc.js +0 -1
- zenml/zen_server/dashboard/assets/page-L84ig6HB.js +0 -1
- zenml/zen_server/dashboard/assets/page-Mabsn4QJ.js +0 -1
- zenml/zen_server/dashboard/assets/page-P04L5cm9.js +0 -1
- zenml/zen_server/dashboard/assets/page-PfhAnvq4.js +0 -1
- zenml/zen_server/dashboard/assets/page-WdRrlNt_.js +0 -1
- zenml/zen_server/dashboard/assets/page-cqJDDDeK.js +0 -1
- zenml/zen_server/dashboard/assets/page-k-Wxh9L_.js +0 -1
- zenml/zen_server/dashboard/assets/page-y-zV4n0c.js +0 -1
- zenml/zen_server/dashboard/assets/rocket-Cf-B-XOR.js +0 -1
- zenml/zen_server/dashboard/assets/settings_preview-0JLrRgHP.webp +0 -0
- zenml/zen_server/dashboard/assets/sharedSchema-Bse2agAf.js +0 -14
- zenml/zen_server/dashboard/assets/stack-detail-query-BAcZJrN3.js +0 -1
- zenml/zen_server/dashboard/assets/tick-circle-m94Aa6Zt.js +0 -1
- zenml/zen_server/dashboard/assets/tour-cover-BYfeen6M.webp +0 -0
- zenml/zen_server/dashboard/assets/type-guards-CaeD8wHO.js +0 -1
- zenml/zen_server/dashboard/assets/update-server-settings-mutation-DwMM1LJz.js +0 -1
- {zenml_nightly-0.82.1.dev20250527.dist-info → zenml_nightly-0.82.1.dev20250528.dist-info}/LICENSE +0 -0
- {zenml_nightly-0.82.1.dev20250527.dist-info → zenml_nightly-0.82.1.dev20250528.dist-info}/WHEEL +0 -0
- {zenml_nightly-0.82.1.dev20250527.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
|
-
|
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
|
-
|
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
|
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(
|
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
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
if
|
285
|
-
|
286
|
-
|
287
|
-
|
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
|
-
|
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.
|
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
|
-
|
406
|
-
|
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
|
-
|
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
|
-
|
173
|
-
|
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,
|