zenml-nightly 0.64.0.dev20240811__py3-none-any.whl → 0.66.0.dev20240910__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 +1 -1
- RELEASE_NOTES.md +126 -4
- zenml/VERSION +1 -1
- zenml/artifacts/utils.py +13 -6
- zenml/cli/__init__.py +1 -1
- zenml/cli/base.py +4 -4
- zenml/cli/integration.py +48 -9
- zenml/cli/pipeline.py +9 -2
- zenml/cli/stack.py +39 -27
- zenml/cli/utils.py +13 -0
- zenml/client.py +15 -17
- zenml/config/compiler.py +34 -0
- zenml/config/server_config.py +30 -0
- zenml/config/source.py +3 -7
- zenml/constants.py +5 -3
- zenml/entrypoints/base_entrypoint_configuration.py +41 -27
- zenml/entrypoints/step_entrypoint_configuration.py +5 -2
- zenml/enums.py +2 -0
- zenml/environment.py +31 -0
- zenml/feature_stores/base_feature_store.py +4 -6
- zenml/integrations/__init__.py +3 -0
- zenml/integrations/airflow/flavors/airflow_orchestrator_flavor.py +9 -0
- zenml/integrations/aws/__init__.py +2 -2
- zenml/integrations/aws/orchestrators/sagemaker_orchestrator.py +2 -1
- zenml/integrations/azure/__init__.py +2 -2
- zenml/integrations/azure/azureml_utils.py +201 -0
- zenml/integrations/azure/flavors/azureml.py +139 -0
- zenml/integrations/azure/flavors/azureml_orchestrator_flavor.py +20 -118
- zenml/integrations/azure/flavors/azureml_step_operator_flavor.py +67 -14
- zenml/integrations/azure/orchestrators/azureml_orchestrator.py +58 -172
- zenml/integrations/azure/orchestrators/azureml_orchestrator_entrypoint_config.py +1 -0
- zenml/integrations/azure/service_connectors/azure_service_connector.py +4 -0
- zenml/integrations/azure/step_operators/azureml_step_operator.py +78 -177
- zenml/integrations/constants.py +3 -0
- zenml/integrations/databricks/__init__.py +22 -4
- zenml/integrations/databricks/flavors/databricks_orchestrator_flavor.py +9 -0
- zenml/integrations/deepchecks/__init__.py +29 -11
- zenml/integrations/deepchecks/materializers/deepchecks_dataset_materializer.py +3 -1
- zenml/integrations/deepchecks/validation_checks.py +0 -30
- zenml/integrations/evidently/__init__.py +17 -2
- zenml/integrations/facets/__init__.py +21 -5
- zenml/integrations/feast/__init__.py +19 -6
- zenml/integrations/gcp/__init__.py +2 -2
- zenml/integrations/gcp/flavors/vertex_orchestrator_flavor.py +9 -0
- zenml/integrations/gcp/orchestrators/vertex_orchestrator.py +10 -1
- zenml/integrations/great_expectations/__init__.py +21 -7
- zenml/integrations/huggingface/__init__.py +39 -15
- zenml/integrations/huggingface/materializers/__init__.py +3 -0
- zenml/integrations/huggingface/materializers/huggingface_datasets_materializer.py +3 -1
- zenml/integrations/huggingface/materializers/huggingface_pt_model_materializer.py +1 -1
- zenml/integrations/huggingface/materializers/huggingface_t5_materializer.py +107 -0
- zenml/integrations/huggingface/materializers/huggingface_tf_model_materializer.py +1 -1
- zenml/integrations/huggingface/materializers/huggingface_tokenizer_materializer.py +2 -2
- zenml/integrations/huggingface/steps/accelerate_runner.py +108 -85
- zenml/integrations/hyperai/flavors/hyperai_orchestrator_flavor.py +9 -0
- zenml/integrations/kubeflow/flavors/kubeflow_orchestrator_flavor.py +9 -0
- zenml/integrations/kubeflow/orchestrators/kubeflow_orchestrator.py +10 -1
- zenml/integrations/kubernetes/flavors/kubernetes_orchestrator_flavor.py +9 -0
- zenml/integrations/kubernetes/orchestrators/kubernetes_orchestrator.py +10 -1
- zenml/integrations/lightning/__init__.py +48 -0
- zenml/integrations/lightning/flavors/__init__.py +23 -0
- zenml/integrations/lightning/flavors/lightning_orchestrator_flavor.py +148 -0
- zenml/integrations/lightning/orchestrators/__init__.py +23 -0
- zenml/integrations/lightning/orchestrators/lightning_orchestrator.py +596 -0
- zenml/integrations/lightning/orchestrators/lightning_orchestrator_entrypoint.py +307 -0
- zenml/integrations/lightning/orchestrators/lightning_orchestrator_entrypoint_configuration.py +77 -0
- zenml/integrations/lightning/orchestrators/utils.py +67 -0
- zenml/integrations/mlflow/__init__.py +43 -5
- zenml/integrations/mlflow/services/mlflow_deployment.py +26 -0
- zenml/integrations/numpy/__init__.py +32 -0
- zenml/integrations/numpy/materializers/__init__.py +18 -0
- zenml/integrations/numpy/materializers/numpy_materializer.py +246 -0
- zenml/integrations/pandas/__init__.py +32 -0
- zenml/integrations/pandas/materializers/__init__.py +18 -0
- zenml/integrations/pandas/materializers/pandas_materializer.py +192 -0
- zenml/integrations/prodigy/annotators/prodigy_annotator.py +1 -1
- zenml/integrations/seldon/__init__.py +18 -3
- zenml/integrations/sklearn/__init__.py +1 -1
- zenml/integrations/skypilot_azure/__init__.py +1 -1
- zenml/integrations/tensorboard/__init__.py +1 -1
- zenml/integrations/tensorflow/__init__.py +2 -2
- zenml/integrations/tensorflow/materializers/tf_dataset_materializer.py +2 -2
- zenml/integrations/whylogs/__init__.py +18 -2
- zenml/logging/step_logging.py +9 -2
- zenml/materializers/__init__.py +0 -4
- zenml/materializers/base_materializer.py +4 -0
- zenml/materializers/numpy_materializer.py +23 -234
- zenml/materializers/pandas_materializer.py +22 -179
- zenml/model/model.py +91 -2
- zenml/model/utils.py +5 -5
- zenml/models/__init__.py +16 -3
- zenml/models/v2/core/model_version.py +1 -1
- zenml/models/v2/core/pipeline_run.py +31 -1
- zenml/models/v2/core/stack.py +51 -20
- zenml/models/v2/core/step_run.py +28 -0
- zenml/models/v2/misc/info_models.py +78 -0
- zenml/new/pipelines/pipeline.py +65 -25
- zenml/new/pipelines/run_utils.py +57 -136
- zenml/new/steps/step_context.py +17 -6
- zenml/orchestrators/base_orchestrator.py +9 -0
- zenml/orchestrators/step_launcher.py +37 -14
- zenml/orchestrators/step_runner.py +14 -13
- zenml/orchestrators/utils.py +107 -7
- zenml/service_connectors/service_connector_utils.py +2 -2
- zenml/stack/utils.py +11 -2
- zenml/stack_deployments/azure_stack_deployment.py +2 -1
- zenml/steps/base_step.py +62 -25
- zenml/steps/utils.py +115 -3
- zenml/utils/cloud_utils.py +8 -8
- zenml/utils/code_utils.py +130 -32
- zenml/utils/function_utils.py +7 -7
- zenml/utils/notebook_utils.py +14 -0
- zenml/utils/pipeline_docker_image_builder.py +1 -11
- zenml/utils/pydantic_utils.py +3 -3
- zenml/utils/secret_utils.py +2 -2
- zenml/utils/settings_utils.py +1 -1
- zenml/utils/source_utils.py +67 -21
- zenml/utils/string_utils.py +29 -0
- zenml/zen_server/dashboard/assets/{404-CRAA_Lew.js → 404-iO8vpun1.js} +1 -1
- zenml/zen_server/dashboard/assets/{@radix-BXWm7HOa.js → @radix-DnFH_oo1.js} +1 -1
- zenml/zen_server/dashboard/assets/{@react-router-l3lMcXA2.js → @react-router-APVeuk-U.js} +1 -1
- zenml/zen_server/dashboard/assets/{@reactflow-CeVxyqYT.js → @reactflow-B6kq9fJZ.js} +2 -2
- zenml/zen_server/dashboard/assets/{@tanstack-FmcYZMuX.js → @tanstack-QbMbTrh5.js} +1 -1
- zenml/zen_server/dashboard/assets/AlertDialogDropdownItem-BXeSvmMY.js +1 -0
- zenml/zen_server/dashboard/assets/{CodeSnippet-D0VLxT2A.js → CodeSnippet-DNWdQmbo.js} +2 -2
- zenml/zen_server/dashboard/assets/CollapsibleCard-B2OVjWYE.js +1 -0
- zenml/zen_server/dashboard/assets/Commands-DsoaVElZ.js +1 -0
- zenml/zen_server/dashboard/assets/CopyButton-BqE_-PHO.js +2 -0
- zenml/zen_server/dashboard/assets/{CsvVizualization-D3kAypDj.js → CsvVizualization-Dyasr2jU.js} +6 -6
- zenml/zen_server/dashboard/assets/{edit-C0MVvPD2.js → DialogItem-Cz1VLRwa.js} +1 -1
- zenml/zen_server/dashboard/assets/{DisplayDate-DizbSeT-.js → DisplayDate-DkCy54Bp.js} +1 -1
- zenml/zen_server/dashboard/assets/EditSecretDialog-Du423_3U.js +1 -0
- zenml/zen_server/dashboard/assets/{EmptyState-BHblM39I.js → EmptyState-Cs3DEmso.js} +1 -1
- zenml/zen_server/dashboard/assets/{Error-C6LeJSER.js → Error-DorJD_va.js} +1 -1
- zenml/zen_server/dashboard/assets/ExecutionStatus-CIfQTutR.js +1 -0
- zenml/zen_server/dashboard/assets/{Helpbox-aAB2XP-z.js → Helpbox-CmfvtNeq.js} +1 -1
- zenml/zen_server/dashboard/assets/Infobox-BL9NOS37.js +1 -0
- zenml/zen_server/dashboard/assets/{InlineAvatar-DpTLgM3Q.js → InlineAvatar-Ds2ZFHPc.js} +1 -1
- zenml/zen_server/dashboard/assets/{Lock-CNyJvf2r.js → Lock-CmIn0szs.js} +1 -1
- zenml/zen_server/dashboard/assets/{MarkdownVisualization-Bajxn0HY.js → MarkdownVisualization-DS05sfBm.js} +1 -1
- zenml/zen_server/dashboard/assets/{NumberBox-BmKE0qnO.js → NumberBox-CrN0_kqI.js} +1 -1
- zenml/zen_server/dashboard/assets/Partials-DX-8iEa1.js +1 -0
- zenml/zen_server/dashboard/assets/{PasswordChecker-yGGoJSB-.js → PasswordChecker-DE71J_3F.js} +1 -1
- zenml/zen_server/dashboard/assets/ProviderIcon-BOQJgapd.js +1 -0
- zenml/zen_server/dashboard/assets/ProviderRadio-BsYBw9YA.js +1 -0
- zenml/zen_server/dashboard/assets/SearchField-W3GXpLlI.js +1 -0
- zenml/zen_server/dashboard/assets/SetPassword-B-0a8UCj.js +1 -0
- zenml/zen_server/dashboard/assets/{Tick-uxv80Q6a.js → Tick-i1DYsVcX.js} +1 -1
- zenml/zen_server/dashboard/assets/{UpdatePasswordSchemas-oN4G3sKz.js → UpdatePasswordSchemas-C6Zb7ASL.js} +1 -1
- zenml/zen_server/dashboard/assets/UsageReason-CCnzmwS8.js +1 -0
- zenml/zen_server/dashboard/assets/WizardFooter-BHbO7zOa.js +1 -0
- zenml/zen_server/dashboard/assets/all-pipeline-runs-query-BBEe6I9-.js +1 -0
- zenml/zen_server/dashboard/assets/{check-circle-1_I207rW.js → check-circle-DOoS4yhF.js} +1 -1
- zenml/zen_server/dashboard/assets/{chevron-down-BpaF8JqM.js → chevron-down-Cwb-W_B_.js} +1 -1
- zenml/zen_server/dashboard/assets/{chevron-right-double-Dk8e2L99.js → chevron-right-double-c9H46Kl8.js} +1 -1
- zenml/zen_server/dashboard/assets/{cloud-only-BkUuI0lZ.js → cloud-only-BuP4Kt_7.js} +1 -1
- zenml/zen_server/dashboard/assets/code-browser-BJYErIjr.js +1 -0
- zenml/zen_server/dashboard/assets/codespaces-BitYDX9d.gif +0 -0
- zenml/zen_server/dashboard/assets/{copy-f3XGPPxt.js → copy-CaGlDsUy.js} +1 -1
- zenml/zen_server/dashboard/assets/create-stack-B2x2d4r1.js +1 -0
- zenml/zen_server/dashboard/assets/{docker-8uj__HHK.js → docker-BFAFXr2_.js} +1 -1
- zenml/zen_server/dashboard/assets/{dots-horizontal-sKQlWEni.js → dots-horizontal-C6K59vUm.js} +1 -1
- zenml/zen_server/dashboard/assets/flyte-Cj-xy_8I.svg +10 -0
- zenml/zen_server/dashboard/assets/form-schemas-Bap0f854.js +1 -0
- zenml/zen_server/dashboard/assets/gcp-Dj6ntk0L.js +1 -0
- zenml/zen_server/dashboard/assets/{help-FuHlZwn0.js → help-CwN931fX.js} +1 -1
- zenml/zen_server/dashboard/assets/{index-Bd1xgUQG.js → index-5GJ5ysEZ.js} +1 -1
- zenml/zen_server/dashboard/assets/{index-DaGknux4.css → index-6DYjZgDn.css} +1 -1
- zenml/zen_server/dashboard/assets/index-B9wVwe7u.js +55 -0
- zenml/zen_server/dashboard/assets/index-DFi8BroH.js +1 -0
- zenml/zen_server/dashboard/assets/{index.esm-DT4uyn2i.js → index.esm-BE1uqCX5.js} +1 -1
- zenml/zen_server/dashboard/assets/kubernetes-BjbR6D-1.js +1 -0
- zenml/zen_server/dashboard/assets/{layout-D6oiSbfd.js → layout-Dru15_XR.js} +1 -1
- zenml/zen_server/dashboard/assets/link-external-BT2L8hAQ.js +1 -0
- zenml/zen_server/dashboard/assets/{login-mutation-13A_JSVA.js → login-mutation-DwxUz8VA.js} +1 -1
- zenml/zen_server/dashboard/assets/{logs-CgeE2vZP.js → logs-GiDJXbLS.js} +1 -1
- zenml/zen_server/dashboard/assets/metaflow-weOkWNyT.svg +10 -0
- zenml/zen_server/dashboard/assets/{not-found-B0Mmb90p.js → not-found-D5i9DunU.js} +1 -1
- zenml/zen_server/dashboard/assets/{package-DdkziX79.js → package-DYKZ5jKW.js} +1 -1
- zenml/zen_server/dashboard/assets/page-BFuJICXM.js +9 -0
- zenml/zen_server/dashboard/assets/{page-BGwA9B1M.js → page-BiF8hLbO.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-DugsjcQ_.js → page-BitfWsiW.js} +1 -1
- zenml/zen_server/dashboard/assets/page-CDOQLrPC.js +1 -0
- zenml/zen_server/dashboard/assets/page-CEJWu1YO.js +1 -0
- zenml/zen_server/dashboard/assets/page-CIbehp7V.js +1 -0
- zenml/zen_server/dashboard/assets/page-CLiRGfWo.js +1 -0
- zenml/zen_server/dashboard/assets/page-CV44mQn9.js +1 -0
- zenml/zen_server/dashboard/assets/page-CrSdkteO.js +2 -0
- zenml/zen_server/dashboard/assets/page-D5F3DJjm.js +1 -0
- zenml/zen_server/dashboard/assets/page-DE03uZZR.js +1 -0
- zenml/zen_server/dashboard/assets/page-DFCK65G9.js +1 -0
- zenml/zen_server/dashboard/assets/{page-RnG-qhv9.js → page-DGMa3ZQL.js} +1 -1
- zenml/zen_server/dashboard/assets/page-DI-qTWrm.js +1 -0
- zenml/zen_server/dashboard/assets/page-DQGCHKrQ.js +1 -0
- zenml/zen_server/dashboard/assets/{page-DSTQnBk-.js → page-DQdwZZ9x.js} +1 -1
- zenml/zen_server/dashboard/assets/page-DgM-N9RL.js +1 -0
- zenml/zen_server/dashboard/assets/page-Dt8VgzbE.js +1 -0
- zenml/zen_server/dashboard/assets/{page-DLpOnf7u.js → page-J0s8Sq3N.js} +1 -1
- zenml/zen_server/dashboard/assets/page-WCQ659by.js +1 -0
- zenml/zen_server/dashboard/assets/page-bimkItOg.js +1 -0
- zenml/zen_server/dashboard/assets/{page-hQaiQXfg.js → page-iwoJnwPv.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-YiF_fNbe.js → page-oS4hqS8M.js} +1 -1
- zenml/zen_server/dashboard/assets/page-oSqx9dkH.js +1 -0
- zenml/zen_server/dashboard/assets/page-p3GqEAUW.js +1 -0
- zenml/zen_server/dashboard/assets/page-qvcUVPE-.js +1 -0
- zenml/zen_server/dashboard/assets/page-xQG6GmFJ.js +1 -0
- zenml/zen_server/dashboard/assets/{persist-3-5nOJ6m.js → persist-mEZN_fgH.js} +1 -1
- zenml/zen_server/dashboard/assets/persist-xsYgVtR1.js +1 -0
- zenml/zen_server/dashboard/assets/{plus-FB9-lEq_.js → plus-Bc8eLSDM.js} +1 -1
- zenml/zen_server/dashboard/assets/{refresh-COb6KYDi.js → refresh-hfgWPeto.js} +1 -1
- zenml/zen_server/dashboard/assets/rocket-SESCGQXm.js +1 -0
- zenml/zen_server/dashboard/assets/sharedSchema-BfZcy7aP.js +14 -0
- zenml/zen_server/dashboard/assets/stack-detail-query-CU4egfhp.js +1 -0
- zenml/zen_server/dashboard/assets/templates-1S_8WeSK.webp +0 -0
- zenml/zen_server/dashboard/assets/{trash-Cd5CSFqA.js → trash-DUWZWzse.js} +1 -1
- zenml/zen_server/dashboard/assets/{update-server-settings-mutation-B8GB_ubU.js → update-server-settings-mutation-DNqmQXDM.js} +1 -1
- zenml/zen_server/dashboard/assets/{url-hcMJkz8p.js → url-DwbuKk1b.js} +1 -1
- zenml/zen_server/dashboard/assets/{zod-CnykDKJj.js → zod-uFd1wBcd.js} +1 -1
- zenml/zen_server/dashboard/index.html +7 -7
- zenml/zen_server/dashboard_legacy/asset-manifest.json +4 -4
- zenml/zen_server/dashboard_legacy/index.html +1 -1
- zenml/zen_server/dashboard_legacy/{precache-manifest.9c473c96a43298343a7ce1256183123b.js → precache-manifest.290b95d5b43efa3368b3dc63d20c4782.js} +4 -4
- zenml/zen_server/dashboard_legacy/service-worker.js +1 -1
- zenml/zen_server/dashboard_legacy/static/js/{main.463c90b9.chunk.js → main.840d1bf0.chunk.js} +2 -2
- zenml/zen_server/dashboard_legacy/static/js/{main.463c90b9.chunk.js.map → main.840d1bf0.chunk.js.map} +1 -1
- zenml/zen_server/deploy/helm/Chart.yaml +1 -1
- zenml/zen_server/deploy/helm/README.md +2 -2
- zenml/zen_server/routers/service_connectors_endpoints.py +2 -4
- zenml/zen_server/routers/workspaces_endpoints.py +20 -66
- zenml/zen_server/secure_headers.py +120 -0
- zenml/zen_server/template_execution/runner_entrypoint_configuration.py +0 -2
- zenml/zen_server/template_execution/utils.py +1 -0
- zenml/zen_server/utils.py +0 -100
- zenml/zen_server/zen_server_api.py +4 -2
- zenml/zen_stores/migrations/versions/0.65.0_release.py +23 -0
- zenml/zen_stores/migrations/versions/0.66.0_release.py +23 -0
- zenml/zen_stores/migrations/versions/bf2120261b5a_add_configured_model_version_id.py +74 -0
- zenml/zen_stores/rest_zen_store.py +4 -21
- zenml/zen_stores/schemas/constants.py +16 -0
- zenml/zen_stores/schemas/model_schemas.py +9 -3
- zenml/zen_stores/schemas/pipeline_run_schemas.py +22 -8
- zenml/zen_stores/schemas/step_run_schemas.py +23 -12
- zenml/zen_stores/sql_zen_store.py +312 -300
- zenml/zen_stores/zen_store_interface.py +0 -16
- {zenml_nightly-0.64.0.dev20240811.dist-info → zenml_nightly-0.66.0.dev20240910.dist-info}/METADATA +10 -12
- {zenml_nightly-0.64.0.dev20240811.dist-info → zenml_nightly-0.66.0.dev20240910.dist-info}/RECORD +249 -217
- zenml/models/v2/misc/full_stack.py +0 -129
- zenml/new/pipelines/model_utils.py +0 -72
- zenml/zen_server/dashboard/assets/AlertDialogDropdownItem-ErO9aOgK.js +0 -1
- zenml/zen_server/dashboard/assets/AwarenessChannel-CLXo5rKM.js +0 -1
- zenml/zen_server/dashboard/assets/CollapsibleCard-BaUPiVg0.js +0 -1
- zenml/zen_server/dashboard/assets/Commands-JrcZK-3j.js +0 -1
- zenml/zen_server/dashboard/assets/CopyButton-Dbo52T1K.js +0 -2
- zenml/zen_server/dashboard/assets/EditSecretDialog-Bd7mFLS4.js +0 -1
- zenml/zen_server/dashboard/assets/ExecutionStatus-jH4OrWBq.js +0 -1
- zenml/zen_server/dashboard/assets/Infobox-BQ0aty32.js +0 -1
- zenml/zen_server/dashboard/assets/ProviderRadio-BBqkIuTd.js +0 -1
- zenml/zen_server/dashboard/assets/RadioItem-xLhXoiFV.js +0 -1
- zenml/zen_server/dashboard/assets/SearchField-C9R0mdaX.js +0 -1
- zenml/zen_server/dashboard/assets/SetPassword-52sNxNiO.js +0 -1
- zenml/zen_server/dashboard/assets/SuccessStep-DlkItqYG.js +0 -1
- zenml/zen_server/dashboard/assets/aws-0_3UsPif.js +0 -1
- zenml/zen_server/dashboard/assets/database-cXYNX9tt.js +0 -1
- zenml/zen_server/dashboard/assets/file-text-B9JibxTs.js +0 -1
- zenml/zen_server/dashboard/assets/index-DhIZtpxB.js +0 -55
- zenml/zen_server/dashboard/assets/page-7-v2OBm-.js +0 -1
- zenml/zen_server/dashboard/assets/page-B3ozwdD1.js +0 -1
- zenml/zen_server/dashboard/assets/page-BkjAUyTA.js +0 -1
- zenml/zen_server/dashboard/assets/page-BnacgBiy.js +0 -1
- zenml/zen_server/dashboard/assets/page-BxF_KMQ3.js +0 -2
- zenml/zen_server/dashboard/assets/page-C4POHC0K.js +0 -1
- zenml/zen_server/dashboard/assets/page-C9kudd44.js +0 -9
- zenml/zen_server/dashboard/assets/page-CA1j3GpJ.js +0 -1
- zenml/zen_server/dashboard/assets/page-CCY6yfmu.js +0 -1
- zenml/zen_server/dashboard/assets/page-CgTe7Bme.js +0 -1
- zenml/zen_server/dashboard/assets/page-Cgn-6v2Y.js +0 -1
- zenml/zen_server/dashboard/assets/page-CxQmQqDw.js +0 -1
- zenml/zen_server/dashboard/assets/page-D2Goey3H.js +0 -1
- zenml/zen_server/dashboard/assets/page-DTysUGOy.js +0 -1
- zenml/zen_server/dashboard/assets/page-D_EXUFJb.js +0 -1
- zenml/zen_server/dashboard/assets/page-Db15QzsM.js +0 -1
- zenml/zen_server/dashboard/assets/page-OFKSPyN7.js +0 -1
- zenml/zen_server/dashboard/assets/page-T2BtjwPl.js +0 -1
- zenml/zen_server/dashboard/assets/page-TXe1Eo3Z.js +0 -1
- zenml/zen_server/dashboard/assets/play-circle-XSkLR12B.js +0 -1
- zenml/zen_server/dashboard/assets/sharedSchema-BoYx_B_L.js +0 -14
- zenml/zen_server/dashboard/assets/stack-detail-query-B-US_-wa.js +0 -1
- zenml/zen_server/dashboard/assets/terminal-grtjrIEJ.js +0 -1
- {zenml_nightly-0.64.0.dev20240811.dist-info → zenml_nightly-0.66.0.dev20240910.dist-info}/LICENSE +0 -0
- {zenml_nightly-0.64.0.dev20240811.dist-info → zenml_nightly-0.66.0.dev20240910.dist-info}/WHEEL +0 -0
- {zenml_nightly-0.64.0.dev20240811.dist-info → zenml_nightly-0.66.0.dev20240910.dist-info}/entry_points.txt +0 -0
@@ -20,8 +20,8 @@ ZenML is an open-source MLOps framework designed to help you create robust, main
|
|
20
20
|
To install the ZenML chart directly from Amazon ECR, use the following command:
|
21
21
|
|
22
22
|
```bash
|
23
|
-
# example command for version 0.
|
24
|
-
helm install my-zenml oci://public.ecr.aws/zenml/zenml --version 0.
|
23
|
+
# example command for version 0.66.0
|
24
|
+
helm install my-zenml oci://public.ecr.aws/zenml/zenml --version 0.66.0
|
25
25
|
```
|
26
26
|
|
27
27
|
Note: Ensure you have OCI support enabled in your Helm client and that you are authenticated with Amazon ECR.
|
@@ -30,16 +30,14 @@ from zenml.constants import (
|
|
30
30
|
from zenml.models import (
|
31
31
|
Page,
|
32
32
|
ServiceConnectorFilter,
|
33
|
+
ServiceConnectorInfo,
|
33
34
|
ServiceConnectorRequest,
|
35
|
+
ServiceConnectorResourcesInfo,
|
34
36
|
ServiceConnectorResourcesModel,
|
35
37
|
ServiceConnectorResponse,
|
36
38
|
ServiceConnectorTypeModel,
|
37
39
|
ServiceConnectorUpdate,
|
38
40
|
)
|
39
|
-
from zenml.models.v2.misc.full_stack import (
|
40
|
-
ServiceConnectorInfo,
|
41
|
-
ServiceConnectorResourcesInfo,
|
42
|
-
)
|
43
41
|
from zenml.service_connectors.service_connector_utils import (
|
44
42
|
get_resources_options_from_resource_model_for_full_stack,
|
45
43
|
)
|
@@ -22,7 +22,6 @@ from zenml.constants import (
|
|
22
22
|
API,
|
23
23
|
ARTIFACTS,
|
24
24
|
CODE_REPOSITORIES,
|
25
|
-
FULL_STACK,
|
26
25
|
GET_OR_CREATE,
|
27
26
|
MODEL_VERSIONS,
|
28
27
|
MODELS,
|
@@ -53,7 +52,6 @@ from zenml.models import (
|
|
53
52
|
ComponentFilter,
|
54
53
|
ComponentRequest,
|
55
54
|
ComponentResponse,
|
56
|
-
FullStackRequest,
|
57
55
|
ModelRequest,
|
58
56
|
ModelResponse,
|
59
57
|
ModelVersionArtifactRequest,
|
@@ -113,7 +111,6 @@ from zenml.zen_server.rbac.endpoint_utils import (
|
|
113
111
|
)
|
114
112
|
from zenml.zen_server.rbac.models import Action, ResourceType
|
115
113
|
from zenml.zen_server.rbac.utils import (
|
116
|
-
batch_verify_permissions_for_models,
|
117
114
|
get_allowed_resource_ids,
|
118
115
|
verify_permission,
|
119
116
|
verify_permission_for_model,
|
@@ -315,62 +312,13 @@ def list_workspace_stacks(
|
|
315
312
|
def create_stack(
|
316
313
|
workspace_name_or_id: Union[str, UUID],
|
317
314
|
stack: StackRequest,
|
318
|
-
_: AuthContext = Security(authorize),
|
319
|
-
) -> StackResponse:
|
320
|
-
"""Creates a stack for a particular workspace.
|
321
|
-
|
322
|
-
Args:
|
323
|
-
workspace_name_or_id: Name or ID of the workspace.
|
324
|
-
stack: Stack to register.
|
325
|
-
|
326
|
-
Returns:
|
327
|
-
The created stack.
|
328
|
-
|
329
|
-
Raises:
|
330
|
-
IllegalOperationError: If the workspace specified in the stack
|
331
|
-
does not match the current workspace.
|
332
|
-
"""
|
333
|
-
workspace = zen_store().get_workspace(workspace_name_or_id)
|
334
|
-
|
335
|
-
if stack.workspace != workspace.id:
|
336
|
-
raise IllegalOperationError(
|
337
|
-
"Creating stacks outside of the workspace scope "
|
338
|
-
f"of this endpoint `{workspace_name_or_id}` is "
|
339
|
-
f"not supported."
|
340
|
-
)
|
341
|
-
|
342
|
-
if stack.components:
|
343
|
-
components = [
|
344
|
-
zen_store().get_stack_component(id)
|
345
|
-
for ids in stack.components.values()
|
346
|
-
for id in ids
|
347
|
-
]
|
348
|
-
|
349
|
-
batch_verify_permissions_for_models(components, action=Action.READ)
|
350
|
-
|
351
|
-
return verify_permissions_and_create_entity(
|
352
|
-
request_model=stack,
|
353
|
-
resource_type=ResourceType.STACK,
|
354
|
-
create_method=zen_store().create_stack,
|
355
|
-
)
|
356
|
-
|
357
|
-
|
358
|
-
@router.post(
|
359
|
-
WORKSPACES + "/{workspace_name_or_id}" + FULL_STACK,
|
360
|
-
response_model=StackResponse,
|
361
|
-
responses={401: error_response, 409: error_response, 422: error_response},
|
362
|
-
)
|
363
|
-
@handle_exceptions
|
364
|
-
def create_full_stack(
|
365
|
-
workspace_name_or_id: Union[str, UUID],
|
366
|
-
full_stack: FullStackRequest,
|
367
315
|
auth_context: AuthContext = Security(authorize),
|
368
316
|
) -> StackResponse:
|
369
317
|
"""Creates a stack for a particular workspace.
|
370
318
|
|
371
319
|
Args:
|
372
320
|
workspace_name_or_id: Name or ID of the workspace.
|
373
|
-
|
321
|
+
stack: Stack to register.
|
374
322
|
auth_context: Authentication context.
|
375
323
|
|
376
324
|
Returns:
|
@@ -378,8 +326,9 @@ def create_full_stack(
|
|
378
326
|
"""
|
379
327
|
workspace = zen_store().get_workspace(workspace_name_or_id)
|
380
328
|
|
329
|
+
# Check the service connector creation
|
381
330
|
is_connector_create_needed = False
|
382
|
-
for connector_id_or_info in
|
331
|
+
for connector_id_or_info in stack.service_connectors:
|
383
332
|
if isinstance(connector_id_or_info, UUID):
|
384
333
|
service_connector = zen_store().get_service_connector(
|
385
334
|
connector_id_or_info, hydrate=False
|
@@ -389,32 +338,37 @@ def create_full_stack(
|
|
389
338
|
)
|
390
339
|
else:
|
391
340
|
is_connector_create_needed = True
|
341
|
+
|
342
|
+
# Check the component creation
|
392
343
|
if is_connector_create_needed:
|
393
344
|
verify_permission(
|
394
345
|
resource_type=ResourceType.SERVICE_CONNECTOR, action=Action.CREATE
|
395
346
|
)
|
396
|
-
|
397
347
|
is_component_create_needed = False
|
398
|
-
for
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
348
|
+
for components in stack.components.values():
|
349
|
+
for component_id_or_info in components:
|
350
|
+
if isinstance(component_id_or_info, UUID):
|
351
|
+
component = zen_store().get_stack_component(
|
352
|
+
component_id_or_info, hydrate=False
|
353
|
+
)
|
354
|
+
verify_permission_for_model(
|
355
|
+
model=component, action=Action.READ
|
356
|
+
)
|
357
|
+
else:
|
358
|
+
is_component_create_needed = True
|
406
359
|
if is_component_create_needed:
|
407
360
|
verify_permission(
|
408
361
|
resource_type=ResourceType.STACK_COMPONENT,
|
409
362
|
action=Action.CREATE,
|
410
363
|
)
|
411
364
|
|
365
|
+
# Check the stack creation
|
412
366
|
verify_permission(resource_type=ResourceType.STACK, action=Action.CREATE)
|
413
367
|
|
414
|
-
|
415
|
-
|
368
|
+
stack.user = auth_context.user.id
|
369
|
+
stack.workspace = workspace.id
|
416
370
|
|
417
|
-
return zen_store().
|
371
|
+
return zen_store().create_stack(stack)
|
418
372
|
|
419
373
|
|
420
374
|
@router.get(
|
@@ -0,0 +1,120 @@
|
|
1
|
+
# Copyright (c) ZenML GmbH 2024. All Rights Reserved.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at:
|
6
|
+
#
|
7
|
+
# https://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
12
|
+
# or implied. See the License for the specific language governing
|
13
|
+
# permissions and limitations under the License.
|
14
|
+
"""Secure headers for the ZenML Server."""
|
15
|
+
|
16
|
+
from typing import Optional
|
17
|
+
|
18
|
+
import secure
|
19
|
+
|
20
|
+
from zenml.zen_server.utils import server_config
|
21
|
+
|
22
|
+
_secure_headers: Optional[secure.Secure] = None
|
23
|
+
|
24
|
+
|
25
|
+
def secure_headers() -> secure.Secure:
|
26
|
+
"""Return the secure headers component.
|
27
|
+
|
28
|
+
Returns:
|
29
|
+
The secure headers component.
|
30
|
+
|
31
|
+
Raises:
|
32
|
+
RuntimeError: If the secure headers component is not initialized.
|
33
|
+
"""
|
34
|
+
global _secure_headers
|
35
|
+
if _secure_headers is None:
|
36
|
+
raise RuntimeError("Secure headers component not initialized")
|
37
|
+
return _secure_headers
|
38
|
+
|
39
|
+
|
40
|
+
def initialize_secure_headers() -> None:
|
41
|
+
"""Initialize the secure headers component."""
|
42
|
+
global _secure_headers
|
43
|
+
|
44
|
+
config = server_config()
|
45
|
+
|
46
|
+
# For each of the secure headers supported by the `secure` library, we
|
47
|
+
# check if the corresponding configuration is set in the server
|
48
|
+
# configuration:
|
49
|
+
#
|
50
|
+
# - if set to `True`, we use the default value for the header
|
51
|
+
# - if set to a string, we use the string as the value for the header
|
52
|
+
# - if set to `False`, we don't set the header
|
53
|
+
|
54
|
+
server: Optional[secure.Server] = None
|
55
|
+
if config.secure_headers_server:
|
56
|
+
server = secure.Server()
|
57
|
+
if isinstance(config.secure_headers_server, str):
|
58
|
+
server.set(config.secure_headers_server)
|
59
|
+
else:
|
60
|
+
server.set(str(config.deployment_id))
|
61
|
+
|
62
|
+
hsts: Optional[secure.StrictTransportSecurity] = None
|
63
|
+
if config.secure_headers_hsts:
|
64
|
+
hsts = secure.StrictTransportSecurity()
|
65
|
+
if isinstance(config.secure_headers_hsts, str):
|
66
|
+
hsts.set(config.secure_headers_hsts)
|
67
|
+
|
68
|
+
xfo: Optional[secure.XFrameOptions] = None
|
69
|
+
if config.secure_headers_xfo:
|
70
|
+
xfo = secure.XFrameOptions()
|
71
|
+
if isinstance(config.secure_headers_xfo, str):
|
72
|
+
xfo.set(config.secure_headers_xfo)
|
73
|
+
|
74
|
+
xxp: Optional[secure.XXSSProtection] = None
|
75
|
+
if config.secure_headers_xxp:
|
76
|
+
xxp = secure.XXSSProtection()
|
77
|
+
if isinstance(config.secure_headers_xxp, str):
|
78
|
+
xxp.set(config.secure_headers_xxp)
|
79
|
+
|
80
|
+
csp: Optional[secure.ContentSecurityPolicy] = None
|
81
|
+
if config.secure_headers_csp:
|
82
|
+
csp = secure.ContentSecurityPolicy()
|
83
|
+
if isinstance(config.secure_headers_csp, str):
|
84
|
+
csp.set(config.secure_headers_csp)
|
85
|
+
|
86
|
+
content: Optional[secure.XContentTypeOptions] = None
|
87
|
+
if config.secure_headers_content:
|
88
|
+
content = secure.XContentTypeOptions()
|
89
|
+
if isinstance(config.secure_headers_content, str):
|
90
|
+
content.set(config.secure_headers_content)
|
91
|
+
|
92
|
+
referrer: Optional[secure.ReferrerPolicy] = None
|
93
|
+
if config.secure_headers_referrer:
|
94
|
+
referrer = secure.ReferrerPolicy()
|
95
|
+
if isinstance(config.secure_headers_referrer, str):
|
96
|
+
referrer.set(config.secure_headers_referrer)
|
97
|
+
|
98
|
+
cache: Optional[secure.CacheControl] = None
|
99
|
+
if config.secure_headers_cache:
|
100
|
+
cache = secure.CacheControl()
|
101
|
+
if isinstance(config.secure_headers_cache, str):
|
102
|
+
cache.set(config.secure_headers_cache)
|
103
|
+
|
104
|
+
permissions: Optional[secure.PermissionsPolicy] = None
|
105
|
+
if config.secure_headers_permissions:
|
106
|
+
permissions = secure.PermissionsPolicy()
|
107
|
+
if isinstance(config.secure_headers_permissions, str):
|
108
|
+
permissions.value = config.secure_headers_permissions
|
109
|
+
|
110
|
+
_secure_headers = secure.Secure(
|
111
|
+
server=server,
|
112
|
+
hsts=hsts,
|
113
|
+
xfo=xfo,
|
114
|
+
xxp=xxp,
|
115
|
+
csp=csp,
|
116
|
+
content=content,
|
117
|
+
referrer=referrer,
|
118
|
+
cache=cache,
|
119
|
+
permissions=permissions,
|
120
|
+
)
|
@@ -19,7 +19,6 @@ from zenml.entrypoints.base_entrypoint_configuration import (
|
|
19
19
|
)
|
20
20
|
from zenml.new.pipelines.run_utils import (
|
21
21
|
deploy_pipeline,
|
22
|
-
prepare_model_versions,
|
23
22
|
)
|
24
23
|
|
25
24
|
|
@@ -37,5 +36,4 @@ class RunnerEntrypointConfiguration(BaseEntrypointConfiguration):
|
|
37
36
|
stack = Client().active_stack
|
38
37
|
assert deployment.stack and stack.id == deployment.stack.id
|
39
38
|
|
40
|
-
prepare_model_versions(deployment=deployment)
|
41
39
|
deploy_pipeline(deployment=deployment, stack=stack)
|
@@ -474,6 +474,7 @@ def deployment_request_from_template(
|
|
474
474
|
build=deployment.build.id,
|
475
475
|
schedule=None,
|
476
476
|
code_reference=code_reference_request,
|
477
|
+
code_path=deployment.code_path,
|
477
478
|
template=template.id,
|
478
479
|
pipeline_version_hash=deployment.pipeline_version_hash,
|
479
480
|
pipeline_spec=deployment.pipeline_spec,
|
zenml/zen_server/utils.py
CHANGED
@@ -29,7 +29,6 @@ from typing import (
|
|
29
29
|
)
|
30
30
|
from urllib.parse import urlparse
|
31
31
|
|
32
|
-
import secure
|
33
32
|
from pydantic import BaseModel, ValidationError
|
34
33
|
|
35
34
|
from zenml.config.global_config import GlobalConfiguration
|
@@ -68,7 +67,6 @@ _rbac: Optional[RBACInterface] = None
|
|
68
67
|
_feature_gate: Optional[FeatureGateInterface] = None
|
69
68
|
_workload_manager: Optional[WorkloadManagerInterface] = None
|
70
69
|
_plugin_flavor_registry: Optional[PluginFlavorRegistry] = None
|
71
|
-
_secure_headers: Optional[secure.Secure] = None
|
72
70
|
|
73
71
|
|
74
72
|
def zen_store() -> "SqlZenStore":
|
@@ -224,104 +222,6 @@ def initialize_zen_store() -> None:
|
|
224
222
|
_zen_store = zen_store_
|
225
223
|
|
226
224
|
|
227
|
-
def secure_headers() -> secure.Secure:
|
228
|
-
"""Return the secure headers component.
|
229
|
-
|
230
|
-
Returns:
|
231
|
-
The secure headers component.
|
232
|
-
|
233
|
-
Raises:
|
234
|
-
RuntimeError: If the secure headers component is not initialized.
|
235
|
-
"""
|
236
|
-
global _secure_headers
|
237
|
-
if _secure_headers is None:
|
238
|
-
raise RuntimeError("Secure headers component not initialized")
|
239
|
-
return _secure_headers
|
240
|
-
|
241
|
-
|
242
|
-
def initialize_secure_headers() -> None:
|
243
|
-
"""Initialize the secure headers component."""
|
244
|
-
global _secure_headers
|
245
|
-
|
246
|
-
config = server_config()
|
247
|
-
|
248
|
-
# For each of the secure headers supported by the `secure` library, we
|
249
|
-
# check if the corresponding configuration is set in the server
|
250
|
-
# configuration:
|
251
|
-
#
|
252
|
-
# - if set to `True`, we use the default value for the header
|
253
|
-
# - if set to a string, we use the string as the value for the header
|
254
|
-
# - if set to `False`, we don't set the header
|
255
|
-
|
256
|
-
server: Optional[secure.Server] = None
|
257
|
-
if config.secure_headers_server:
|
258
|
-
server = secure.Server()
|
259
|
-
if isinstance(config.secure_headers_server, str):
|
260
|
-
server.set(config.secure_headers_server)
|
261
|
-
else:
|
262
|
-
server.set(str(config.deployment_id))
|
263
|
-
|
264
|
-
hsts: Optional[secure.StrictTransportSecurity] = None
|
265
|
-
if config.secure_headers_hsts:
|
266
|
-
hsts = secure.StrictTransportSecurity()
|
267
|
-
if isinstance(config.secure_headers_hsts, str):
|
268
|
-
hsts.set(config.secure_headers_hsts)
|
269
|
-
|
270
|
-
xfo: Optional[secure.XFrameOptions] = None
|
271
|
-
if config.secure_headers_xfo:
|
272
|
-
xfo = secure.XFrameOptions()
|
273
|
-
if isinstance(config.secure_headers_xfo, str):
|
274
|
-
xfo.set(config.secure_headers_xfo)
|
275
|
-
|
276
|
-
xxp: Optional[secure.XXSSProtection] = None
|
277
|
-
if config.secure_headers_xxp:
|
278
|
-
xxp = secure.XXSSProtection()
|
279
|
-
if isinstance(config.secure_headers_xxp, str):
|
280
|
-
xxp.set(config.secure_headers_xxp)
|
281
|
-
|
282
|
-
csp: Optional[secure.ContentSecurityPolicy] = None
|
283
|
-
if config.secure_headers_csp:
|
284
|
-
csp = secure.ContentSecurityPolicy()
|
285
|
-
if isinstance(config.secure_headers_csp, str):
|
286
|
-
csp.set(config.secure_headers_csp)
|
287
|
-
|
288
|
-
content: Optional[secure.XContentTypeOptions] = None
|
289
|
-
if config.secure_headers_content:
|
290
|
-
content = secure.XContentTypeOptions()
|
291
|
-
if isinstance(config.secure_headers_content, str):
|
292
|
-
content.set(config.secure_headers_content)
|
293
|
-
|
294
|
-
referrer: Optional[secure.ReferrerPolicy] = None
|
295
|
-
if config.secure_headers_referrer:
|
296
|
-
referrer = secure.ReferrerPolicy()
|
297
|
-
if isinstance(config.secure_headers_referrer, str):
|
298
|
-
referrer.set(config.secure_headers_referrer)
|
299
|
-
|
300
|
-
cache: Optional[secure.CacheControl] = None
|
301
|
-
if config.secure_headers_cache:
|
302
|
-
cache = secure.CacheControl()
|
303
|
-
if isinstance(config.secure_headers_cache, str):
|
304
|
-
cache.set(config.secure_headers_cache)
|
305
|
-
|
306
|
-
permissions: Optional[secure.PermissionsPolicy] = None
|
307
|
-
if config.secure_headers_permissions:
|
308
|
-
permissions = secure.PermissionsPolicy()
|
309
|
-
if isinstance(config.secure_headers_permissions, str):
|
310
|
-
permissions.value = config.secure_headers_permissions
|
311
|
-
|
312
|
-
_secure_headers = secure.Secure(
|
313
|
-
server=server,
|
314
|
-
hsts=hsts,
|
315
|
-
xfo=xfo,
|
316
|
-
xxp=xxp,
|
317
|
-
csp=csp,
|
318
|
-
content=content,
|
319
|
-
referrer=referrer,
|
320
|
-
cache=cache,
|
321
|
-
permissions=permissions,
|
322
|
-
)
|
323
|
-
|
324
|
-
|
325
225
|
_server_config: Optional[ServerConfiguration] = None
|
326
226
|
|
327
227
|
|
@@ -78,15 +78,17 @@ from zenml.zen_server.routers import (
|
|
78
78
|
webhook_endpoints,
|
79
79
|
workspaces_endpoints,
|
80
80
|
)
|
81
|
+
from zenml.zen_server.secure_headers import (
|
82
|
+
initialize_secure_headers,
|
83
|
+
secure_headers,
|
84
|
+
)
|
81
85
|
from zenml.zen_server.utils import (
|
82
86
|
initialize_feature_gate,
|
83
87
|
initialize_plugins,
|
84
88
|
initialize_rbac,
|
85
|
-
initialize_secure_headers,
|
86
89
|
initialize_workload_manager,
|
87
90
|
initialize_zen_store,
|
88
91
|
is_user_request,
|
89
|
-
secure_headers,
|
90
92
|
server_config,
|
91
93
|
zen_store,
|
92
94
|
)
|
@@ -0,0 +1,23 @@
|
|
1
|
+
"""Release [0.65.0].
|
2
|
+
|
3
|
+
Revision ID: 0.65.0
|
4
|
+
Revises: bf2120261b5a
|
5
|
+
Create Date: 2024-08-28 15:42:13.858104
|
6
|
+
|
7
|
+
"""
|
8
|
+
|
9
|
+
# revision identifiers, used by Alembic.
|
10
|
+
revision = "0.65.0"
|
11
|
+
down_revision = "bf2120261b5a"
|
12
|
+
branch_labels = None
|
13
|
+
depends_on = None
|
14
|
+
|
15
|
+
|
16
|
+
def upgrade() -> None:
|
17
|
+
"""Upgrade database schema and/or data, creating a new revision."""
|
18
|
+
pass
|
19
|
+
|
20
|
+
|
21
|
+
def downgrade() -> None:
|
22
|
+
"""Downgrade database schema and/or data back to the previous revision."""
|
23
|
+
pass
|
@@ -0,0 +1,23 @@
|
|
1
|
+
"""Release [0.66.0].
|
2
|
+
|
3
|
+
Revision ID: 0.66.0
|
4
|
+
Revises: 0.65.0
|
5
|
+
Create Date: 2024-09-09 14:12:13.152805
|
6
|
+
|
7
|
+
"""
|
8
|
+
|
9
|
+
# revision identifiers, used by Alembic.
|
10
|
+
revision = "0.66.0"
|
11
|
+
down_revision = "0.65.0"
|
12
|
+
branch_labels = None
|
13
|
+
depends_on = None
|
14
|
+
|
15
|
+
|
16
|
+
def upgrade() -> None:
|
17
|
+
"""Upgrade database schema and/or data, creating a new revision."""
|
18
|
+
pass
|
19
|
+
|
20
|
+
|
21
|
+
def downgrade() -> None:
|
22
|
+
"""Downgrade database schema and/or data back to the previous revision."""
|
23
|
+
pass
|
@@ -0,0 +1,74 @@
|
|
1
|
+
"""add model_version_id [bf2120261b5a].
|
2
|
+
|
3
|
+
Revision ID: bf2120261b5a
|
4
|
+
Revises: 0.64.0
|
5
|
+
Create Date: 2024-08-07 11:31:00.661089
|
6
|
+
|
7
|
+
"""
|
8
|
+
|
9
|
+
import sqlalchemy as sa
|
10
|
+
import sqlmodel
|
11
|
+
from alembic import op
|
12
|
+
|
13
|
+
# revision identifiers, used by Alembic.
|
14
|
+
revision = "bf2120261b5a"
|
15
|
+
down_revision = "0.64.0"
|
16
|
+
branch_labels = None
|
17
|
+
depends_on = None
|
18
|
+
|
19
|
+
|
20
|
+
def upgrade() -> None:
|
21
|
+
"""Upgrade database schema and/or data, creating a new revision."""
|
22
|
+
# ### commands auto generated by Alembic - please adjust! ###
|
23
|
+
with op.batch_alter_table("pipeline_run", schema=None) as batch_op:
|
24
|
+
batch_op.add_column(
|
25
|
+
sa.Column(
|
26
|
+
"model_version_id",
|
27
|
+
sqlmodel.sql.sqltypes.GUID(),
|
28
|
+
nullable=True,
|
29
|
+
)
|
30
|
+
)
|
31
|
+
batch_op.create_foreign_key(
|
32
|
+
"fk_pipeline_run_model_version_id_model_version",
|
33
|
+
"model_version",
|
34
|
+
["model_version_id"],
|
35
|
+
["id"],
|
36
|
+
ondelete="SET NULL",
|
37
|
+
)
|
38
|
+
|
39
|
+
with op.batch_alter_table("step_run", schema=None) as batch_op:
|
40
|
+
batch_op.add_column(
|
41
|
+
sa.Column(
|
42
|
+
"model_version_id",
|
43
|
+
sqlmodel.sql.sqltypes.GUID(),
|
44
|
+
nullable=True,
|
45
|
+
)
|
46
|
+
)
|
47
|
+
batch_op.create_foreign_key(
|
48
|
+
"fk_step_run_model_version_id_model_version",
|
49
|
+
"model_version",
|
50
|
+
["model_version_id"],
|
51
|
+
["id"],
|
52
|
+
ondelete="SET NULL",
|
53
|
+
)
|
54
|
+
|
55
|
+
# ### end Alembic commands ###
|
56
|
+
|
57
|
+
|
58
|
+
def downgrade() -> None:
|
59
|
+
"""Downgrade database schema and/or data back to the previous revision."""
|
60
|
+
# ### commands auto generated by Alembic - please adjust! ###
|
61
|
+
with op.batch_alter_table("step_run", schema=None) as batch_op:
|
62
|
+
batch_op.drop_constraint(
|
63
|
+
"fk_step_run_model_version_id_model_version", type_="foreignkey"
|
64
|
+
)
|
65
|
+
batch_op.drop_column("model_version_id")
|
66
|
+
|
67
|
+
with op.batch_alter_table("pipeline_run", schema=None) as batch_op:
|
68
|
+
batch_op.drop_constraint(
|
69
|
+
"fk_pipeline_run_model_version_id_model_version",
|
70
|
+
type_="foreignkey",
|
71
|
+
)
|
72
|
+
batch_op.drop_column("model_version_id")
|
73
|
+
|
74
|
+
# ### end Alembic commands ###
|
@@ -67,7 +67,6 @@ from zenml.constants import (
|
|
67
67
|
ENV_ZENML_DISABLE_CLIENT_SERVER_MISMATCH_WARNING,
|
68
68
|
EVENT_SOURCES,
|
69
69
|
FLAVORS,
|
70
|
-
FULL_STACK,
|
71
70
|
GET_OR_CREATE,
|
72
71
|
INFO,
|
73
72
|
LOGIN,
|
@@ -156,7 +155,6 @@ from zenml.models import (
|
|
156
155
|
FlavorRequest,
|
157
156
|
FlavorResponse,
|
158
157
|
FlavorUpdate,
|
159
|
-
FullStackRequest,
|
160
158
|
LogsResponse,
|
161
159
|
ModelFilter,
|
162
160
|
ModelRequest,
|
@@ -2832,27 +2830,12 @@ class RestZenStore(BaseZenStore):
|
|
2832
2830
|
Returns:
|
2833
2831
|
The registered stack.
|
2834
2832
|
"""
|
2835
|
-
|
2836
|
-
resource=stack,
|
2837
|
-
route=STACKS,
|
2838
|
-
response_model=StackResponse,
|
2839
|
-
)
|
2840
|
-
|
2841
|
-
def create_full_stack(self, full_stack: FullStackRequest) -> StackResponse:
|
2842
|
-
"""Register a full-stack.
|
2843
|
-
|
2844
|
-
Args:
|
2845
|
-
full_stack: The full stack configuration.
|
2846
|
-
|
2847
|
-
Returns:
|
2848
|
-
The registered stack.
|
2849
|
-
"""
|
2850
|
-
assert full_stack.workspace is not None
|
2833
|
+
assert stack.workspace is not None
|
2851
2834
|
|
2852
2835
|
return self._create_resource(
|
2853
|
-
resource=
|
2836
|
+
resource=stack,
|
2854
2837
|
response_model=StackResponse,
|
2855
|
-
route=f"{WORKSPACES}/{str(
|
2838
|
+
route=f"{WORKSPACES}/{str(stack.workspace)}{STACKS}",
|
2856
2839
|
)
|
2857
2840
|
|
2858
2841
|
def get_stack(self, stack_id: UUID, hydrate: bool = True) -> StackResponse:
|
@@ -4108,7 +4091,7 @@ class RestZenStore(BaseZenStore):
|
|
4108
4091
|
f"{self.config.url}` should solve this issue. "
|
4109
4092
|
"If you're seeing this error from an automated workload, "
|
4110
4093
|
"you should probably use a service account to start that "
|
4111
|
-
"workload to prevent this error
|
4094
|
+
"workload to prevent this error"
|
4112
4095
|
)
|
4113
4096
|
|
4114
4097
|
@staticmethod
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# Copyright (c) ZenML GmbH 2024. All Rights Reserved.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at:
|
6
|
+
#
|
7
|
+
# https://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
12
|
+
# or implied. See the License for the specific language governing
|
13
|
+
# permissions and limitations under the License.
|
14
|
+
"""Constant values needed by schema objects."""
|
15
|
+
|
16
|
+
MODEL_VERSION_TABLENAME = "model_version"
|