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.
- zenml/VERSION +1 -1
- zenml/artifacts/utils.py +8 -0
- 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/logging/step_logging.py +17 -4
- 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/cloud_utils.py +2 -2
- 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/rbac/zenml_cloud_rbac.py +4 -3
- 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/routers/steps_endpoints.py +3 -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.dev20250526.dist-info → zenml_nightly-0.82.1.dev20250528.dist-info}/METADATA +1 -1
- {zenml_nightly-0.82.1.dev20250526.dist-info → zenml_nightly-0.82.1.dev20250528.dist-info}/RECORD +225 -219
- 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.dev20250526.dist-info → zenml_nightly-0.82.1.dev20250528.dist-info}/LICENSE +0 -0
- {zenml_nightly-0.82.1.dev20250526.dist-info → zenml_nightly-0.82.1.dev20250528.dist-info}/WHEEL +0 -0
- {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
|
-
|
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
|
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
|
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
|
-
|
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
|
-
|
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":
|