zenml-nightly 0.66.0.dev20240927__py3-none-any.whl → 0.68.1.dev20241102__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.
- README.md +18 -12
- RELEASE_NOTES.md +236 -0
- zenml/VERSION +1 -1
- zenml/__init__.py +5 -10
- zenml/analytics/context.py +16 -1
- zenml/analytics/enums.py +0 -13
- zenml/analytics/utils.py +18 -7
- zenml/artifact_stores/base_artifact_store.py +11 -0
- zenml/artifacts/artifact_config.py +19 -65
- zenml/artifacts/external_artifact.py +7 -53
- zenml/artifacts/external_artifact_config.py +21 -40
- zenml/artifacts/load_directory_materializer.py +91 -0
- zenml/artifacts/utils.py +204 -145
- zenml/cli/__init__.py +62 -127
- zenml/cli/base.py +8 -8
- zenml/cli/integration.py +0 -9
- zenml/cli/login.py +951 -0
- zenml/cli/pipeline.py +1 -1
- zenml/cli/served_model.py +8 -1
- zenml/cli/server.py +462 -577
- zenml/cli/service_accounts.py +4 -4
- zenml/cli/stack.py +78 -569
- zenml/cli/stack_components.py +5 -594
- zenml/cli/user_management.py +0 -12
- zenml/cli/utils.py +24 -142
- zenml/client.py +57 -40
- zenml/client_lazy_loader.py +29 -12
- zenml/config/compiler.py +7 -11
- zenml/config/global_config.py +9 -0
- zenml/config/pipeline_configurations.py +2 -1
- zenml/config/pipeline_run_configuration.py +2 -1
- zenml/config/server_config.py +7 -5
- zenml/config/step_configurations.py +2 -0
- zenml/constants.py +6 -42
- zenml/enums.py +1 -4
- zenml/environment.py +1 -315
- zenml/exceptions.py +12 -41
- zenml/hooks/hook_validators.py +1 -8
- zenml/integrations/airflow/orchestrators/airflow_orchestrator.py +2 -3
- zenml/integrations/argilla/__init__.py +1 -1
- zenml/integrations/argilla/annotators/argilla_annotator.py +234 -89
- zenml/integrations/argilla/flavors/argilla_annotator_flavor.py +10 -5
- zenml/integrations/aws/flavors/sagemaker_orchestrator_flavor.py +9 -5
- zenml/integrations/aws/orchestrators/sagemaker_orchestrator.py +15 -2
- zenml/integrations/aws/service_connectors/aws_service_connector.py +6 -0
- zenml/integrations/azure/__init__.py +6 -2
- zenml/integrations/azure/flavors/azureml_orchestrator_flavor.py +5 -4
- zenml/integrations/azure/orchestrators/azureml_orchestrator.py +1 -1
- zenml/integrations/bentoml/model_deployers/bentoml_model_deployer.py +85 -19
- zenml/integrations/bentoml/services/__init__.py +15 -4
- zenml/integrations/bentoml/services/bentoml_container_deployment.py +399 -0
- zenml/integrations/bentoml/services/{bentoml_deployment.py → bentoml_local_deployment.py} +81 -40
- zenml/{steps/base_parameters.py → integrations/bentoml/services/deployment_type.py} +8 -5
- zenml/integrations/bentoml/steps/bento_builder.py +1 -0
- zenml/integrations/bentoml/steps/bentoml_deployer.py +93 -41
- zenml/integrations/github/code_repositories/github_code_repository.py +1 -1
- zenml/integrations/gitlab/code_repositories/gitlab_code_repository.py +6 -1
- zenml/integrations/huggingface/__init__.py +1 -6
- zenml/integrations/kaniko/image_builders/kaniko_image_builder.py +3 -3
- zenml/integrations/lightning/orchestrators/lightning_orchestrator.py +3 -3
- zenml/integrations/lightning/orchestrators/lightning_orchestrator_entrypoint.py +2 -2
- zenml/integrations/mlflow/experiment_trackers/mlflow_experiment_tracker.py +6 -3
- zenml/integrations/mlflow/model_registries/mlflow_model_registry.py +6 -0
- zenml/integrations/mlflow/services/mlflow_deployment.py +2 -2
- zenml/integrations/mlflow/steps/mlflow_deployer.py +1 -1
- zenml/integrations/mlflow/steps/mlflow_registry.py +1 -1
- zenml/integrations/neptune/experiment_trackers/run_state.py +2 -2
- zenml/integrations/pytorch/materializers/base_pytorch_materializer.py +8 -2
- zenml/integrations/pytorch/materializers/pytorch_module_materializer.py +4 -1
- zenml/integrations/s3/artifact_stores/s3_artifact_store.py +98 -0
- zenml/integrations/s3/flavors/s3_artifact_store_flavor.py +14 -0
- zenml/integrations/s3/utils.py +40 -0
- zenml/integrations/tensorflow/__init__.py +0 -9
- zenml/logging/step_logging.py +13 -15
- zenml/{new/pipelines → login}/__init__.py +4 -1
- zenml/login/credentials.py +346 -0
- zenml/login/credentials_store.py +603 -0
- zenml/{new → login/pro}/__init__.py +4 -1
- zenml/login/pro/client.py +496 -0
- zenml/login/pro/constants.py +34 -0
- zenml/{lineage_graph/edge.py → login/pro/models.py} +9 -8
- zenml/{zen_server/deploy/terraform/providers → login/pro/organization}/__init__.py +2 -2
- zenml/login/pro/organization/client.py +79 -0
- zenml/{lineage_graph/node/base_node.py → login/pro/organization/models.py} +13 -12
- zenml/{new/steps → login/pro/tenant}/__init__.py +2 -1
- zenml/login/pro/tenant/client.py +92 -0
- zenml/login/pro/tenant/models.py +174 -0
- zenml/login/pro/utils.py +121 -0
- zenml/{cli → login}/web_login.py +64 -28
- zenml/materializers/__init__.py +2 -0
- zenml/materializers/base_materializer.py +43 -9
- zenml/materializers/built_in_materializer.py +1 -1
- zenml/materializers/uuid_materializer.py +79 -0
- zenml/metadata/lazy_load.py +10 -7
- zenml/metadata/metadata_types.py +49 -0
- zenml/model/lazy_load.py +85 -4
- zenml/model/model.py +61 -83
- zenml/model/utils.py +47 -118
- zenml/models/__init__.py +6 -0
- zenml/models/v2/base/base.py +12 -8
- zenml/models/v2/base/filter.py +9 -0
- zenml/models/v2/core/artifact_version.py +53 -25
- zenml/models/v2/core/component.py +54 -19
- zenml/models/v2/core/flavor.py +13 -13
- zenml/models/v2/core/model.py +4 -1
- zenml/models/v2/core/model_version.py +4 -6
- zenml/models/v2/core/model_version_artifact.py +3 -1
- zenml/models/v2/core/model_version_pipeline_run.py +3 -1
- zenml/models/v2/core/pipeline.py +3 -1
- zenml/models/v2/core/pipeline_run.py +24 -3
- zenml/models/v2/core/run_metadata.py +2 -2
- zenml/models/v2/core/run_template.py +3 -1
- zenml/models/v2/core/stack.py +7 -3
- zenml/models/v2/core/step_run.py +58 -14
- zenml/models/v2/misc/auth_models.py +11 -2
- zenml/models/v2/misc/server_models.py +2 -4
- zenml/orchestrators/base_orchestrator.py +41 -4
- zenml/orchestrators/input_utils.py +52 -36
- zenml/orchestrators/step_launcher.py +50 -171
- zenml/orchestrators/step_run_utils.py +574 -0
- zenml/orchestrators/step_runner.py +83 -120
- zenml/orchestrators/utils.py +46 -180
- zenml/pipelines/__init__.py +3 -16
- zenml/{new/pipelines → pipelines}/pipeline_context.py +3 -18
- zenml/pipelines/pipeline_decorator.py +34 -60
- zenml/{new/pipelines/pipeline.py → pipelines/pipeline_definition.py} +210 -207
- zenml/{new/pipelines → pipelines}/run_utils.py +11 -10
- zenml/services/local/local_daemon_entrypoint.py +4 -4
- zenml/services/service.py +2 -2
- zenml/stack/stack.py +3 -108
- zenml/stack/stack_component.py +2 -78
- zenml/stack/utils.py +26 -14
- zenml/stack_deployments/aws_stack_deployment.py +3 -0
- zenml/step_operators/step_operator_entrypoint_configuration.py +1 -1
- zenml/steps/__init__.py +3 -9
- zenml/steps/base_step.py +25 -267
- zenml/steps/entrypoint_function_utils.py +2 -80
- zenml/{new/steps → steps}/step_context.py +12 -66
- zenml/steps/step_decorator.py +42 -89
- zenml/steps/step_invocation.py +16 -60
- zenml/steps/utils.py +4 -23
- zenml/utils/dashboard_utils.py +16 -51
- zenml/utils/materializer_utils.py +1 -1
- zenml/utils/requirements_utils.py +71 -0
- zenml/utils/singleton.py +15 -3
- zenml/utils/source_utils.py +39 -2
- zenml/utils/typing_utils.py +8 -28
- zenml/utils/visualization_utils.py +1 -1
- zenml/zen_server/auth.py +44 -39
- zenml/zen_server/dashboard/assets/{404-Y50hSt65.js → 404-DT4QRUqN.js} +1 -1
- zenml/zen_server/dashboard/assets/@radix-DP6vWzyx.js +85 -0
- zenml/zen_server/dashboard/assets/@react-router-BMhZulnd.js +29 -0
- zenml/zen_server/dashboard/assets/@reactflow-8U9qNlMR.js +17 -0
- zenml/zen_server/dashboard/assets/@tanstack-BUCbhJyH.js +22 -0
- zenml/zen_server/dashboard/assets/{AlertDialogDropdownItem-xLR9a1iw.js → AlertDialogDropdownItem-C6N2rGrB.js} +1 -1
- zenml/zen_server/dashboard/assets/{CodeSnippet-IxXNxUDa.js → CodeSnippet-CqybNv0k.js} +1 -1
- zenml/zen_server/dashboard/assets/{CollapsibleCard-BhutZbBL.js → CollapsibleCard-0r_8G2Lj.js} +1 -1
- zenml/zen_server/dashboard/assets/{Commands-Bf-rd1z8.js → Commands-BDjgBQKi.js} +1 -1
- zenml/zen_server/dashboard/assets/ComponentBadge-DUiEYJHu.js +1 -0
- zenml/zen_server/dashboard/assets/ComponentFallbackDialog-BFoH5K4V.js +1 -0
- zenml/zen_server/dashboard/assets/ComponentIcon-CAIoUis2.js +1 -0
- zenml/zen_server/dashboard/assets/{CopyButton-DcFHidFJ.js → CopyButton-C745BrKi.js} +1 -1
- zenml/zen_server/dashboard/assets/{CsvVizualization-QSbjrfxw.js → CsvVizualization-PpAq0CeZ.js} +5 -5
- zenml/zen_server/dashboard/assets/{DialogItem-Cd3HqST4.js → DialogItem-DcVCZEew.js} +1 -1
- zenml/zen_server/dashboard/assets/{DisplayDate-DkCy54Bp.js → DisplayDate-BeXgUG_C.js} +1 -1
- zenml/zen_server/dashboard/assets/{EmptyState-Cs3DEmso.js → EmptyState-DeK7H4pr.js} +1 -1
- zenml/zen_server/dashboard/assets/{Error-BhwdmqK7.js → Error-BMlzibXj.js} +1 -1
- zenml/zen_server/dashboard/assets/{Helpbox-0pBpTwTm.js → Helpbox-BLf40fLV.js} +1 -1
- zenml/zen_server/dashboard/assets/{Infobox-BTK_EUKT.js → Infobox-BwisKifi.js} +1 -1
- zenml/zen_server/dashboard/assets/{InlineAvatar-CA3DFMcM.js → InlineAvatar-jEgodSgX.js} +1 -1
- zenml/zen_server/dashboard/assets/{Lock-CmIn0szs.js → Lock-3lLt1ih0.js} +1 -1
- zenml/zen_server/dashboard/assets/MarkdownVisualization-8O9kTr-2.js +14 -0
- zenml/zen_server/dashboard/assets/{NumberBox-CrN0_kqI.js → NumberBox-T9eELfLZ.js} +1 -1
- zenml/zen_server/dashboard/assets/{Partials-QLOZw624.js → Partials-YPBB3V4q.js} +1 -1
- zenml/zen_server/dashboard/assets/{PasswordChecker-DE71J_3F.js → PasswordChecker-CW0kqY0W.js} +1 -1
- zenml/zen_server/dashboard/assets/{ProviderIcon-C16CCIN4.js → ProviderIcon-Bb3Xha5A.js} +1 -1
- zenml/zen_server/dashboard/assets/{ProviderRadio-D3FuCHf3.js → ProviderRadio-BROY1700.js} +1 -1
- zenml/zen_server/dashboard/assets/RunSelector-DCiL3M1c.js +1 -0
- zenml/zen_server/dashboard/assets/SearchField-DfUiGFVd.js +1 -0
- zenml/zen_server/dashboard/assets/{SecretTooltip-BaMwHF-Q.js → SecretTooltip-C_qByGWB.js} +1 -1
- zenml/zen_server/dashboard/assets/{SetPassword-DuIC65H9.js → SetPassword-7pRB00El.js} +1 -1
- zenml/zen_server/dashboard/assets/{Tick-DJTCF0Re.js → Tick-CykQFPj2.js} +1 -1
- zenml/zen_server/dashboard/assets/{UpdatePasswordSchemas-CUm-DMpw.js → UpdatePasswordSchemas-DckMEkFf.js} +1 -1
- zenml/zen_server/dashboard/assets/{UsageReason-CKw0juLF.js → UsageReason-DVceN14P.js} +1 -1
- zenml/zen_server/dashboard/assets/{WizardFooter-Cv9ApYWU.js → WizardFooter-CW0Cvd70.js} +1 -1
- zenml/zen_server/dashboard/assets/{check-circle-DOoS4yhF.js → check-circle-Dwxliy1Z.js} +1 -1
- zenml/zen_server/dashboard/assets/{chevron-down-Cwb-W_B_.js → chevron-down-8wLBS5pQ.js} +1 -1
- zenml/zen_server/dashboard/assets/{chevron-right-double-c9H46Kl8.js → chevron-right-double-DoD8iXWM.js} +1 -1
- zenml/zen_server/dashboard/assets/{cloud-only-BB4BVa6E.js → cloud-only-B-s_HMDm.js} +1 -1
- zenml/zen_server/dashboard/assets/{code-browser-BJYErIjr.js → code-browser-CZUQs3Wa.js} +1 -1
- zenml/zen_server/dashboard/assets/{copy-CaGlDsUy.js → copy-CaSMXwiU.js} +1 -1
- zenml/zen_server/dashboard/assets/{create-stack-F29xAUEx.js → create-stack-CEmaPZ4c.js} +1 -1
- zenml/zen_server/dashboard/assets/delete-run-D-LKbGyz.js +1 -0
- zenml/zen_server/dashboard/assets/{docker-BFAFXr2_.js → docker-BFNgg-z3.js} +1 -1
- zenml/zen_server/dashboard/assets/{dots-horizontal-C6K59vUm.js → dots-horizontal-DK5Duzx4.js} +1 -1
- zenml/zen_server/dashboard/assets/{form-schemas-BKXwSDK2.js → form-schemas-1AyOCx90.js} +1 -1
- zenml/zen_server/dashboard/assets/{gcp-Dj6ntk0L.js → gcp-7M2Yf3ZK.js} +1 -1
- zenml/zen_server/dashboard/assets/{help-CwN931fX.js → help-Dam461dC.js} +1 -1
- zenml/zen_server/dashboard/assets/{index-5GJ5ysEZ.js → index-BVJ8n2-j.js} +1 -1
- zenml/zen_server/dashboard/assets/index-Bpmj40BI.js +1 -0
- zenml/zen_server/dashboard/assets/index-CbU4Ln_E.css +1 -0
- zenml/zen_server/dashboard/assets/{index-D-mtoBj3.js → index-DKPhqP2B.js} +1 -1
- zenml/zen_server/dashboard/assets/index-QQb7wQEC.js +55 -0
- zenml/zen_server/dashboard/assets/index.esm-cuVep_NJ.js +1 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-400-normal-BLGc9T1a.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-400-normal-ZzOtrSSW.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-500-normal-D4Vwzodn.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-500-normal-DH2hs3aW.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-600-normal-BGBWG807.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-600-normal-BuzJQFbW.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-ext-400-normal-BPnxn4xp.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-ext-400-normal-Dc4VJyIJ.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-ext-500-normal-BShVwWPj.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-ext-500-normal-CUiC4oBV.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-ext-600-normal-Bt9VVOA-.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-ext-600-normal-CaqZN2hq.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-400-normal-BZzXV7-1.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-400-normal-DxZsaF_h.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-500-normal-CeQXL5ds.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-500-normal-d_eO-yCQ.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-600-normal-CwicyhtI.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-600-normal-Dhlb-90d.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-ext-400-normal-Bput3-QP.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-ext-400-normal-DCpCPQOf.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-ext-500-normal-B6guLgqG.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-ext-500-normal-M2hEX8vc.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-ext-600-normal-C9WLioJ8.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-ext-600-normal-Cnui8OiR.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-400-normal-BOOGhInR.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-400-normal-gitzw0hO.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-500-normal-D2bGa7uu.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-500-normal-deR1Tlfd.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-600-normal-B5cFAncS.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-600-normal-D273HNI0.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-ext-400-normal-C1t-h-pH.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-ext-400-normal-hnt3BR84.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-ext-500-normal-CIS2RHJS.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-ext-500-normal-UMdmhHu2.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-ext-600-normal-BnYJhD27.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-ext-600-normal-CAF0vJDd.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-vietnamese-400-normal-BUNmGMP1.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-vietnamese-400-normal-DMkecbls.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-vietnamese-500-normal-DOriooB6.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-vietnamese-500-normal-DQPw2Hwd.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-vietnamese-600-normal-Cc8MFFhd.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-vietnamese-600-normal-Cm6aH8_k.woff +0 -0
- zenml/zen_server/dashboard/assets/{kubernetes-BjbR6D-1.js → kubernetes--g7r02Zu.js} +1 -1
- zenml/zen_server/dashboard/assets/{layout-Dru15_XR.js → layout-DCSYN7-C.js} +1 -1
- zenml/zen_server/dashboard/assets/{link-external-BT2L8hAQ.js → link-external-CBEk6kEG.js} +1 -1
- zenml/zen_server/dashboard/assets/{login-mutation-ax6iL2Mb.js → login-mutation-DTcAFP1l.js} +1 -1
- zenml/zen_server/dashboard/assets/{logs-GiDJXbLS.js → logs-D5bdJGur.js} +1 -1
- zenml/zen_server/dashboard/assets/not-found-Cc-JkRH2.js +1 -0
- zenml/zen_server/dashboard/assets/{package-DYKZ5jKW.js → package-Cs35Szwh.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-HkVBdZl6.js → page-9yplj5JT.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-uORspyRu.js → page-B-y2XKIc.js} +1 -1
- zenml/zen_server/dashboard/assets/page-BBpOxVcY.js +1 -0
- zenml/zen_server/dashboard/assets/{page-BDg1F-Ug.js → page-BQQKaabe.js} +2 -2
- zenml/zen_server/dashboard/assets/page-BRInM1Lg.js +1 -0
- zenml/zen_server/dashboard/assets/{page-CvKnNK1S.js → page-BjjlMk7s.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-BukXK1Aa.js → page-Bvd7YH2A.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-DcTjHmYZ.js → page-C0N5q3l7.js} +1 -1
- zenml/zen_server/dashboard/assets/page-CT3Nep8W.js +1 -0
- zenml/zen_server/dashboard/assets/{page-DuqYMYmH.js → page-C_f47pBf.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-DRfcRK1w.js → page-ClUVkl-O.js} +1 -1
- zenml/zen_server/dashboard/assets/page-Cmv8C_yM.js +3 -0
- zenml/zen_server/dashboard/assets/{page-p0BhSAWx.js → page-CyN2bdWG.js} +1 -1
- zenml/zen_server/dashboard/assets/page-CzzXH4fs.js +1 -0
- zenml/zen_server/dashboard/assets/{page-6mfzecin.js → page-DH_Z7iW1.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-8kYmrh0B.js → page-DIOXwhiD.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-BXarY9K2.js → page-DLixvR-7.js} +1 -1
- zenml/zen_server/dashboard/assets/page-DTlGjgnG.js +1 -0
- zenml/zen_server/dashboard/assets/page-Dbpl86h0.js +1 -0
- zenml/zen_server/dashboard/assets/{page-MAXyfXBq.js → page-Ddgy6kDS.js} +1 -1
- zenml/zen_server/dashboard/assets/page-DtCAfBLy.js +9 -0
- zenml/zen_server/dashboard/assets/{page-CKHNAq7z.js → page-Dx16z7nA.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-DMSLXKGT.js → page-DzpVUZ8f.js} +1 -1
- zenml/zen_server/dashboard/assets/page-McUyYbo1.js +1 -0
- zenml/zen_server/dashboard/assets/{page-miU2rhYG.js → page-N4qoPHKb.js} +1 -1
- zenml/zen_server/dashboard/assets/page-T1P3RyAR.js +1 -0
- zenml/zen_server/dashboard/assets/{page-3qPX9WYH.js → page-bKaULTGG.js} +1 -1
- zenml/zen_server/dashboard/assets/page-sbXUJy9t.js +1 -0
- zenml/zen_server/dashboard/assets/{persist-CfJMar_k.js → persist-CP0JmYZ4.js} +1 -1
- zenml/zen_server/dashboard/assets/{persist-BxIR2XZs.js → persist-DNb5cdrU.js} +1 -1
- zenml/zen_server/dashboard/assets/{plus-Bc8eLSDM.js → plus-C9IxgN2M.js} +1 -1
- zenml/zen_server/dashboard/assets/{refresh-hfgWPeto.js → refresh-BVu22P_C.js} +1 -1
- zenml/zen_server/dashboard/assets/{rocket-SESCGQXm.js → rocket-CONEmRmB.js} +1 -1
- zenml/zen_server/dashboard/assets/{sharedSchema-vub0rii3.js → sharedSchema-TMLu-nYQ.js} +1 -1
- zenml/zen_server/dashboard/assets/stack-detail-query-xmYxSsUY.js +1 -0
- zenml/zen_server/dashboard/assets/{tick-circle-m-hJG8i9.js → tick-circle-CM1ZScbQ.js} +1 -1
- zenml/zen_server/dashboard/assets/{trash-DUWZWzse.js → trash-DkJHMOg7.js} +1 -1
- zenml/zen_server/dashboard/assets/{update-server-settings-mutation-FGVP7X2U.js → update-server-settings-mutation-DsU8cNVl.js} +1 -1
- zenml/zen_server/dashboard/assets/{url-CbAPzsmT.js → url-D5le3J4q.js} +1 -1
- zenml/zen_server/dashboard/assets/zod-D89GC_vc.js +1 -0
- zenml/zen_server/dashboard/index.html +7 -7
- zenml/zen_server/deploy/__init__.py +7 -16
- zenml/zen_server/deploy/base_provider.py +46 -73
- zenml/zen_server/deploy/{local → daemon}/__init__.py +3 -3
- zenml/zen_server/deploy/{local/local_provider.py → daemon/daemon_provider.py} +44 -63
- zenml/zen_server/deploy/{local/local_zen_server.py → daemon/daemon_zen_server.py} +50 -28
- zenml/zen_server/deploy/deployer.py +90 -171
- zenml/zen_server/deploy/deployment.py +20 -12
- zenml/zen_server/deploy/docker/docker_provider.py +9 -28
- zenml/zen_server/deploy/docker/docker_zen_server.py +19 -9
- zenml/zen_server/deploy/helm/Chart.yaml +1 -1
- zenml/zen_server/deploy/helm/README.md +2 -2
- zenml/zen_server/exceptions.py +11 -0
- zenml/zen_server/feature_gate/zenml_cloud_feature_gate.py +1 -1
- zenml/zen_server/jwt.py +9 -9
- zenml/zen_server/routers/artifact_version_endpoints.py +1 -1
- zenml/zen_server/routers/auth_endpoints.py +30 -8
- zenml/zen_server/routers/runs_endpoints.py +0 -28
- zenml/zen_server/routers/stack_components_endpoints.py +1 -1
- zenml/zen_server/routers/workspaces_endpoints.py +1 -1
- zenml/zen_server/template_execution/runner_entrypoint_configuration.py +7 -4
- zenml/zen_server/template_execution/utils.py +8 -63
- zenml/zen_server/utils.py +67 -69
- zenml/zen_server/zen_server_api.py +107 -17
- zenml/zen_stores/base_zen_store.py +4 -51
- zenml/zen_stores/migrations/versions/0.67.0_release.py +23 -0
- zenml/zen_stores/migrations/versions/0.68.0_release.py +23 -0
- zenml/zen_stores/migrations/versions/0.68.1_release.py +23 -0
- zenml/zen_stores/migrations/versions/1d8f30c54477_migrate_to_new_.py +124 -0
- zenml/zen_stores/migrations/versions/c22561cbb3a9_add_artifact_unique_constraints.py +86 -0
- zenml/zen_stores/rest_zen_store.py +325 -147
- zenml/zen_stores/schemas/api_key_schemas.py +9 -4
- zenml/zen_stores/schemas/artifact_schemas.py +21 -2
- zenml/zen_stores/schemas/artifact_visualization_schemas.py +1 -1
- zenml/zen_stores/schemas/component_schemas.py +49 -6
- zenml/zen_stores/schemas/device_schemas.py +9 -4
- zenml/zen_stores/schemas/flavor_schemas.py +1 -1
- zenml/zen_stores/schemas/model_schemas.py +1 -1
- zenml/zen_stores/schemas/pipeline_run_schemas.py +12 -4
- zenml/zen_stores/schemas/service_schemas.py +1 -1
- zenml/zen_stores/schemas/step_run_schemas.py +3 -3
- zenml/zen_stores/schemas/trigger_schemas.py +1 -1
- zenml/zen_stores/sql_zen_store.py +422 -145
- zenml/zen_stores/template_utils.py +3 -1
- {zenml_nightly-0.66.0.dev20240927.dist-info → zenml_nightly-0.68.1.dev20241102.dist-info}/METADATA +20 -18
- {zenml_nightly-0.66.0.dev20240927.dist-info → zenml_nightly-0.68.1.dev20241102.dist-info}/RECORD +344 -506
- {zenml_nightly-0.66.0.dev20240927.dist-info → zenml_nightly-0.68.1.dev20241102.dist-info}/WHEEL +1 -1
- zenml/api.py +0 -60
- zenml/cli/stack_recipes.py +0 -469
- zenml/lineage_graph/__init__.py +0 -34
- zenml/lineage_graph/lineage_graph.py +0 -244
- zenml/lineage_graph/node/__init__.py +0 -32
- zenml/lineage_graph/node/artifact_node.py +0 -51
- zenml/lineage_graph/node/step_node.py +0 -41
- zenml/model/model_version.py +0 -38
- zenml/new/pipelines/code_archive.py +0 -157
- zenml/new/pipelines/pipeline_decorator.py +0 -118
- zenml/new/steps/step_decorator.py +0 -176
- zenml/pipelines/base_pipeline.py +0 -273
- zenml/post_execution/__init__.py +0 -30
- zenml/post_execution/pipeline.py +0 -55
- zenml/post_execution/pipeline_run.py +0 -55
- zenml/services/terraform/__init__.py +0 -14
- zenml/services/terraform/terraform_service.py +0 -441
- zenml/steps/external_artifact.py +0 -26
- zenml/steps/step_environment.py +0 -108
- zenml/steps/step_output.py +0 -36
- zenml/utils/mlstacks_utils.py +0 -635
- zenml/utils/terraform_utils.py +0 -43
- zenml/zen_server/dashboard/assets/@radix-DnFH_oo1.js +0 -85
- zenml/zen_server/dashboard/assets/@react-router-APVeuk-U.js +0 -29
- zenml/zen_server/dashboard/assets/@reactflow-ytavUpwh.js +0 -17
- zenml/zen_server/dashboard/assets/@tanstack-QbMbTrh5.js +0 -22
- zenml/zen_server/dashboard/assets/ComponentBadge-gKR1OIwG.js +0 -1
- zenml/zen_server/dashboard/assets/ExecutionStatus-D6r6aK8J.js +0 -1
- zenml/zen_server/dashboard/assets/MarkdownVisualization-DS05sfBm.js +0 -14
- zenml/zen_server/dashboard/assets/SearchField-BzmfxS0L.js +0 -1
- zenml/zen_server/dashboard/assets/all-pipeline-runs-query-BA3R2Sey.js +0 -1
- zenml/zen_server/dashboard/assets/delete-run-CP0pcJ3U.js +0 -1
- zenml/zen_server/dashboard/assets/index-BhJ6ZJxv.css +0 -1
- zenml/zen_server/dashboard/assets/index-Ci0nJ8EZ.js +0 -55
- zenml/zen_server/dashboard/assets/index.esm-BE1uqCX5.js +0 -1
- zenml/zen_server/dashboard/assets/inter-cyrillic-400-normal-Df6ckaLK.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-400-normal-JrS_4yms.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-500-normal-BRrLR67x.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-500-normal-DskEQOpE.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-600-normal-DDpWG8g5.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-600-normal-iz1--dBq.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-ext-400-normal-CzG7Kr3z.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-ext-400-normal-tyfMZHQw.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-ext-500-normal-DOnSzjnx.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-ext-500-normal-Xebo2OyJ.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-ext-600-normal-DpA2xaRd.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-ext-600-normal-KAwcVx6H.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-400-normal-DQXyrmoy.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-400-normal-DvIPHDQ7.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-500-normal-BjpBGs91.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-500-normal-CmOavsDc.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-600-normal-B-l8Lzzd.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-600-normal-BLZsI-P3.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-ext-400-normal-CIdlr5YK.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-ext-400-normal-_Rr29XE2.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-ext-500-normal-2pdUafRD.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-ext-500-normal-Dtavx3qw.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-ext-600-normal-BmtRFZgT.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-ext-600-normal-CkBLDEl_.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-400-normal-BT1H-PT_.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-400-normal-Cdi8t5Mu.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-500-normal-D4I8BKCx.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-500-normal-kWhwEdDH.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-600-normal-B2Ssfs8e.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-600-normal-Dbvh0wvx.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-ext-400-normal-8tIzm-yw.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-ext-400-normal-D3W-OpO-.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-ext-500-normal-B9u8Q_zH.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-ext-500-normal-SuUkSNTU.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-ext-600-normal-Dg0Bk0Yr.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-ext-600-normal-ao35dkSb.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-vietnamese-400-normal-Cnt0N5Vm.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-vietnamese-400-normal-DIOGfGLL.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-vietnamese-500-normal-0i6yoQMg.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-vietnamese-500-normal-5IkPJ6Nk.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-vietnamese-600-normal-BQ_dbMbg.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-vietnamese-600-normal-DjnxGF-L.woff2 +0 -0
- zenml/zen_server/dashboard/assets/not-found-DbjllLY_.js +0 -1
- zenml/zen_server/dashboard/assets/page-B1n7_W7z.js +0 -1
- zenml/zen_server/dashboard/assets/page-BZZhLo2u.js +0 -1
- zenml/zen_server/dashboard/assets/page-Bbf_oBjn.js +0 -1
- zenml/zen_server/dashboard/assets/page-BjjuBvZG.js +0 -9
- zenml/zen_server/dashboard/assets/page-CHaQkFK5.js +0 -1
- zenml/zen_server/dashboard/assets/page-CS0SYFK8.js +0 -1
- zenml/zen_server/dashboard/assets/page-DGM1CbYT.js +0 -2
- zenml/zen_server/dashboard/assets/page-DOmIZ2ra.js +0 -1
- zenml/zen_server/dashboard/assets/page-DYVmJ9_w.js +0 -3
- zenml/zen_server/dashboard/assets/page-Dwow2doB.js +0 -1
- zenml/zen_server/dashboard/assets/stack-detail-query-DQcyzG-2.js +0 -1
- zenml/zen_server/dashboard/assets/zod-uFd1wBcd.js +0 -1
- zenml/zen_server/dashboard_legacy/_redirects +0 -1
- zenml/zen_server/dashboard_legacy/asset-manifest.json +0 -131
- zenml/zen_server/dashboard_legacy/favicon.ico +0 -0
- zenml/zen_server/dashboard_legacy/index.html +0 -1
- zenml/zen_server/dashboard_legacy/manifest.json +0 -25
- zenml/zen_server/dashboard_legacy/precache-manifest.6d320abb70db612019dda6c4948e7a90.js +0 -462
- zenml/zen_server/dashboard_legacy/robots.txt +0 -2
- zenml/zen_server/dashboard_legacy/service-worker.js +0 -39
- zenml/zen_server/dashboard_legacy/static/css/2.5b37d44a.chunk.css +0 -16
- zenml/zen_server/dashboard_legacy/static/css/2.5b37d44a.chunk.css.map +0 -1
- zenml/zen_server/dashboard_legacy/static/css/main.e79dff04.chunk.css +0 -2
- zenml/zen_server/dashboard_legacy/static/css/main.e79dff04.chunk.css.map +0 -1
- zenml/zen_server/dashboard_legacy/static/js/2.7934458d.chunk.js +0 -3
- zenml/zen_server/dashboard_legacy/static/js/2.7934458d.chunk.js.LICENSE.txt +0 -95
- zenml/zen_server/dashboard_legacy/static/js/2.7934458d.chunk.js.map +0 -1
- zenml/zen_server/dashboard_legacy/static/js/main.fa9299d5.chunk.js +0 -2
- zenml/zen_server/dashboard_legacy/static/js/main.fa9299d5.chunk.js.map +0 -1
- zenml/zen_server/dashboard_legacy/static/js/runtime-main.bfca2edd.js +0 -2
- zenml/zen_server/dashboard_legacy/static/js/runtime-main.bfca2edd.js.map +0 -1
- zenml/zen_server/dashboard_legacy/static/media/AlertTriangle.28aee535.svg +0 -5
- zenml/zen_server/dashboard_legacy/static/media/ArrowSquareOut.abfb9bc7.svg +0 -5
- zenml/zen_server/dashboard_legacy/static/media/Back.86c23a22.svg +0 -4
- zenml/zen_server/dashboard_legacy/static/media/BookOpen.5cb101ff.svg +0 -4
- zenml/zen_server/dashboard_legacy/static/media/BoundingBox.1eb98717.svg +0 -10
- zenml/zen_server/dashboard_legacy/static/media/Burger.9b1c67d7.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/Cached.2381fb8d.svg +0 -1
- zenml/zen_server/dashboard_legacy/static/media/Calendar.356e11c7.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/ChartBarHorizontal.0247447b.svg +0 -6
- zenml/zen_server/dashboard_legacy/static/media/ChartLine.0d79e18d.svg +0 -4
- zenml/zen_server/dashboard_legacy/static/media/ChatDots.2e1c9211.svg +0 -6
- zenml/zen_server/dashboard_legacy/static/media/Check.dad6beb2.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/CheckCircleFilled.c19566d0.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/Checkbox.af50e31e.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/ChevronDown.f860ce32.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/ChevronDownLight.6642d756.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/ChevronLeft.f6edfcdb.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/CircleCheck.f98fd6ca.svg +0 -1
- zenml/zen_server/dashboard_legacy/static/media/Clock.ffc9de95.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/Close.74e9efbc.svg +0 -5
- zenml/zen_server/dashboard_legacy/static/media/CloseWithBorder.6960930a.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/CloseWithoutBorder.cd6f71df.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/CloudArrowUp.0aecb235.svg +0 -6
- zenml/zen_server/dashboard_legacy/static/media/Code.ef0f33b5.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/Config.0be63f8a.svg +0 -1
- zenml/zen_server/dashboard_legacy/static/media/Connector.9fd46ef1.svg +0 -10
- zenml/zen_server/dashboard_legacy/static/media/Copy.36e2112a.svg +0 -1
- zenml/zen_server/dashboard_legacy/static/media/Dashboard.d05787e0.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/Data.b1c3b5f8.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/Delete.3c361b28.svg +0 -8
- zenml/zen_server/dashboard_legacy/static/media/Docs.7541d478.svg +0 -7
- zenml/zen_server/dashboard_legacy/static/media/Download.fba04d87.svg +0 -5
- zenml/zen_server/dashboard_legacy/static/media/Edit.490eb294.svg +0 -6
- zenml/zen_server/dashboard_legacy/static/media/EmptyRightArrow.23749d01.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/Example.6396cd37.svg +0 -5
- zenml/zen_server/dashboard_legacy/static/media/Extension.1394cd4a.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/Eye.d9e4ee62.svg +0 -4
- zenml/zen_server/dashboard_legacy/static/media/Failed.0213c1a0.svg +0 -1
- zenml/zen_server/dashboard_legacy/static/media/FileText.1f15bacd.svg +0 -7
- zenml/zen_server/dashboard_legacy/static/media/Filter.ab6b9c0d.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/Folders.12b29887.svg +0 -5
- zenml/zen_server/dashboard_legacy/static/media/FunnelFill.6df4c143.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/GitCommit.7dd9c2aa.svg +0 -5
- zenml/zen_server/dashboard_legacy/static/media/GitHub_Logo.cefc2023.png +0 -0
- zenml/zen_server/dashboard_legacy/static/media/Graph.2c63a892.svg +0 -11
- zenml/zen_server/dashboard_legacy/static/media/History.08329240.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/Home.0843b0d5.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/ImageBuilder.ea762d9c.svg +0 -6
- zenml/zen_server/dashboard_legacy/static/media/InProgress.304a0edc.svg +0 -1
- zenml/zen_server/dashboard_legacy/static/media/Info.9fe10c5c.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/KeyboardReturn.491afbe3.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/Link.72bbb55d.svg +0 -4
- zenml/zen_server/dashboard_legacy/static/media/Lock.30f5e1fe.svg +0 -5
- zenml/zen_server/dashboard_legacy/static/media/Lock2.a769ea52.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/LockKey.92f21621.svg +0 -6
- zenml/zen_server/dashboard_legacy/static/media/Logs.8bf4d005.svg +0 -5
- zenml/zen_server/dashboard_legacy/static/media/MinusCircle.4188f418.svg +0 -4
- zenml/zen_server/dashboard_legacy/static/media/ModelRegistry.f0de050a.svg +0 -6
- zenml/zen_server/dashboard_legacy/static/media/MultiUser.a2ba7c67.svg +0 -10
- zenml/zen_server/dashboard_legacy/static/media/PaginationFirst.92628634.svg +0 -4
- zenml/zen_server/dashboard_legacy/static/media/PaginationLast.00d3c732.svg +0 -4
- zenml/zen_server/dashboard_legacy/static/media/PaginationNext.86158845.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/PaginationPrev.60c18a88.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/Pen.f2d831d4.svg +0 -6
- zenml/zen_server/dashboard_legacy/static/media/PhotoCamera.179d6d4c.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/Pipeline.30d298b0.svg +0 -7
- zenml/zen_server/dashboard_legacy/static/media/Plus.5aa1c16b.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/PlusCircle.92d860dd.svg +0 -5
- zenml/zen_server/dashboard_legacy/static/media/Repositories.71a36b8c.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/RightArrow.f30d3871.svg +0 -29
- zenml/zen_server/dashboard_legacy/static/media/Rocket.63bf7b9d.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/RocketLaunch.1bff2b59.svg +0 -6
- zenml/zen_server/dashboard_legacy/static/media/Rubik-Medium.c87313aa.ttf +0 -0
- zenml/zen_server/dashboard_legacy/static/media/Rubik-Regular.b3d0902b.ttf +0 -0
- zenml/zen_server/dashboard_legacy/static/media/Run.daec4fb2.svg +0 -6
- zenml/zen_server/dashboard_legacy/static/media/Search.d1afcce5.svg +0 -4
- zenml/zen_server/dashboard_legacy/static/media/Settings.59ca73ae.svg +0 -4
- zenml/zen_server/dashboard_legacy/static/media/Share2.46c3ff66.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/SignOut.6aa718c5.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/SimplePlus.5cf7ec20.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/SingleUser.bef3a095.svg +0 -4
- zenml/zen_server/dashboard_legacy/static/media/SourceCodePro-Regular.b484b32f.ttf +0 -0
- zenml/zen_server/dashboard_legacy/static/media/Stack.19b604ac.svg +0 -5
- zenml/zen_server/dashboard_legacy/static/media/StackComponent.b1ba90b5.svg +0 -4
- zenml/zen_server/dashboard_legacy/static/media/Star.f0c25022.svg +0 -9
- zenml/zen_server/dashboard_legacy/static/media/StarOutline.94ca8cd9.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/Storefront.4b4796fe.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/Stream.543e3039.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/SupportAgent.510ddf1f.svg +0 -8
- zenml/zen_server/dashboard_legacy/static/media/Table.77033750.svg +0 -6
- zenml/zen_server/dashboard_legacy/static/media/Tool.d5785486.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/UserPlus.741a99d7.svg +0 -6
- zenml/zen_server/dashboard_legacy/static/media/Verified.0625b2a0.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/addNew.4fb6c939.svg +0 -8
- zenml/zen_server/dashboard_legacy/static/media/arrowClose.cbd53f3f.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/arrowOpen.6ceef0af.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/check_small.30bc0138.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/circleArrowSideClose.98d6013e.svg +0 -18
- zenml/zen_server/dashboard_legacy/static/media/circleArrowSideOpen.63653df6.svg +0 -18
- zenml/zen_server/dashboard_legacy/static/media/image.104fd14b.png +0 -0
- zenml/zen_server/dashboard_legacy/static/media/imageAddIcon.e83004a9.svg +0 -7
- zenml/zen_server/dashboard_legacy/static/media/logo.93333e5c.svg +0 -1
- zenml/zen_server/dashboard_legacy/static/media/logo_small.4204397d.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/logo_white.d4b4414e.svg +0 -20
- zenml/zen_server/dashboard_legacy/static/media/notConnected.5e2c8ea7.svg +0 -8
- zenml/zen_server/dashboard_legacy/static/media/plugin-fallback.72c294e6.svg +0 -6
- zenml/zen_server/dashboard_legacy/static/media/share.bcd998b0.svg +0 -5
- zenml/zen_server/dashboard_legacy/static/media/stars.08a9b19a.svg +0 -8
- zenml/zen_server/deploy/terraform/__init__.py +0 -41
- zenml/zen_server/deploy/terraform/providers/aws_provider.py +0 -61
- zenml/zen_server/deploy/terraform/providers/azure_provider.py +0 -59
- zenml/zen_server/deploy/terraform/providers/gcp_provider.py +0 -59
- zenml/zen_server/deploy/terraform/providers/terraform_provider.py +0 -331
- zenml/zen_server/deploy/terraform/recipes/aws/.gitignore +0 -8
- zenml/zen_server/deploy/terraform/recipes/aws/helm.tf +0 -20
- zenml/zen_server/deploy/terraform/recipes/aws/ingress.tf +0 -30
- zenml/zen_server/deploy/terraform/recipes/aws/outputs.tf +0 -7
- zenml/zen_server/deploy/terraform/recipes/aws/printf.cmd +0 -2
- zenml/zen_server/deploy/terraform/recipes/aws/sql.tf +0 -62
- zenml/zen_server/deploy/terraform/recipes/aws/terraform.tf +0 -44
- zenml/zen_server/deploy/terraform/recipes/aws/variables.tf +0 -167
- zenml/zen_server/deploy/terraform/recipes/aws/vpc.tf +0 -47
- zenml/zen_server/deploy/terraform/recipes/aws/zen_server.tf +0 -103
- zenml/zen_server/deploy/terraform/recipes/azure/.gitignore +0 -8
- zenml/zen_server/deploy/terraform/recipes/azure/helm.tf +0 -20
- zenml/zen_server/deploy/terraform/recipes/azure/ingress.tf +0 -30
- zenml/zen_server/deploy/terraform/recipes/azure/key_vault.tf +0 -73
- zenml/zen_server/deploy/terraform/recipes/azure/outputs.tf +0 -7
- zenml/zen_server/deploy/terraform/recipes/azure/printf.cmd +0 -2
- zenml/zen_server/deploy/terraform/recipes/azure/rg.tf +0 -36
- zenml/zen_server/deploy/terraform/recipes/azure/sql.tf +0 -65
- zenml/zen_server/deploy/terraform/recipes/azure/terraform.tf +0 -52
- zenml/zen_server/deploy/terraform/recipes/azure/variables.tf +0 -176
- zenml/zen_server/deploy/terraform/recipes/azure/zen_server.tf +0 -103
- zenml/zen_server/deploy/terraform/recipes/gcp/.gitignore +0 -8
- zenml/zen_server/deploy/terraform/recipes/gcp/helm.tf +0 -20
- zenml/zen_server/deploy/terraform/recipes/gcp/ingress.tf +0 -30
- zenml/zen_server/deploy/terraform/recipes/gcp/outputs.tf +0 -7
- zenml/zen_server/deploy/terraform/recipes/gcp/printf.cmd +0 -2
- zenml/zen_server/deploy/terraform/recipes/gcp/sql.tf +0 -64
- zenml/zen_server/deploy/terraform/recipes/gcp/terraform.tf +0 -44
- zenml/zen_server/deploy/terraform/recipes/gcp/variables.tf +0 -171
- zenml/zen_server/deploy/terraform/recipes/gcp/zen_server.tf +0 -114
- zenml/zen_server/deploy/terraform/terraform_zen_server.py +0 -246
- /zenml/{new/pipelines → pipelines}/build_utils.py +0 -0
- /zenml/{new/steps → steps}/decorated_step.py +0 -0
- {zenml_nightly-0.66.0.dev20240927.dist-info → zenml_nightly-0.68.1.dev20241102.dist-info}/LICENSE +0 -0
- {zenml_nightly-0.66.0.dev20240927.dist-info → zenml_nightly-0.68.1.dev20241102.dist-info}/entry_points.txt +0 -0
@@ -20,6 +20,7 @@ import math
|
|
20
20
|
import os
|
21
21
|
import re
|
22
22
|
import sys
|
23
|
+
import time
|
23
24
|
from datetime import datetime, timezone
|
24
25
|
from functools import lru_cache
|
25
26
|
from pathlib import Path
|
@@ -93,9 +94,9 @@ from zenml.constants import (
|
|
93
94
|
ENV_ZENML_DEFAULT_USER_NAME,
|
94
95
|
ENV_ZENML_DEFAULT_USER_PASSWORD,
|
95
96
|
ENV_ZENML_DISABLE_DATABASE_MIGRATION,
|
96
|
-
ENV_ZENML_LOCAL_SERVER,
|
97
97
|
ENV_ZENML_SERVER,
|
98
98
|
FINISHED_ONBOARDING_SURVEY_KEY,
|
99
|
+
MAX_RETRIES_FOR_VERSIONED_ENTITY_CREATION,
|
99
100
|
SORT_PIPELINES_BY_LATEST_RUN_KEY,
|
100
101
|
SQL_STORE_BACKUP_DIRECTORY_NAME,
|
101
102
|
TEXT_FIELD_MAX_LENGTH,
|
@@ -108,6 +109,7 @@ from zenml.enums import (
|
|
108
109
|
DatabaseBackupStrategy,
|
109
110
|
ExecutionStatus,
|
110
111
|
LoggingLevels,
|
112
|
+
MetadataResourceTypes,
|
111
113
|
ModelStages,
|
112
114
|
OnboardingStep,
|
113
115
|
SecretScope,
|
@@ -134,6 +136,7 @@ from zenml.exceptions import (
|
|
134
136
|
)
|
135
137
|
from zenml.io import fileio
|
136
138
|
from zenml.logger import get_console_handler, get_logger, get_logging_level
|
139
|
+
from zenml.metadata.metadata_types import get_metadata_type
|
137
140
|
from zenml.models import (
|
138
141
|
ActionFilter,
|
139
142
|
ActionRequest,
|
@@ -973,7 +976,6 @@ class SqlZenStore(BaseZenStore):
|
|
973
976
|
ValueError: if the filtered page number is out of bounds.
|
974
977
|
RuntimeError: if the schema does not have a `to_model` method.
|
975
978
|
"""
|
976
|
-
query = query.distinct()
|
977
979
|
query = filter_model.apply_filter(query=query, table=table)
|
978
980
|
query = query.distinct()
|
979
981
|
|
@@ -1586,10 +1588,10 @@ class SqlZenStore(BaseZenStore):
|
|
1586
1588
|
# Fetch the deployment ID from the database and use it to replace
|
1587
1589
|
# the one fetched from the global configuration
|
1588
1590
|
model.id = settings.server_id
|
1591
|
+
model.name = settings.server_name
|
1589
1592
|
model.active = settings.active
|
1590
1593
|
model.last_user_activity = settings.last_user_activity
|
1591
|
-
|
1592
|
-
model.analytics_enabled = settings.enable_analytics
|
1594
|
+
model.analytics_enabled = settings.enable_analytics
|
1593
1595
|
return model
|
1594
1596
|
|
1595
1597
|
def get_deployment_id(self) -> UUID:
|
@@ -1647,7 +1649,9 @@ class SqlZenStore(BaseZenStore):
|
|
1647
1649
|
"""
|
1648
1650
|
with Session(self.engine) as session:
|
1649
1651
|
settings = self._get_server_settings(session=session)
|
1650
|
-
return settings.to_model(
|
1652
|
+
return settings.to_model(
|
1653
|
+
include_metadata=hydrate, include_resources=True
|
1654
|
+
)
|
1651
1655
|
|
1652
1656
|
def update_server_settings(
|
1653
1657
|
self, settings_update: ServerSettingsUpdate
|
@@ -1688,7 +1692,9 @@ class SqlZenStore(BaseZenStore):
|
|
1688
1692
|
session.commit()
|
1689
1693
|
session.refresh(settings)
|
1690
1694
|
|
1691
|
-
return settings.to_model(
|
1695
|
+
return settings.to_model(
|
1696
|
+
include_metadata=True, include_resources=True
|
1697
|
+
)
|
1692
1698
|
|
1693
1699
|
def _update_last_user_activity_timestamp(
|
1694
1700
|
self, last_user_activity: datetime
|
@@ -2127,7 +2133,9 @@ class SqlZenStore(BaseZenStore):
|
|
2127
2133
|
session.add(new_api_key)
|
2128
2134
|
session.commit()
|
2129
2135
|
|
2130
|
-
api_key_model = new_api_key.to_model(
|
2136
|
+
api_key_model = new_api_key.to_model(
|
2137
|
+
include_metadata=True, include_resources=True
|
2138
|
+
)
|
2131
2139
|
api_key_model.set_key(key_value)
|
2132
2140
|
return api_key_model
|
2133
2141
|
|
@@ -2155,7 +2163,9 @@ class SqlZenStore(BaseZenStore):
|
|
2155
2163
|
api_key_name_or_id=api_key_name_or_id,
|
2156
2164
|
session=session,
|
2157
2165
|
)
|
2158
|
-
return api_key.to_model(
|
2166
|
+
return api_key.to_model(
|
2167
|
+
include_metadata=hydrate, include_resources=True
|
2168
|
+
)
|
2159
2169
|
|
2160
2170
|
def get_internal_api_key(
|
2161
2171
|
self, api_key_id: UUID, hydrate: bool = True
|
@@ -2179,7 +2189,9 @@ class SqlZenStore(BaseZenStore):
|
|
2179
2189
|
).first()
|
2180
2190
|
if api_key is None:
|
2181
2191
|
raise KeyError(f"API key with ID {api_key_id} not found.")
|
2182
|
-
return api_key.to_internal_model(
|
2192
|
+
return api_key.to_internal_model(
|
2193
|
+
include_metadata=hydrate, include_resources=True
|
2194
|
+
)
|
2183
2195
|
|
2184
2196
|
def list_api_keys(
|
2185
2197
|
self,
|
@@ -2269,7 +2281,9 @@ class SqlZenStore(BaseZenStore):
|
|
2269
2281
|
|
2270
2282
|
# Refresh the Model that was just created
|
2271
2283
|
session.refresh(api_key)
|
2272
|
-
return api_key.to_model(
|
2284
|
+
return api_key.to_model(
|
2285
|
+
include_metadata=True, include_resources=True
|
2286
|
+
)
|
2273
2287
|
|
2274
2288
|
def update_internal_api_key(
|
2275
2289
|
self, api_key_id: UUID, api_key_update: APIKeyInternalUpdate
|
@@ -2300,7 +2314,9 @@ class SqlZenStore(BaseZenStore):
|
|
2300
2314
|
|
2301
2315
|
# Refresh the Model that was just created
|
2302
2316
|
session.refresh(api_key)
|
2303
|
-
return api_key.to_model(
|
2317
|
+
return api_key.to_model(
|
2318
|
+
include_metadata=True, include_resources=True
|
2319
|
+
)
|
2304
2320
|
|
2305
2321
|
def rotate_api_key(
|
2306
2322
|
self,
|
@@ -2568,7 +2584,9 @@ class SqlZenStore(BaseZenStore):
|
|
2568
2584
|
|
2569
2585
|
session.add(artifact_schema)
|
2570
2586
|
session.commit()
|
2571
|
-
return artifact_schema.to_model(
|
2587
|
+
return artifact_schema.to_model(
|
2588
|
+
include_metadata=True, include_resources=True
|
2589
|
+
)
|
2572
2590
|
|
2573
2591
|
def get_artifact(
|
2574
2592
|
self, artifact_id: UUID, hydrate: bool = True
|
@@ -2595,7 +2613,9 @@ class SqlZenStore(BaseZenStore):
|
|
2595
2613
|
f"Unable to get artifact with ID {artifact_id}: No "
|
2596
2614
|
"artifact with this ID found."
|
2597
2615
|
)
|
2598
|
-
return artifact.to_model(
|
2616
|
+
return artifact.to_model(
|
2617
|
+
include_metadata=hydrate, include_resources=True
|
2618
|
+
)
|
2599
2619
|
|
2600
2620
|
def list_artifacts(
|
2601
2621
|
self, filter_model: ArtifactFilter, hydrate: bool = False
|
@@ -2662,7 +2682,9 @@ class SqlZenStore(BaseZenStore):
|
|
2662
2682
|
session.add(existing_artifact)
|
2663
2683
|
session.commit()
|
2664
2684
|
session.refresh(existing_artifact)
|
2665
|
-
return existing_artifact.to_model(
|
2685
|
+
return existing_artifact.to_model(
|
2686
|
+
include_metadata=True, include_resources=True
|
2687
|
+
)
|
2666
2688
|
|
2667
2689
|
def delete_artifact(self, artifact_id: UUID) -> None:
|
2668
2690
|
"""Deletes an artifact.
|
@@ -2684,79 +2706,214 @@ class SqlZenStore(BaseZenStore):
|
|
2684
2706
|
|
2685
2707
|
# -------------------- Artifact Versions --------------------
|
2686
2708
|
|
2709
|
+
def _get_or_create_artifact_for_name(
|
2710
|
+
self, name: str, has_custom_name: bool
|
2711
|
+
) -> ArtifactSchema:
|
2712
|
+
"""Get or create an artifact with a specific name.
|
2713
|
+
|
2714
|
+
Args:
|
2715
|
+
name: The artifact name.
|
2716
|
+
has_custom_name: Whether the artifact has a custom name.
|
2717
|
+
|
2718
|
+
Returns:
|
2719
|
+
Schema of the artifact.
|
2720
|
+
"""
|
2721
|
+
with Session(self.engine) as session:
|
2722
|
+
artifact_query = select(ArtifactSchema).where(
|
2723
|
+
ArtifactSchema.name == name
|
2724
|
+
)
|
2725
|
+
artifact = session.exec(artifact_query).first()
|
2726
|
+
|
2727
|
+
if artifact is None:
|
2728
|
+
try:
|
2729
|
+
with session.begin_nested():
|
2730
|
+
artifact_request = ArtifactRequest(
|
2731
|
+
name=name, has_custom_name=has_custom_name
|
2732
|
+
)
|
2733
|
+
artifact = ArtifactSchema.from_request(
|
2734
|
+
artifact_request
|
2735
|
+
)
|
2736
|
+
session.add(artifact)
|
2737
|
+
session.commit()
|
2738
|
+
session.refresh(artifact)
|
2739
|
+
except IntegrityError:
|
2740
|
+
# We failed to create the artifact due to the unique constraint
|
2741
|
+
# for artifact names -> The artifact was already created, we can
|
2742
|
+
# just fetch it from the DB now
|
2743
|
+
artifact = session.exec(artifact_query).one()
|
2744
|
+
|
2745
|
+
if artifact.has_custom_name is False and has_custom_name:
|
2746
|
+
# If a new version with custom name was created for an artifact
|
2747
|
+
# that previously had no custom name, we update it.
|
2748
|
+
artifact.has_custom_name = True
|
2749
|
+
session.commit()
|
2750
|
+
session.refresh(artifact)
|
2751
|
+
|
2752
|
+
return artifact
|
2753
|
+
|
2754
|
+
def _get_next_numeric_version_for_artifact(
|
2755
|
+
self, session: Session, artifact_id: UUID
|
2756
|
+
) -> int:
|
2757
|
+
"""Get the next numeric version for an artifact.
|
2758
|
+
|
2759
|
+
Args:
|
2760
|
+
session: DB session.
|
2761
|
+
artifact_id: ID of the artifact for which to get the next numeric
|
2762
|
+
version.
|
2763
|
+
|
2764
|
+
Returns:
|
2765
|
+
The next numeric version.
|
2766
|
+
"""
|
2767
|
+
current_max_version = session.exec(
|
2768
|
+
select(func.max(ArtifactVersionSchema.version_number)).where(
|
2769
|
+
ArtifactVersionSchema.artifact_id == artifact_id
|
2770
|
+
)
|
2771
|
+
).first()
|
2772
|
+
|
2773
|
+
if current_max_version is None:
|
2774
|
+
return 1
|
2775
|
+
else:
|
2776
|
+
return int(current_max_version) + 1
|
2777
|
+
|
2687
2778
|
def create_artifact_version(
|
2688
2779
|
self, artifact_version: ArtifactVersionRequest
|
2689
2780
|
) -> ArtifactVersionResponse:
|
2690
|
-
"""
|
2781
|
+
"""Create an artifact version.
|
2691
2782
|
|
2692
2783
|
Args:
|
2693
2784
|
artifact_version: The artifact version to create.
|
2694
2785
|
|
2786
|
+
Raises:
|
2787
|
+
EntityExistsError: If the artifact version already exists.
|
2788
|
+
|
2695
2789
|
Returns:
|
2696
2790
|
The created artifact version.
|
2697
|
-
|
2698
|
-
Raises:
|
2699
|
-
EntityExistsError: if an artifact with the same name and version
|
2700
|
-
already exists.
|
2701
2791
|
"""
|
2702
|
-
|
2703
|
-
|
2704
|
-
|
2705
|
-
|
2706
|
-
|
2707
|
-
|
2708
|
-
|
2709
|
-
|
2710
|
-
|
2711
|
-
|
2712
|
-
|
2713
|
-
|
2792
|
+
if artifact_name := artifact_version.artifact_name:
|
2793
|
+
artifact_schema = self._get_or_create_artifact_for_name(
|
2794
|
+
name=artifact_name,
|
2795
|
+
has_custom_name=artifact_version.has_custom_name,
|
2796
|
+
)
|
2797
|
+
artifact_version.artifact_id = artifact_schema.id
|
2798
|
+
|
2799
|
+
assert artifact_version.artifact_id
|
2800
|
+
|
2801
|
+
artifact_version_id = None
|
2802
|
+
|
2803
|
+
if artifact_version.version is None:
|
2804
|
+
# No explicit version in the request -> We will try to
|
2805
|
+
# auto-increment the numeric version of the artifact version
|
2806
|
+
remaining_tries = MAX_RETRIES_FOR_VERSIONED_ENTITY_CREATION
|
2807
|
+
while remaining_tries > 0:
|
2808
|
+
remaining_tries -= 1
|
2809
|
+
try:
|
2810
|
+
with Session(self.engine) as session:
|
2811
|
+
artifact_version.version = str(
|
2812
|
+
self._get_next_numeric_version_for_artifact(
|
2813
|
+
session=session,
|
2814
|
+
artifact_id=artifact_version.artifact_id,
|
2815
|
+
)
|
2816
|
+
)
|
2817
|
+
|
2818
|
+
artifact_version_schema = (
|
2819
|
+
ArtifactVersionSchema.from_request(
|
2820
|
+
artifact_version
|
2821
|
+
)
|
2822
|
+
)
|
2823
|
+
session.add(artifact_version_schema)
|
2824
|
+
session.commit()
|
2825
|
+
artifact_version_id = artifact_version_schema.id
|
2826
|
+
except IntegrityError:
|
2827
|
+
if remaining_tries == 0:
|
2828
|
+
raise EntityExistsError(
|
2829
|
+
f"Failed to create version for artifact "
|
2830
|
+
f"{artifact_schema.name}. This is most likely "
|
2831
|
+
"caused by multiple parallel requests that try "
|
2832
|
+
"to create versions for this artifact in the "
|
2833
|
+
"database."
|
2834
|
+
)
|
2835
|
+
else:
|
2836
|
+
# Exponential backoff to account for heavy
|
2837
|
+
# parallelization
|
2838
|
+
sleep_duration = 0.05 * 1.5 ** (
|
2839
|
+
MAX_RETRIES_FOR_VERSIONED_ENTITY_CREATION
|
2840
|
+
- remaining_tries
|
2841
|
+
)
|
2842
|
+
logger.debug(
|
2843
|
+
"Failed to create artifact version %s "
|
2844
|
+
"(version %s) due to an integrity error. "
|
2845
|
+
"Retrying in %f seconds.",
|
2846
|
+
artifact_schema.name,
|
2847
|
+
artifact_version.version,
|
2848
|
+
sleep_duration,
|
2849
|
+
)
|
2850
|
+
time.sleep(sleep_duration)
|
2851
|
+
else:
|
2852
|
+
break
|
2853
|
+
else:
|
2854
|
+
# An explicit version was specified for the artifact version.
|
2855
|
+
# We don't do any incrementing and fail immediately if the
|
2856
|
+
# version already exists.
|
2857
|
+
with Session(self.engine) as session:
|
2858
|
+
try:
|
2859
|
+
artifact_version_schema = (
|
2860
|
+
ArtifactVersionSchema.from_request(artifact_version)
|
2714
2861
|
)
|
2715
|
-
|
2716
|
-
|
2717
|
-
|
2718
|
-
|
2719
|
-
and len(existing_artifact) > tolerance
|
2720
|
-
):
|
2862
|
+
session.add(artifact_version_schema)
|
2863
|
+
session.commit()
|
2864
|
+
artifact_version_id = artifact_version_schema.id
|
2865
|
+
except IntegrityError:
|
2721
2866
|
raise EntityExistsError(
|
2722
|
-
f"Unable to create artifact
|
2723
|
-
f"
|
2724
|
-
f"
|
2725
|
-
"name and version already exists."
|
2867
|
+
f"Unable to create artifact version "
|
2868
|
+
f"{artifact_schema.name} (version "
|
2869
|
+
f"{artifact_version.version}): An artifact with the "
|
2870
|
+
"same name and version already exists."
|
2726
2871
|
)
|
2727
2872
|
|
2728
|
-
|
2729
|
-
# Create the artifact version.
|
2730
|
-
artifact_version_schema = ArtifactVersionSchema.from_request(
|
2731
|
-
artifact_version
|
2732
|
-
)
|
2733
|
-
session.add(artifact_version_schema)
|
2873
|
+
assert artifact_version_id
|
2734
2874
|
|
2735
|
-
|
2875
|
+
with Session(self.engine) as session:
|
2876
|
+
# Save visualizations of the artifact
|
2736
2877
|
if artifact_version.visualizations:
|
2737
2878
|
for vis in artifact_version.visualizations:
|
2738
2879
|
vis_schema = ArtifactVisualizationSchema.from_model(
|
2739
2880
|
artifact_visualization_request=vis,
|
2740
|
-
artifact_version_id=
|
2881
|
+
artifact_version_id=artifact_version_id,
|
2741
2882
|
)
|
2742
2883
|
session.add(vis_schema)
|
2743
2884
|
|
2744
|
-
# Save tags of the artifact
|
2885
|
+
# Save tags of the artifact
|
2745
2886
|
if artifact_version.tags:
|
2746
2887
|
self._attach_tags_to_resource(
|
2747
2888
|
tag_names=artifact_version.tags,
|
2748
|
-
resource_id=
|
2889
|
+
resource_id=artifact_version_id,
|
2749
2890
|
resource_type=TaggableResourceTypes.ARTIFACT_VERSION,
|
2750
2891
|
)
|
2751
2892
|
|
2752
|
-
|
2753
|
-
|
2754
|
-
|
2755
|
-
|
2756
|
-
|
2757
|
-
|
2893
|
+
# Save metadata of the artifact
|
2894
|
+
if artifact_version.metadata:
|
2895
|
+
for key, value in artifact_version.metadata.items():
|
2896
|
+
run_metadata_schema = RunMetadataSchema(
|
2897
|
+
workspace_id=artifact_version.workspace,
|
2898
|
+
user_id=artifact_version.user,
|
2899
|
+
resource_id=artifact_version_id,
|
2900
|
+
resource_type=MetadataResourceTypes.ARTIFACT_VERSION,
|
2901
|
+
key=key,
|
2902
|
+
value=json.dumps(value),
|
2903
|
+
type=get_metadata_type(value),
|
2904
|
+
)
|
2905
|
+
session.add(run_metadata_schema)
|
2758
2906
|
|
2759
|
-
|
2907
|
+
session.commit()
|
2908
|
+
artifact_version_schema = session.exec(
|
2909
|
+
select(ArtifactVersionSchema).where(
|
2910
|
+
ArtifactVersionSchema.id == artifact_version_id
|
2911
|
+
)
|
2912
|
+
).one()
|
2913
|
+
|
2914
|
+
return artifact_version_schema.to_model(
|
2915
|
+
include_metadata=True, include_resources=True
|
2916
|
+
)
|
2760
2917
|
|
2761
2918
|
def get_artifact_version(
|
2762
2919
|
self, artifact_version_id: UUID, hydrate: bool = True
|
@@ -2866,7 +3023,9 @@ class SqlZenStore(BaseZenStore):
|
|
2866
3023
|
session.add(existing_artifact_version)
|
2867
3024
|
session.commit()
|
2868
3025
|
session.refresh(existing_artifact_version)
|
2869
|
-
return existing_artifact_version.to_model(
|
3026
|
+
return existing_artifact_version.to_model(
|
3027
|
+
include_metadata=True, include_resources=True
|
3028
|
+
)
|
2870
3029
|
|
2871
3030
|
def delete_artifact_version(self, artifact_version_id: UUID) -> None:
|
2872
3031
|
"""Deletes an artifact version.
|
@@ -2973,7 +3132,9 @@ class SqlZenStore(BaseZenStore):
|
|
2973
3132
|
f"{artifact_visualization_id}: "
|
2974
3133
|
f"No artifact visualization with this ID found."
|
2975
3134
|
)
|
2976
|
-
return artifact_visualization.to_model(
|
3135
|
+
return artifact_visualization.to_model(
|
3136
|
+
include_metadata=hydrate, include_resources=True
|
3137
|
+
)
|
2977
3138
|
|
2978
3139
|
# ------------------------ Code References ------------------------
|
2979
3140
|
|
@@ -3005,7 +3166,9 @@ class SqlZenStore(BaseZenStore):
|
|
3005
3166
|
f"{code_reference_id}: "
|
3006
3167
|
f"No code reference with this ID found."
|
3007
3168
|
)
|
3008
|
-
return code_reference.to_model(
|
3169
|
+
return code_reference.to_model(
|
3170
|
+
include_metadata=hydrate, include_resources=True
|
3171
|
+
)
|
3009
3172
|
|
3010
3173
|
# --------------------------- Code Repositories ---------------------------
|
3011
3174
|
|
@@ -3046,7 +3209,9 @@ class SqlZenStore(BaseZenStore):
|
|
3046
3209
|
session.commit()
|
3047
3210
|
session.refresh(new_repo)
|
3048
3211
|
|
3049
|
-
return new_repo.to_model(
|
3212
|
+
return new_repo.to_model(
|
3213
|
+
include_metadata=True, include_resources=True
|
3214
|
+
)
|
3050
3215
|
|
3051
3216
|
def get_code_repository(
|
3052
3217
|
self, code_repository_id: UUID, hydrate: bool = True
|
@@ -3077,7 +3242,9 @@ class SqlZenStore(BaseZenStore):
|
|
3077
3242
|
"ID found."
|
3078
3243
|
)
|
3079
3244
|
|
3080
|
-
return repo.to_model(
|
3245
|
+
return repo.to_model(
|
3246
|
+
include_metadata=hydrate, include_resources=True
|
3247
|
+
)
|
3081
3248
|
|
3082
3249
|
def list_code_repositories(
|
3083
3250
|
self,
|
@@ -3138,7 +3305,9 @@ class SqlZenStore(BaseZenStore):
|
|
3138
3305
|
session.add(existing_repo)
|
3139
3306
|
session.commit()
|
3140
3307
|
|
3141
|
-
return existing_repo.to_model(
|
3308
|
+
return existing_repo.to_model(
|
3309
|
+
include_metadata=True, include_resources=True
|
3310
|
+
)
|
3142
3311
|
|
3143
3312
|
def delete_code_repository(self, code_repository_id: UUID) -> None:
|
3144
3313
|
"""Deletes a code repository.
|
@@ -3193,17 +3362,22 @@ class SqlZenStore(BaseZenStore):
|
|
3193
3362
|
session=session,
|
3194
3363
|
)
|
3195
3364
|
|
3365
|
+
is_default_stack_component = (
|
3366
|
+
component.name == DEFAULT_STACK_AND_COMPONENT_NAME
|
3367
|
+
and component.type
|
3368
|
+
in {
|
3369
|
+
StackComponentType.ORCHESTRATOR,
|
3370
|
+
StackComponentType.ARTIFACT_STORE,
|
3371
|
+
}
|
3372
|
+
)
|
3196
3373
|
# We have to skip the validation of the default components
|
3197
3374
|
# as it creates a loop of initialization.
|
3198
|
-
if
|
3199
|
-
component.type != StackComponentType.ORCHESTRATOR
|
3200
|
-
and component.type != StackComponentType.ARTIFACT_STORE
|
3201
|
-
):
|
3375
|
+
if not is_default_stack_component:
|
3202
3376
|
from zenml.stack.utils import validate_stack_component_config
|
3203
3377
|
|
3204
3378
|
validate_stack_component_config(
|
3205
3379
|
configuration_dict=component.configuration,
|
3206
|
-
|
3380
|
+
flavor=component.flavor,
|
3207
3381
|
component_type=component.type,
|
3208
3382
|
zen_store=self,
|
3209
3383
|
validate_custom_flavors=False,
|
@@ -3249,21 +3423,8 @@ class SqlZenStore(BaseZenStore):
|
|
3249
3423
|
)
|
3250
3424
|
|
3251
3425
|
# Create the component
|
3252
|
-
new_component = StackComponentSchema(
|
3253
|
-
|
3254
|
-
workspace_id=component.workspace,
|
3255
|
-
user_id=component.user,
|
3256
|
-
component_spec_path=component.component_spec_path,
|
3257
|
-
type=component.type,
|
3258
|
-
flavor=component.flavor,
|
3259
|
-
configuration=base64.b64encode(
|
3260
|
-
json.dumps(component.configuration).encode("utf-8")
|
3261
|
-
),
|
3262
|
-
labels=base64.b64encode(
|
3263
|
-
json.dumps(component.labels).encode("utf-8")
|
3264
|
-
),
|
3265
|
-
connector=service_connector,
|
3266
|
-
connector_resource_id=component.connector_resource_id,
|
3426
|
+
new_component = StackComponentSchema.from_request(
|
3427
|
+
request=component, service_connector=service_connector
|
3267
3428
|
)
|
3268
3429
|
|
3269
3430
|
session.add(new_component)
|
@@ -3271,7 +3432,9 @@ class SqlZenStore(BaseZenStore):
|
|
3271
3432
|
|
3272
3433
|
session.refresh(new_component)
|
3273
3434
|
|
3274
|
-
return new_component.to_model(
|
3435
|
+
return new_component.to_model(
|
3436
|
+
include_metadata=True, include_resources=True
|
3437
|
+
)
|
3275
3438
|
|
3276
3439
|
def get_stack_component(
|
3277
3440
|
self, component_id: UUID, hydrate: bool = True
|
@@ -3301,7 +3464,9 @@ class SqlZenStore(BaseZenStore):
|
|
3301
3464
|
f"Stack component with ID {component_id} not found."
|
3302
3465
|
)
|
3303
3466
|
|
3304
|
-
return stack_component.to_model(
|
3467
|
+
return stack_component.to_model(
|
3468
|
+
include_metadata=hydrate, include_resources=True
|
3469
|
+
)
|
3305
3470
|
|
3306
3471
|
def list_stack_components(
|
3307
3472
|
self,
|
@@ -3368,7 +3533,7 @@ class SqlZenStore(BaseZenStore):
|
|
3368
3533
|
|
3369
3534
|
validate_stack_component_config(
|
3370
3535
|
configuration_dict=component_update.configuration,
|
3371
|
-
|
3536
|
+
flavor=existing_component.flavor,
|
3372
3537
|
component_type=StackComponentType(existing_component.type),
|
3373
3538
|
zen_store=self,
|
3374
3539
|
validate_custom_flavors=False,
|
@@ -3424,7 +3589,9 @@ class SqlZenStore(BaseZenStore):
|
|
3424
3589
|
session.add(existing_component)
|
3425
3590
|
session.commit()
|
3426
3591
|
|
3427
|
-
return existing_component.to_model(
|
3592
|
+
return existing_component.to_model(
|
3593
|
+
include_metadata=True, include_resources=True
|
3594
|
+
)
|
3428
3595
|
|
3429
3596
|
def delete_stack_component(self, component_id: UUID) -> None:
|
3430
3597
|
"""Delete a stack component.
|
@@ -3565,7 +3732,9 @@ class SqlZenStore(BaseZenStore):
|
|
3565
3732
|
session.commit()
|
3566
3733
|
session.refresh(new_device)
|
3567
3734
|
|
3568
|
-
device_model = new_device.to_internal_model(
|
3735
|
+
device_model = new_device.to_internal_model(
|
3736
|
+
include_metadata=True, include_resources=True
|
3737
|
+
)
|
3569
3738
|
# Replace the hashed user code with the original user code
|
3570
3739
|
device_model.user_code = user_code
|
3571
3740
|
# Replace the hashed device code with the original device code
|
@@ -3601,7 +3770,9 @@ class SqlZenStore(BaseZenStore):
|
|
3601
3770
|
"this ID found."
|
3602
3771
|
)
|
3603
3772
|
|
3604
|
-
return device.to_model(
|
3773
|
+
return device.to_model(
|
3774
|
+
include_metadata=hydrate, include_resources=True
|
3775
|
+
)
|
3605
3776
|
|
3606
3777
|
def get_internal_authorized_device(
|
3607
3778
|
self,
|
@@ -3647,7 +3818,9 @@ class SqlZenStore(BaseZenStore):
|
|
3647
3818
|
"device with this client ID found."
|
3648
3819
|
)
|
3649
3820
|
|
3650
|
-
return device.to_internal_model(
|
3821
|
+
return device.to_internal_model(
|
3822
|
+
include_metadata=hydrate, include_resources=True
|
3823
|
+
)
|
3651
3824
|
|
3652
3825
|
def list_authorized_devices(
|
3653
3826
|
self,
|
@@ -3707,7 +3880,9 @@ class SqlZenStore(BaseZenStore):
|
|
3707
3880
|
session.add(existing_device)
|
3708
3881
|
session.commit()
|
3709
3882
|
|
3710
|
-
return existing_device.to_model(
|
3883
|
+
return existing_device.to_model(
|
3884
|
+
include_metadata=True, include_resources=True
|
3885
|
+
)
|
3711
3886
|
|
3712
3887
|
def update_internal_authorized_device(
|
3713
3888
|
self, device_id: UUID, update: OAuthDeviceInternalUpdate
|
@@ -3745,7 +3920,9 @@ class SqlZenStore(BaseZenStore):
|
|
3745
3920
|
session.add(existing_device)
|
3746
3921
|
session.commit()
|
3747
3922
|
|
3748
|
-
device_model = existing_device.to_internal_model(
|
3923
|
+
device_model = existing_device.to_internal_model(
|
3924
|
+
include_metadata=True, include_resources=True
|
3925
|
+
)
|
3749
3926
|
if user_code:
|
3750
3927
|
# Replace the hashed user code with the original user code
|
3751
3928
|
device_model.user_code = user_code
|
@@ -3861,7 +4038,9 @@ class SqlZenStore(BaseZenStore):
|
|
3861
4038
|
session.add(new_flavor)
|
3862
4039
|
session.commit()
|
3863
4040
|
|
3864
|
-
return new_flavor.to_model(
|
4041
|
+
return new_flavor.to_model(
|
4042
|
+
include_metadata=True, include_resources=True
|
4043
|
+
)
|
3865
4044
|
|
3866
4045
|
def get_flavor(
|
3867
4046
|
self, flavor_id: UUID, hydrate: bool = True
|
@@ -3885,7 +4064,9 @@ class SqlZenStore(BaseZenStore):
|
|
3885
4064
|
).first()
|
3886
4065
|
if flavor_in_db is None:
|
3887
4066
|
raise KeyError(f"Flavor with ID {flavor_id} not found.")
|
3888
|
-
return flavor_in_db.to_model(
|
4067
|
+
return flavor_in_db.to_model(
|
4068
|
+
include_metadata=hydrate, include_resources=True
|
4069
|
+
)
|
3889
4070
|
|
3890
4071
|
def list_flavors(
|
3891
4072
|
self,
|
@@ -3942,7 +4123,9 @@ class SqlZenStore(BaseZenStore):
|
|
3942
4123
|
|
3943
4124
|
# Refresh the Model that was just created
|
3944
4125
|
session.refresh(existing_flavor)
|
3945
|
-
return existing_flavor.to_model(
|
4126
|
+
return existing_flavor.to_model(
|
4127
|
+
include_metadata=True, include_resources=True
|
4128
|
+
)
|
3946
4129
|
|
3947
4130
|
def delete_flavor(self, flavor_id: UUID) -> None:
|
3948
4131
|
"""Delete a flavor.
|
@@ -4009,7 +4192,9 @@ class SqlZenStore(BaseZenStore):
|
|
4009
4192
|
f"{logs_id}: "
|
4010
4193
|
f"No logs with this ID found."
|
4011
4194
|
)
|
4012
|
-
return logs.to_model(
|
4195
|
+
return logs.to_model(
|
4196
|
+
include_metadata=hydrate, include_resources=True
|
4197
|
+
)
|
4013
4198
|
|
4014
4199
|
# ----------------------------- Pipelines -----------------------------
|
4015
4200
|
|
@@ -4108,7 +4293,8 @@ class SqlZenStore(BaseZenStore):
|
|
4108
4293
|
Returns:
|
4109
4294
|
A list of all pipelines matching the filter criteria.
|
4110
4295
|
"""
|
4111
|
-
query = select(PipelineSchema)
|
4296
|
+
query: Union[Select[Any], SelectOfScalar[Any]] = select(PipelineSchema)
|
4297
|
+
_custom_conversion: Optional[Callable[[Any], PipelineResponse]] = None
|
4112
4298
|
|
4113
4299
|
column, operand = pipeline_filter_model.sorting_params
|
4114
4300
|
if column == SORT_PIPELINES_BY_LATEST_RUN_KEY:
|
@@ -4141,7 +4327,12 @@ class SqlZenStore(BaseZenStore):
|
|
4141
4327
|
sort_clause = asc
|
4142
4328
|
|
4143
4329
|
query = (
|
4144
|
-
|
4330
|
+
# We need to include the subquery in the select here to
|
4331
|
+
# make this query work with the distinct statement. This
|
4332
|
+
# result will be removed in the custom conversion function
|
4333
|
+
# applied later
|
4334
|
+
select(PipelineSchema, max_date_subquery.c.run_or_created)
|
4335
|
+
.where(PipelineSchema.id == max_date_subquery.c.id)
|
4145
4336
|
.order_by(sort_clause(max_date_subquery.c.run_or_created))
|
4146
4337
|
# We always add the `id` column as a tiebreaker to ensure a
|
4147
4338
|
# stable, repeatable order of items, otherwise subsequent
|
@@ -4149,6 +4340,14 @@ class SqlZenStore(BaseZenStore):
|
|
4149
4340
|
.order_by(col(PipelineSchema.id))
|
4150
4341
|
)
|
4151
4342
|
|
4343
|
+
def _custom_conversion(row: Any) -> PipelineResponse:
|
4344
|
+
return cast(
|
4345
|
+
PipelineResponse,
|
4346
|
+
row[0].to_model(
|
4347
|
+
include_metadata=hydrate, include_resources=True
|
4348
|
+
),
|
4349
|
+
)
|
4350
|
+
|
4152
4351
|
with Session(self.engine) as session:
|
4153
4352
|
return self.filter_and_paginate(
|
4154
4353
|
session=session,
|
@@ -4156,6 +4355,7 @@ class SqlZenStore(BaseZenStore):
|
|
4156
4355
|
table=PipelineSchema,
|
4157
4356
|
filter_model=pipeline_filter_model,
|
4158
4357
|
hydrate=hydrate,
|
4358
|
+
custom_schema_to_model_conversion=_custom_conversion,
|
4159
4359
|
)
|
4160
4360
|
|
4161
4361
|
def count_pipelines(self, filter_model: Optional[PipelineFilter]) -> int:
|
@@ -4267,7 +4467,9 @@ class SqlZenStore(BaseZenStore):
|
|
4267
4467
|
session.commit()
|
4268
4468
|
session.refresh(new_build)
|
4269
4469
|
|
4270
|
-
return new_build.to_model(
|
4470
|
+
return new_build.to_model(
|
4471
|
+
include_metadata=True, include_resources=True
|
4472
|
+
)
|
4271
4473
|
|
4272
4474
|
def get_build(
|
4273
4475
|
self, build_id: UUID, hydrate: bool = True
|
@@ -4298,7 +4500,9 @@ class SqlZenStore(BaseZenStore):
|
|
4298
4500
|
"No build with this ID found."
|
4299
4501
|
)
|
4300
4502
|
|
4301
|
-
return build.to_model(
|
4503
|
+
return build.to_model(
|
4504
|
+
include_metadata=hydrate, include_resources=True
|
4505
|
+
)
|
4302
4506
|
|
4303
4507
|
def list_builds(
|
4304
4508
|
self,
|
@@ -4379,7 +4583,9 @@ class SqlZenStore(BaseZenStore):
|
|
4379
4583
|
session.commit()
|
4380
4584
|
session.refresh(new_deployment)
|
4381
4585
|
|
4382
|
-
return new_deployment.to_model(
|
4586
|
+
return new_deployment.to_model(
|
4587
|
+
include_metadata=True, include_resources=True
|
4588
|
+
)
|
4383
4589
|
|
4384
4590
|
def get_deployment(
|
4385
4591
|
self, deployment_id: UUID, hydrate: bool = True
|
@@ -4410,7 +4616,9 @@ class SqlZenStore(BaseZenStore):
|
|
4410
4616
|
"No deployment with this ID found."
|
4411
4617
|
)
|
4412
4618
|
|
4413
|
-
return deployment.to_model(
|
4619
|
+
return deployment.to_model(
|
4620
|
+
include_metadata=hydrate, include_resources=True
|
4621
|
+
)
|
4414
4622
|
|
4415
4623
|
def list_deployments(
|
4416
4624
|
self,
|
@@ -4493,7 +4701,7 @@ class SqlZenStore(BaseZenStore):
|
|
4493
4701
|
raise EntityExistsError(
|
4494
4702
|
f"Unable to create run template in workspace "
|
4495
4703
|
f"'{existing_template.workspace.name}': A run template "
|
4496
|
-
"with
|
4704
|
+
f"with the name '{template.name}' already exists."
|
4497
4705
|
)
|
4498
4706
|
|
4499
4707
|
deployment = session.exec(
|
@@ -5285,7 +5493,9 @@ class SqlZenStore(BaseZenStore):
|
|
5285
5493
|
session.add(run_metadata_schema)
|
5286
5494
|
session.commit()
|
5287
5495
|
return_value.append(
|
5288
|
-
run_metadata_schema.to_model(
|
5496
|
+
run_metadata_schema.to_model(
|
5497
|
+
include_metadata=True, include_resources=True
|
5498
|
+
)
|
5289
5499
|
)
|
5290
5500
|
return return_value
|
5291
5501
|
|
@@ -5317,7 +5527,9 @@ class SqlZenStore(BaseZenStore):
|
|
5317
5527
|
f"{run_metadata_id}: "
|
5318
5528
|
f"No run metadata with this ID found."
|
5319
5529
|
)
|
5320
|
-
return run_metadata.to_model(
|
5530
|
+
return run_metadata.to_model(
|
5531
|
+
include_metadata=hydrate, include_resources=True
|
5532
|
+
)
|
5321
5533
|
|
5322
5534
|
def list_run_metadata(
|
5323
5535
|
self,
|
@@ -5360,7 +5572,9 @@ class SqlZenStore(BaseZenStore):
|
|
5360
5572
|
new_schedule = ScheduleSchema.from_request(schedule)
|
5361
5573
|
session.add(new_schedule)
|
5362
5574
|
session.commit()
|
5363
|
-
return new_schedule.to_model(
|
5575
|
+
return new_schedule.to_model(
|
5576
|
+
include_metadata=True, include_resources=True
|
5577
|
+
)
|
5364
5578
|
|
5365
5579
|
def get_schedule(
|
5366
5580
|
self, schedule_id: UUID, hydrate: bool = True
|
@@ -5388,7 +5602,9 @@ class SqlZenStore(BaseZenStore):
|
|
5388
5602
|
f"Unable to get schedule with ID '{schedule_id}': "
|
5389
5603
|
"No schedule with this ID found."
|
5390
5604
|
)
|
5391
|
-
return schedule.to_model(
|
5605
|
+
return schedule.to_model(
|
5606
|
+
include_metadata=hydrate, include_resources=True
|
5607
|
+
)
|
5392
5608
|
|
5393
5609
|
def list_schedules(
|
5394
5610
|
self,
|
@@ -5448,7 +5664,9 @@ class SqlZenStore(BaseZenStore):
|
|
5448
5664
|
existing_schedule = existing_schedule.update(schedule_update)
|
5449
5665
|
session.add(existing_schedule)
|
5450
5666
|
session.commit()
|
5451
|
-
return existing_schedule.to_model(
|
5667
|
+
return existing_schedule.to_model(
|
5668
|
+
include_metadata=True, include_resources=True
|
5669
|
+
)
|
5452
5670
|
|
5453
5671
|
def delete_schedule(self, schedule_id: UUID) -> None:
|
5454
5672
|
"""Deletes a schedule.
|
@@ -5914,7 +6132,9 @@ class SqlZenStore(BaseZenStore):
|
|
5914
6132
|
session.add(new_secret)
|
5915
6133
|
session.commit()
|
5916
6134
|
|
5917
|
-
secret_model = new_secret.to_model(
|
6135
|
+
secret_model = new_secret.to_model(
|
6136
|
+
include_metadata=True, include_resources=True
|
6137
|
+
)
|
5918
6138
|
|
5919
6139
|
try:
|
5920
6140
|
# Set the secret values in the configured secrets store
|
@@ -5954,7 +6174,9 @@ class SqlZenStore(BaseZenStore):
|
|
5954
6174
|
).first()
|
5955
6175
|
if secret_in_db is None:
|
5956
6176
|
raise KeyError(f"Secret with ID {secret_id} not found.")
|
5957
|
-
secret_model = secret_in_db.to_model(
|
6177
|
+
secret_model = secret_in_db.to_model(
|
6178
|
+
include_metadata=hydrate, include_resources=True
|
6179
|
+
)
|
5958
6180
|
|
5959
6181
|
secret_model.set_secrets(self._get_secret_values(secret_id=secret_id))
|
5960
6182
|
|
@@ -6057,7 +6279,9 @@ class SqlZenStore(BaseZenStore):
|
|
6057
6279
|
|
6058
6280
|
# Refresh the Model that was just created
|
6059
6281
|
session.refresh(existing_secret)
|
6060
|
-
secret_model = existing_secret.to_model(
|
6282
|
+
secret_model = existing_secret.to_model(
|
6283
|
+
include_metadata=True, include_resources=True
|
6284
|
+
)
|
6061
6285
|
|
6062
6286
|
if secret_update.values is not None:
|
6063
6287
|
# Update the secret values in the configured secrets store
|
@@ -6273,7 +6497,9 @@ class SqlZenStore(BaseZenStore):
|
|
6273
6497
|
# on commit an IntegrityError may arise we let it bubble up
|
6274
6498
|
session.commit()
|
6275
6499
|
|
6276
|
-
return new_account.to_service_account_model(
|
6500
|
+
return new_account.to_service_account_model(
|
6501
|
+
include_metadata=True, include_resources=True
|
6502
|
+
)
|
6277
6503
|
|
6278
6504
|
def get_service_account(
|
6279
6505
|
self,
|
@@ -6300,7 +6526,9 @@ class SqlZenStore(BaseZenStore):
|
|
6300
6526
|
service_account=True,
|
6301
6527
|
)
|
6302
6528
|
|
6303
|
-
return account.to_service_account_model(
|
6529
|
+
return account.to_service_account_model(
|
6530
|
+
include_metadata=hydrate, include_resources=True
|
6531
|
+
)
|
6304
6532
|
|
6305
6533
|
def list_service_accounts(
|
6306
6534
|
self,
|
@@ -6327,7 +6555,7 @@ class SqlZenStore(BaseZenStore):
|
|
6327
6555
|
table=UserSchema,
|
6328
6556
|
filter_model=filter_model,
|
6329
6557
|
custom_schema_to_model_conversion=lambda user: user.to_service_account_model(
|
6330
|
-
include_metadata=hydrate
|
6558
|
+
include_metadata=hydrate, include_resources=True
|
6331
6559
|
),
|
6332
6560
|
hydrate=hydrate,
|
6333
6561
|
)
|
@@ -6389,7 +6617,7 @@ class SqlZenStore(BaseZenStore):
|
|
6389
6617
|
# Refresh the Model that was just created
|
6390
6618
|
session.refresh(existing_service_account)
|
6391
6619
|
return existing_service_account.to_service_account_model(
|
6392
|
-
include_metadata=True
|
6620
|
+
include_metadata=True, include_resources=True
|
6393
6621
|
)
|
6394
6622
|
|
6395
6623
|
def delete_service_account(
|
@@ -6496,7 +6724,9 @@ class SqlZenStore(BaseZenStore):
|
|
6496
6724
|
|
6497
6725
|
raise
|
6498
6726
|
|
6499
|
-
connector = new_service_connector.to_model(
|
6727
|
+
connector = new_service_connector.to_model(
|
6728
|
+
include_metadata=True, include_resources=True
|
6729
|
+
)
|
6500
6730
|
self._populate_connector_type(connector)
|
6501
6731
|
|
6502
6732
|
return connector
|
@@ -6530,7 +6760,9 @@ class SqlZenStore(BaseZenStore):
|
|
6530
6760
|
"found."
|
6531
6761
|
)
|
6532
6762
|
|
6533
|
-
connector = service_connector.to_model(
|
6763
|
+
connector = service_connector.to_model(
|
6764
|
+
include_metadata=hydrate, include_resources=True
|
6765
|
+
)
|
6534
6766
|
self._populate_connector_type(connector)
|
6535
6767
|
return connector
|
6536
6768
|
|
@@ -6744,7 +6976,9 @@ class SqlZenStore(BaseZenStore):
|
|
6744
6976
|
session.add(existing_connector)
|
6745
6977
|
session.commit()
|
6746
6978
|
|
6747
|
-
connector = existing_connector.to_model(
|
6979
|
+
connector = existing_connector.to_model(
|
6980
|
+
include_metadata=True, include_resources=True
|
6981
|
+
)
|
6748
6982
|
self._populate_connector_type(connector)
|
6749
6983
|
return connector
|
6750
6984
|
|
@@ -7262,7 +7496,7 @@ class SqlZenStore(BaseZenStore):
|
|
7262
7496
|
hydrate=False,
|
7263
7497
|
)
|
7264
7498
|
need_to_generate_permanent_tokens = (
|
7265
|
-
orchestrator.
|
7499
|
+
orchestrator.flavor_name.startswith("vm_")
|
7266
7500
|
)
|
7267
7501
|
else:
|
7268
7502
|
need_to_generate_permanent_tokens = (
|
@@ -7518,7 +7752,9 @@ class SqlZenStore(BaseZenStore):
|
|
7518
7752
|
session=session,
|
7519
7753
|
)
|
7520
7754
|
|
7521
|
-
return new_stack_schema.to_model(
|
7755
|
+
return new_stack_schema.to_model(
|
7756
|
+
include_metadata=True, include_resources=True
|
7757
|
+
)
|
7522
7758
|
|
7523
7759
|
except Exception:
|
7524
7760
|
for component_id in components_created_ids:
|
@@ -7554,7 +7790,9 @@ class SqlZenStore(BaseZenStore):
|
|
7554
7790
|
|
7555
7791
|
if stack is None:
|
7556
7792
|
raise KeyError(f"Stack with ID {stack_id} not found.")
|
7557
|
-
return stack.to_model(
|
7793
|
+
return stack.to_model(
|
7794
|
+
include_metadata=hydrate, include_resources=True
|
7795
|
+
)
|
7558
7796
|
|
7559
7797
|
def list_stacks(
|
7560
7798
|
self,
|
@@ -7646,7 +7884,9 @@ class SqlZenStore(BaseZenStore):
|
|
7646
7884
|
session.commit()
|
7647
7885
|
session.refresh(existing_stack)
|
7648
7886
|
|
7649
|
-
return existing_stack.to_model(
|
7887
|
+
return existing_stack.to_model(
|
7888
|
+
include_metadata=True, include_resources=True
|
7889
|
+
)
|
7650
7890
|
|
7651
7891
|
def delete_stack(self, stack_id: UUID) -> None:
|
7652
7892
|
"""Delete a stack.
|
@@ -7960,7 +8200,9 @@ class SqlZenStore(BaseZenStore):
|
|
7960
8200
|
|
7961
8201
|
session.commit()
|
7962
8202
|
|
7963
|
-
return step_schema.to_model(
|
8203
|
+
return step_schema.to_model(
|
8204
|
+
include_metadata=True, include_resources=True
|
8205
|
+
)
|
7964
8206
|
|
7965
8207
|
def get_run_step(
|
7966
8208
|
self, step_run_id: UUID, hydrate: bool = True
|
@@ -8093,7 +8335,9 @@ class SqlZenStore(BaseZenStore):
|
|
8093
8335
|
session.commit()
|
8094
8336
|
session.refresh(existing_step_run)
|
8095
8337
|
|
8096
|
-
return existing_step_run.to_model(
|
8338
|
+
return existing_step_run.to_model(
|
8339
|
+
include_metadata=True, include_resources=True
|
8340
|
+
)
|
8097
8341
|
|
8098
8342
|
@staticmethod
|
8099
8343
|
def _set_run_step_parent_step(
|
@@ -8304,6 +8548,14 @@ class SqlZenStore(BaseZenStore):
|
|
8304
8548
|
num_steps=num_steps,
|
8305
8549
|
)
|
8306
8550
|
|
8551
|
+
if pipeline_run.is_placeholder_run() and not new_status.is_finished:
|
8552
|
+
# If the pipeline run is a placeholder run, no step has been started
|
8553
|
+
# for the run yet. This means the orchestrator hasn't started
|
8554
|
+
# running yet, and this method is most likely being called as
|
8555
|
+
# part of the creation of some cached steps. In this case, we don't
|
8556
|
+
# update the status unless the run is finished.
|
8557
|
+
return
|
8558
|
+
|
8307
8559
|
if new_status != pipeline_run.status:
|
8308
8560
|
run_update = PipelineRunUpdate(status=new_status)
|
8309
8561
|
if new_status in {
|
@@ -8902,7 +9154,9 @@ class SqlZenStore(BaseZenStore):
|
|
8902
9154
|
},
|
8903
9155
|
)
|
8904
9156
|
|
8905
|
-
return new_user.to_model(
|
9157
|
+
return new_user.to_model(
|
9158
|
+
include_metadata=True, include_resources=True
|
9159
|
+
)
|
8906
9160
|
|
8907
9161
|
def get_user(
|
8908
9162
|
self,
|
@@ -8949,7 +9203,9 @@ class SqlZenStore(BaseZenStore):
|
|
8949
9203
|
)
|
8950
9204
|
|
8951
9205
|
return user.to_model(
|
8952
|
-
include_private=include_private,
|
9206
|
+
include_private=include_private,
|
9207
|
+
include_metadata=hydrate,
|
9208
|
+
include_resources=True,
|
8953
9209
|
)
|
8954
9210
|
|
8955
9211
|
def get_auth_user(
|
@@ -9077,7 +9333,9 @@ class SqlZenStore(BaseZenStore):
|
|
9077
9333
|
|
9078
9334
|
# Refresh the Model that was just created
|
9079
9335
|
session.refresh(existing_user)
|
9080
|
-
updated_user = existing_user.to_model(
|
9336
|
+
updated_user = existing_user.to_model(
|
9337
|
+
include_metadata=True, include_resources=True
|
9338
|
+
)
|
9081
9339
|
|
9082
9340
|
survey_finished_after = (
|
9083
9341
|
FINISHED_ONBOARDING_SURVEY_KEY in updated_user.user_metadata
|
@@ -9157,10 +9415,9 @@ class SqlZenStore(BaseZenStore):
|
|
9157
9415
|
* server deployments that set the `auto_activate` server
|
9158
9416
|
setting explicitly to `True`. This includes:
|
9159
9417
|
* local ZenML server deployments: the server is deployed locally
|
9160
|
-
with `zenml
|
9418
|
+
with `zenml login --local`
|
9161
9419
|
* local ZenML docker deployments: the server is deployed locally
|
9162
|
-
with `zenml
|
9163
|
-
* legacy dashboard deployments
|
9420
|
+
with `zenml login --local --docker`
|
9164
9421
|
|
9165
9422
|
For all other cases, or if the external authentication scheme is used,
|
9166
9423
|
no default admin user is created. The user must activate the server and
|
@@ -9181,7 +9438,7 @@ class SqlZenStore(BaseZenStore):
|
|
9181
9438
|
# Running inside server with external auth
|
9182
9439
|
return False
|
9183
9440
|
|
9184
|
-
if config.auto_activate
|
9441
|
+
if config.auto_activate:
|
9185
9442
|
return True
|
9186
9443
|
|
9187
9444
|
else:
|
@@ -9255,7 +9512,9 @@ class SqlZenStore(BaseZenStore):
|
|
9255
9512
|
# Explicitly refresh the new_workspace schema
|
9256
9513
|
session.refresh(new_workspace)
|
9257
9514
|
|
9258
|
-
workspace_model = new_workspace.to_model(
|
9515
|
+
workspace_model = new_workspace.to_model(
|
9516
|
+
include_metadata=True, include_resources=True
|
9517
|
+
)
|
9259
9518
|
|
9260
9519
|
self._get_or_create_default_stack(workspace=workspace_model)
|
9261
9520
|
return workspace_model
|
@@ -9277,7 +9536,9 @@ class SqlZenStore(BaseZenStore):
|
|
9277
9536
|
workspace = self._get_workspace_schema(
|
9278
9537
|
workspace_name_or_id, session=session
|
9279
9538
|
)
|
9280
|
-
return workspace.to_model(
|
9539
|
+
return workspace.to_model(
|
9540
|
+
include_metadata=hydrate, include_resources=True
|
9541
|
+
)
|
9281
9542
|
|
9282
9543
|
def list_workspaces(
|
9283
9544
|
self,
|
@@ -9349,7 +9610,9 @@ class SqlZenStore(BaseZenStore):
|
|
9349
9610
|
|
9350
9611
|
# Refresh the Model that was just created
|
9351
9612
|
session.refresh(existing_workspace)
|
9352
|
-
return existing_workspace.to_model(
|
9613
|
+
return existing_workspace.to_model(
|
9614
|
+
include_metadata=True, include_resources=True
|
9615
|
+
)
|
9353
9616
|
|
9354
9617
|
def delete_workspace(self, workspace_name_or_id: Union[str, UUID]) -> None:
|
9355
9618
|
"""Deletes a workspace.
|
@@ -9790,7 +10053,9 @@ class SqlZenStore(BaseZenStore):
|
|
9790
10053
|
resource_type=TaggableResourceTypes.MODEL,
|
9791
10054
|
)
|
9792
10055
|
session.commit()
|
9793
|
-
return model_schema.to_model(
|
10056
|
+
return model_schema.to_model(
|
10057
|
+
include_metadata=True, include_resources=True
|
10058
|
+
)
|
9794
10059
|
|
9795
10060
|
def get_model(
|
9796
10061
|
self,
|
@@ -9819,7 +10084,9 @@ class SqlZenStore(BaseZenStore):
|
|
9819
10084
|
f"Unable to get model with ID `{model_name_or_id}`: "
|
9820
10085
|
f"No model with this ID found."
|
9821
10086
|
)
|
9822
|
-
return model.to_model(
|
10087
|
+
return model.to_model(
|
10088
|
+
include_metadata=hydrate, include_resources=True
|
10089
|
+
)
|
9823
10090
|
|
9824
10091
|
def list_models(
|
9825
10092
|
self,
|
@@ -9915,7 +10182,9 @@ class SqlZenStore(BaseZenStore):
|
|
9915
10182
|
|
9916
10183
|
# Refresh the Model that was just created
|
9917
10184
|
session.refresh(existing_model)
|
9918
|
-
return existing_model.to_model(
|
10185
|
+
return existing_model.to_model(
|
10186
|
+
include_metadata=True, include_resources=True
|
10187
|
+
)
|
9919
10188
|
|
9920
10189
|
# ----------------------------- Model Versions -----------------------------
|
9921
10190
|
|
@@ -9993,7 +10262,9 @@ class SqlZenStore(BaseZenStore):
|
|
9993
10262
|
session.rollback()
|
9994
10263
|
raise e
|
9995
10264
|
|
9996
|
-
return model_version_schema.to_model(
|
10265
|
+
return model_version_schema.to_model(
|
10266
|
+
include_metadata=True, include_resources=True
|
10267
|
+
)
|
9997
10268
|
|
9998
10269
|
def get_model_version(
|
9999
10270
|
self, model_version_id: UUID, hydrate: bool = True
|
@@ -10218,7 +10489,7 @@ class SqlZenStore(BaseZenStore):
|
|
10218
10489
|
session.add(model_version_artifact_link_schema)
|
10219
10490
|
session.commit()
|
10220
10491
|
return model_version_artifact_link_schema.to_model(
|
10221
|
-
include_metadata=True
|
10492
|
+
include_metadata=True, include_resources=True
|
10222
10493
|
)
|
10223
10494
|
|
10224
10495
|
def list_model_version_artifact_links(
|
@@ -10379,7 +10650,7 @@ class SqlZenStore(BaseZenStore):
|
|
10379
10650
|
session.add(model_version_pipeline_run_link_schema)
|
10380
10651
|
session.commit()
|
10381
10652
|
return model_version_pipeline_run_link_schema.to_model(
|
10382
|
-
include_metadata=True
|
10653
|
+
include_metadata=True, include_resources=True
|
10383
10654
|
)
|
10384
10655
|
|
10385
10656
|
def list_model_version_pipeline_run_links(
|
@@ -10543,7 +10814,9 @@ class SqlZenStore(BaseZenStore):
|
|
10543
10814
|
session.add(tag_schema)
|
10544
10815
|
|
10545
10816
|
session.commit()
|
10546
|
-
return tag_schema.to_model(
|
10817
|
+
return tag_schema.to_model(
|
10818
|
+
include_metadata=True, include_resources=True
|
10819
|
+
)
|
10547
10820
|
|
10548
10821
|
def delete_tag(
|
10549
10822
|
self,
|
@@ -10594,7 +10867,9 @@ class SqlZenStore(BaseZenStore):
|
|
10594
10867
|
f"Unable to get tag with ID `{tag_name_or_id}`: "
|
10595
10868
|
f"No tag with this ID found."
|
10596
10869
|
)
|
10597
|
-
return tag.to_model(
|
10870
|
+
return tag.to_model(
|
10871
|
+
include_metadata=hydrate, include_resources=True
|
10872
|
+
)
|
10598
10873
|
|
10599
10874
|
def list_tags(
|
10600
10875
|
self,
|
@@ -10652,7 +10927,7 @@ class SqlZenStore(BaseZenStore):
|
|
10652
10927
|
|
10653
10928
|
# Refresh the tag that was just created
|
10654
10929
|
session.refresh(tag)
|
10655
|
-
return tag.to_model(include_metadata=True)
|
10930
|
+
return tag.to_model(include_metadata=True, include_resources=True)
|
10656
10931
|
|
10657
10932
|
####################
|
10658
10933
|
# Tags <> resources
|
@@ -10695,7 +10970,9 @@ class SqlZenStore(BaseZenStore):
|
|
10695
10970
|
session.add(tag_resource_schema)
|
10696
10971
|
|
10697
10972
|
session.commit()
|
10698
|
-
return tag_resource_schema.to_model(
|
10973
|
+
return tag_resource_schema.to_model(
|
10974
|
+
include_metadata=True, include_resources=True
|
10975
|
+
)
|
10699
10976
|
|
10700
10977
|
def delete_tag_resource(
|
10701
10978
|
self,
|