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
@@ -3,7 +3,7 @@
|
|
3
3
|
import copy
|
4
4
|
import hashlib
|
5
5
|
import sys
|
6
|
-
from typing import Any, Dict, List, Optional
|
6
|
+
from typing import Any, Dict, List, Optional
|
7
7
|
from uuid import UUID
|
8
8
|
|
9
9
|
from fastapi import BackgroundTasks
|
@@ -22,11 +22,9 @@ from zenml.constants import (
|
|
22
22
|
ENV_ZENML_ACTIVE_WORKSPACE_ID,
|
23
23
|
)
|
24
24
|
from zenml.enums import ExecutionStatus, StackComponentType, StoreType
|
25
|
-
from zenml.integrations.utils import get_integration_for_module
|
26
25
|
from zenml.logger import get_logger
|
27
26
|
from zenml.models import (
|
28
27
|
CodeReferenceRequest,
|
29
|
-
ComponentResponse,
|
30
28
|
FlavorFilter,
|
31
29
|
PipelineDeploymentRequest,
|
32
30
|
PipelineDeploymentResponse,
|
@@ -35,15 +33,15 @@ from zenml.models import (
|
|
35
33
|
RunTemplateResponse,
|
36
34
|
StackResponse,
|
37
35
|
)
|
38
|
-
from zenml.
|
39
|
-
from zenml.
|
36
|
+
from zenml.pipelines.build_utils import compute_stack_checksum
|
37
|
+
from zenml.pipelines.run_utils import (
|
40
38
|
create_placeholder_run,
|
41
39
|
get_default_run_name,
|
42
40
|
validate_run_config_is_runnable_from_server,
|
43
41
|
validate_stack_is_runnable_from_server,
|
44
42
|
)
|
45
43
|
from zenml.stack.flavor import Flavor
|
46
|
-
from zenml.utils import dict_utils, settings_utils
|
44
|
+
from zenml.utils import dict_utils, requirements_utils, settings_utils
|
47
45
|
from zenml.zen_server.auth import AuthContext
|
48
46
|
from zenml.zen_server.template_execution.runner_entrypoint_configuration import (
|
49
47
|
RunnerEntrypointConfiguration,
|
@@ -151,8 +149,8 @@ def run_template(
|
|
151
149
|
assert placeholder_run
|
152
150
|
|
153
151
|
def _task() -> None:
|
154
|
-
pypi_requirements, apt_packages =
|
155
|
-
stack=stack
|
152
|
+
pypi_requirements, apt_packages = (
|
153
|
+
requirements_utils.get_requirements_for_stack(stack=stack)
|
156
154
|
)
|
157
155
|
|
158
156
|
if build.python_version:
|
@@ -248,7 +246,7 @@ def ensure_async_orchestrator(
|
|
248
246
|
"""
|
249
247
|
orchestrator = stack.components[StackComponentType.ORCHESTRATOR][0]
|
250
248
|
flavors = zen_store().list_flavors(
|
251
|
-
FlavorFilter(name=orchestrator.
|
249
|
+
FlavorFilter(name=orchestrator.flavor_name, type=orchestrator.type)
|
252
250
|
)
|
253
251
|
flavor = Flavor.from_model(flavors[0])
|
254
252
|
|
@@ -266,59 +264,6 @@ def ensure_async_orchestrator(
|
|
266
264
|
)
|
267
265
|
|
268
266
|
|
269
|
-
def get_requirements_for_stack(
|
270
|
-
stack: StackResponse,
|
271
|
-
) -> Tuple[List[str], List[str]]:
|
272
|
-
"""Get requirements for a stack model.
|
273
|
-
|
274
|
-
Args:
|
275
|
-
stack: The stack for which to get the requirements.
|
276
|
-
|
277
|
-
Returns:
|
278
|
-
Tuple of PyPI and APT requirements of the stack.
|
279
|
-
"""
|
280
|
-
pypi_requirements: Set[str] = set()
|
281
|
-
apt_packages: Set[str] = set()
|
282
|
-
|
283
|
-
for component_list in stack.components.values():
|
284
|
-
assert len(component_list) == 1
|
285
|
-
component = component_list[0]
|
286
|
-
(
|
287
|
-
component_pypi_requirements,
|
288
|
-
component_apt_packages,
|
289
|
-
) = get_requirements_for_component(component=component)
|
290
|
-
pypi_requirements = pypi_requirements.union(
|
291
|
-
component_pypi_requirements
|
292
|
-
)
|
293
|
-
apt_packages = apt_packages.union(component_apt_packages)
|
294
|
-
|
295
|
-
return sorted(pypi_requirements), sorted(apt_packages)
|
296
|
-
|
297
|
-
|
298
|
-
def get_requirements_for_component(
|
299
|
-
component: ComponentResponse,
|
300
|
-
) -> Tuple[List[str], List[str]]:
|
301
|
-
"""Get requirements for a component model.
|
302
|
-
|
303
|
-
Args:
|
304
|
-
component: The component for which to get the requirements.
|
305
|
-
|
306
|
-
Returns:
|
307
|
-
Tuple of PyPI and APT requirements of the component.
|
308
|
-
"""
|
309
|
-
flavors = zen_store().list_flavors(
|
310
|
-
FlavorFilter(name=component.flavor, type=component.type)
|
311
|
-
)
|
312
|
-
assert len(flavors) == 1
|
313
|
-
flavor_source = flavors[0].source
|
314
|
-
integration = get_integration_for_module(module_name=flavor_source)
|
315
|
-
|
316
|
-
if integration:
|
317
|
-
return integration.get_requirements(), integration.APT_PACKAGES
|
318
|
-
else:
|
319
|
-
return [], []
|
320
|
-
|
321
|
-
|
322
267
|
def generate_image_hash(dockerfile: str) -> str:
|
323
268
|
"""Generate a hash of the Dockerfile.
|
324
269
|
|
@@ -512,7 +457,7 @@ def get_pipeline_run_analytics_metadata(
|
|
512
457
|
own_stack = stack_creator and stack_creator.id == deployment.user.id
|
513
458
|
|
514
459
|
stack_metadata = {
|
515
|
-
component_type.value: component_list[0].
|
460
|
+
component_type.value: component_list[0].flavor_name
|
516
461
|
for component_type, component_list in stack.components.items()
|
517
462
|
}
|
518
463
|
|
zenml/zen_server/utils.py
CHANGED
@@ -39,14 +39,14 @@ from zenml.constants import (
|
|
39
39
|
INFO,
|
40
40
|
VERSION_1,
|
41
41
|
)
|
42
|
-
from zenml.enums import
|
42
|
+
from zenml.enums import StoreType
|
43
43
|
from zenml.exceptions import IllegalOperationError, OAuthError
|
44
44
|
from zenml.logger import get_logger
|
45
45
|
from zenml.plugins.plugin_flavor_registry import PluginFlavorRegistry
|
46
|
-
from zenml.zen_server.deploy.deployment import
|
47
|
-
|
48
|
-
LocalServerDeploymentConfig,
|
46
|
+
from zenml.zen_server.deploy.deployment import (
|
47
|
+
LocalServerDeployment,
|
49
48
|
)
|
49
|
+
from zenml.zen_server.deploy.exceptions import ServerDeploymentNotFoundError
|
50
50
|
from zenml.zen_server.exceptions import http_exception_from_error
|
51
51
|
from zenml.zen_server.feature_gate.feature_gate_interface import (
|
52
52
|
FeatureGateInterface,
|
@@ -237,86 +237,84 @@ def server_config() -> ServerConfiguration:
|
|
237
237
|
return _server_config
|
238
238
|
|
239
239
|
|
240
|
-
def
|
241
|
-
"""Get the active local
|
240
|
+
def get_local_server() -> Optional["LocalServerDeployment"]:
|
241
|
+
"""Get the active local server.
|
242
242
|
|
243
|
-
Call this function to retrieve the local
|
244
|
-
was last provisioned on this machine.
|
245
|
-
|
246
|
-
Args:
|
247
|
-
local: Whether to return the local active deployment or the remote one.
|
243
|
+
Call this function to retrieve the local server deployed on this machine.
|
248
244
|
|
249
245
|
Returns:
|
250
|
-
The local
|
251
|
-
|
246
|
+
The local server deployment or None, if no local server deployment was
|
247
|
+
found.
|
252
248
|
"""
|
253
|
-
from zenml.zen_server.deploy.deployer import
|
254
|
-
|
255
|
-
deployer = ServerDeployer()
|
256
|
-
if local:
|
257
|
-
servers = deployer.list_servers(provider_type=ServerProviderType.LOCAL)
|
258
|
-
if not servers:
|
259
|
-
servers = deployer.list_servers(
|
260
|
-
provider_type=ServerProviderType.DOCKER
|
261
|
-
)
|
262
|
-
else:
|
263
|
-
servers = deployer.list_servers()
|
249
|
+
from zenml.zen_server.deploy.deployer import LocalServerDeployer
|
264
250
|
|
265
|
-
|
251
|
+
deployer = LocalServerDeployer()
|
252
|
+
try:
|
253
|
+
return deployer.get_server()
|
254
|
+
except ServerDeploymentNotFoundError:
|
266
255
|
return None
|
267
256
|
|
268
|
-
for server in servers:
|
269
|
-
if server.config.provider in [
|
270
|
-
ServerProviderType.LOCAL,
|
271
|
-
ServerProviderType.DOCKER,
|
272
|
-
]:
|
273
|
-
if local:
|
274
|
-
return server
|
275
|
-
elif not local:
|
276
|
-
return server
|
277
257
|
|
278
|
-
|
258
|
+
def connected_to_local_server() -> bool:
|
259
|
+
"""Check if the client is connected to a local server.
|
279
260
|
|
261
|
+
Returns:
|
262
|
+
True if the client is connected to a local server, False otherwise.
|
263
|
+
"""
|
264
|
+
from zenml.zen_server.deploy.deployer import LocalServerDeployer
|
280
265
|
|
281
|
-
|
282
|
-
|
266
|
+
deployer = LocalServerDeployer()
|
267
|
+
return deployer.is_connected_to_server()
|
283
268
|
|
284
|
-
When multiple servers are present, the following precedence is used to
|
285
|
-
determine which server to use:
|
286
|
-
- If the client is connected to a server, that server has precedence.
|
287
|
-
- If no server is connected, a server that was deployed remotely has
|
288
|
-
precedence over a server that was deployed locally.
|
289
269
|
|
290
|
-
|
291
|
-
|
270
|
+
def show_dashboard(
|
271
|
+
local: bool = False,
|
272
|
+
ngrok_token: Optional[str] = None,
|
273
|
+
) -> None:
|
274
|
+
"""Show the ZenML dashboard.
|
275
|
+
|
276
|
+
Args:
|
277
|
+
local: Whether to show the dashboard for the local server or the
|
278
|
+
one for the active server.
|
279
|
+
ngrok_token: An ngrok auth token to use for exposing the ZenML
|
280
|
+
dashboard on a public domain. Primarily used for accessing the
|
281
|
+
dashboard in Colab.
|
292
282
|
|
293
283
|
Raises:
|
294
|
-
RuntimeError: If no server is
|
284
|
+
RuntimeError: If no server is connected.
|
295
285
|
"""
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
server =
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
286
|
+
from zenml.utils.dashboard_utils import show_dashboard
|
287
|
+
from zenml.utils.networking_utils import get_or_create_ngrok_tunnel
|
288
|
+
|
289
|
+
url: Optional[str] = None
|
290
|
+
if not local:
|
291
|
+
gc = GlobalConfiguration()
|
292
|
+
if gc.store_configuration.type == StoreType.REST:
|
293
|
+
url = gc.store_configuration.url
|
294
|
+
|
295
|
+
if not url:
|
296
|
+
# Else, check for local servers
|
297
|
+
server = get_local_server()
|
298
|
+
if server and server.status and server.status.url:
|
299
|
+
url = server.status.url
|
300
|
+
|
301
|
+
if not url:
|
302
|
+
raise RuntimeError(
|
303
|
+
"ZenML is not connected to any server right now. Please use "
|
304
|
+
"`zenml login` to connect to a server or spin up a new local server "
|
305
|
+
"via `zenml login --local`."
|
306
|
+
)
|
307
|
+
|
308
|
+
if ngrok_token:
|
309
|
+
parsed_url = urlparse(url)
|
310
|
+
|
311
|
+
ngrok_url = get_or_create_ngrok_tunnel(
|
312
|
+
ngrok_token=ngrok_token, port=parsed_url.port or 80
|
313
|
+
)
|
314
|
+
logger.debug(f"Tunneling dashboard from {url} to {ngrok_url}.")
|
315
|
+
url = ngrok_url
|
316
|
+
|
317
|
+
show_dashboard(url)
|
320
318
|
|
321
319
|
|
322
320
|
F = TypeVar("F", bound=Callable[..., Any])
|
@@ -24,7 +24,7 @@ import os
|
|
24
24
|
from asyncio.log import logger
|
25
25
|
from datetime import datetime, timedelta, timezone
|
26
26
|
from genericpath import isfile
|
27
|
-
from typing import Any, List
|
27
|
+
from typing import Any, List, Set
|
28
28
|
|
29
29
|
from anyio import to_thread
|
30
30
|
from fastapi import FastAPI, HTTPException, Request
|
@@ -32,8 +32,18 @@ from fastapi.exceptions import RequestValidationError
|
|
32
32
|
from fastapi.responses import ORJSONResponse
|
33
33
|
from fastapi.staticfiles import StaticFiles
|
34
34
|
from fastapi.templating import Jinja2Templates
|
35
|
+
from starlette.middleware.base import (
|
36
|
+
BaseHTTPMiddleware,
|
37
|
+
RequestResponseEndpoint,
|
38
|
+
)
|
35
39
|
from starlette.middleware.cors import CORSMiddleware
|
36
|
-
from starlette.responses import
|
40
|
+
from starlette.responses import (
|
41
|
+
FileResponse,
|
42
|
+
JSONResponse,
|
43
|
+
RedirectResponse,
|
44
|
+
Response,
|
45
|
+
)
|
46
|
+
from starlette.types import ASGIApp
|
37
47
|
|
38
48
|
import zenml
|
39
49
|
from zenml.analytics import source_context
|
@@ -43,6 +53,7 @@ from zenml.constants import (
|
|
43
53
|
HEALTH,
|
44
54
|
)
|
45
55
|
from zenml.enums import AuthScheme, SourceContextTypes
|
56
|
+
from zenml.models import ServerDeploymentType
|
46
57
|
from zenml.zen_server.exceptions import error_detail
|
47
58
|
from zenml.zen_server.routers import (
|
48
59
|
actions_endpoints,
|
@@ -93,10 +104,7 @@ from zenml.zen_server.utils import (
|
|
93
104
|
zen_store,
|
94
105
|
)
|
95
106
|
|
96
|
-
|
97
|
-
DASHBOARD_DIRECTORY = "dashboard_legacy"
|
98
|
-
else:
|
99
|
-
DASHBOARD_DIRECTORY = "dashboard"
|
107
|
+
DASHBOARD_DIRECTORY = "dashboard"
|
100
108
|
|
101
109
|
|
102
110
|
def relative_path(rel: str) -> str:
|
@@ -143,6 +151,79 @@ def validation_exception_handler(
|
|
143
151
|
return ORJSONResponse(error_detail(exc, ValueError), status_code=422)
|
144
152
|
|
145
153
|
|
154
|
+
class RequestBodyLimit(BaseHTTPMiddleware):
|
155
|
+
"""Limits the size of the request body."""
|
156
|
+
|
157
|
+
def __init__(self, app: ASGIApp, max_bytes: int) -> None:
|
158
|
+
"""Limits the size of the request body.
|
159
|
+
|
160
|
+
Args:
|
161
|
+
app: The FastAPI app.
|
162
|
+
max_bytes: The maximum size of the request body.
|
163
|
+
"""
|
164
|
+
super().__init__(app)
|
165
|
+
self.max_bytes = max_bytes
|
166
|
+
|
167
|
+
async def dispatch(
|
168
|
+
self, request: Request, call_next: RequestResponseEndpoint
|
169
|
+
) -> Response:
|
170
|
+
"""Limits the size of the request body.
|
171
|
+
|
172
|
+
Args:
|
173
|
+
request: The incoming request.
|
174
|
+
call_next: The next function to be called.
|
175
|
+
|
176
|
+
Returns:
|
177
|
+
The response to the request.
|
178
|
+
"""
|
179
|
+
if content_length := request.headers.get("content-length"):
|
180
|
+
if int(content_length) > self.max_bytes:
|
181
|
+
return Response(status_code=413) # Request Entity Too Large
|
182
|
+
return await call_next(request)
|
183
|
+
|
184
|
+
|
185
|
+
class RestrictFileUploadsMiddleware(BaseHTTPMiddleware):
|
186
|
+
"""Restrict file uploads to certain paths."""
|
187
|
+
|
188
|
+
def __init__(self, app: FastAPI, allowed_paths: Set[str]):
|
189
|
+
"""Restrict file uploads to certain paths.
|
190
|
+
|
191
|
+
Args:
|
192
|
+
app: The FastAPI app.
|
193
|
+
allowed_paths: The allowed paths.
|
194
|
+
"""
|
195
|
+
super().__init__(app)
|
196
|
+
self.allowed_paths = allowed_paths
|
197
|
+
|
198
|
+
async def dispatch(
|
199
|
+
self, request: Request, call_next: RequestResponseEndpoint
|
200
|
+
) -> Response:
|
201
|
+
"""Restrict file uploads to certain paths.
|
202
|
+
|
203
|
+
Args:
|
204
|
+
request: The incoming request.
|
205
|
+
call_next: The next function to be called.
|
206
|
+
|
207
|
+
Returns:
|
208
|
+
The response to the request.
|
209
|
+
"""
|
210
|
+
if request.method == "POST":
|
211
|
+
content_type = request.headers.get("content-type", "")
|
212
|
+
if (
|
213
|
+
"multipart/form-data" in content_type
|
214
|
+
and request.url.path not in self.allowed_paths
|
215
|
+
):
|
216
|
+
return JSONResponse(
|
217
|
+
status_code=403,
|
218
|
+
content={
|
219
|
+
"detail": "File uploads are not allowed on this endpoint."
|
220
|
+
},
|
221
|
+
)
|
222
|
+
return await call_next(request)
|
223
|
+
|
224
|
+
|
225
|
+
ALLOWED_FOR_FILE_UPLOAD: Set[str] = set()
|
226
|
+
|
146
227
|
app.add_middleware(
|
147
228
|
CORSMiddleware,
|
148
229
|
allow_origins=server_config().cors_allow_origins,
|
@@ -151,6 +232,13 @@ app.add_middleware(
|
|
151
232
|
allow_headers=["*"],
|
152
233
|
)
|
153
234
|
|
235
|
+
app.add_middleware(
|
236
|
+
RequestBodyLimit, max_bytes=server_config().max_request_body_size_in_bytes
|
237
|
+
)
|
238
|
+
app.add_middleware(
|
239
|
+
RestrictFileUploadsMiddleware, allowed_paths=ALLOWED_FOR_FILE_UPLOAD
|
240
|
+
)
|
241
|
+
|
154
242
|
|
155
243
|
@app.middleware("http")
|
156
244
|
async def set_secure_headers(request: Request, call_next: Any) -> Any:
|
@@ -261,17 +349,14 @@ def initialize() -> None:
|
|
261
349
|
initialize_secure_headers()
|
262
350
|
|
263
351
|
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
),
|
273
|
-
)
|
274
|
-
else:
|
352
|
+
DASHBOARD_REDIRECT_URL = None
|
353
|
+
if (
|
354
|
+
server_config().dashboard_url
|
355
|
+
and server_config().deployment_type == ServerDeploymentType.CLOUD
|
356
|
+
):
|
357
|
+
DASHBOARD_REDIRECT_URL = server_config().dashboard_url
|
358
|
+
|
359
|
+
if not DASHBOARD_REDIRECT_URL:
|
275
360
|
app.mount(
|
276
361
|
"/assets",
|
277
362
|
StaticFiles(
|
@@ -311,6 +396,9 @@ async def dashboard(request: Request) -> Any:
|
|
311
396
|
Raises:
|
312
397
|
HTTPException: If the dashboard files are not included.
|
313
398
|
"""
|
399
|
+
if DASHBOARD_REDIRECT_URL:
|
400
|
+
return RedirectResponse(url=DASHBOARD_REDIRECT_URL)
|
401
|
+
|
314
402
|
if not os.path.isfile(
|
315
403
|
os.path.join(relative_path(DASHBOARD_DIRECTORY), "index.html")
|
316
404
|
):
|
@@ -419,6 +507,8 @@ async def catch_all(request: Request, file_path: str) -> Any:
|
|
419
507
|
Returns:
|
420
508
|
The ZenML dashboard.
|
421
509
|
"""
|
510
|
+
if DASHBOARD_REDIRECT_URL:
|
511
|
+
return RedirectResponse(url=DASHBOARD_REDIRECT_URL)
|
422
512
|
# some static files need to be served directly from the root dashboard
|
423
513
|
# directory
|
424
514
|
if file_path and file_path in root_static_files:
|
@@ -24,11 +24,9 @@ from typing import (
|
|
24
24
|
Type,
|
25
25
|
Union,
|
26
26
|
)
|
27
|
-
from urllib.parse import urlparse
|
28
27
|
from uuid import UUID
|
29
28
|
|
30
29
|
from pydantic import BaseModel, ConfigDict, model_validator
|
31
|
-
from requests import ConnectionError
|
32
30
|
|
33
31
|
import zenml
|
34
32
|
from zenml.config.global_config import GlobalConfiguration
|
@@ -39,13 +37,11 @@ from zenml.constants import (
|
|
39
37
|
DEFAULT_WORKSPACE_NAME,
|
40
38
|
ENV_ZENML_DEFAULT_WORKSPACE_NAME,
|
41
39
|
IS_DEBUG_ENV,
|
42
|
-
ZENML_PRO_CONNECTION_ISSUES_SUSPENDED_PAUSED_TENANT_HINT,
|
43
40
|
)
|
44
41
|
from zenml.enums import (
|
45
42
|
SecretsStoreType,
|
46
43
|
StoreType,
|
47
44
|
)
|
48
|
-
from zenml.exceptions import AuthorizationException
|
49
45
|
from zenml.logger import get_logger
|
50
46
|
from zenml.models import (
|
51
47
|
ServerDatabaseType,
|
@@ -57,9 +53,6 @@ from zenml.models import (
|
|
57
53
|
WorkspaceResponse,
|
58
54
|
)
|
59
55
|
from zenml.utils.pydantic_utils import before_validator_handler
|
60
|
-
from zenml.zen_stores.secrets_stores.sql_secrets_store import (
|
61
|
-
SqlSecretsStoreConfiguration,
|
62
|
-
)
|
63
56
|
from zenml.zen_stores.zen_store_interface import ZenStoreInterface
|
64
57
|
|
65
58
|
logger = get_logger(__name__)
|
@@ -136,51 +129,10 @@ class BaseZenStore(
|
|
136
129
|
stack and user in the store will be skipped.
|
137
130
|
**kwargs: Additional keyword arguments to pass to the Pydantic
|
138
131
|
constructor.
|
139
|
-
|
140
|
-
Raises:
|
141
|
-
RuntimeError: If the store cannot be initialized.
|
142
|
-
AuthorizationException: If the store cannot be initialized due to
|
143
|
-
authentication errors.
|
144
132
|
"""
|
145
133
|
super().__init__(**kwargs)
|
146
134
|
|
147
|
-
|
148
|
-
self._initialize()
|
149
|
-
|
150
|
-
# Handle cases where the ZenML server is not available
|
151
|
-
except ConnectionError as e:
|
152
|
-
error_message = (
|
153
|
-
"Cannot connect to the ZenML database because the ZenML server "
|
154
|
-
f"at {self.url} is not running."
|
155
|
-
)
|
156
|
-
if urlparse(self.url).hostname in ["localhost", "127.0.0.1"]:
|
157
|
-
recommendation = (
|
158
|
-
"Please run `zenml down` and `zenml up` to restart the "
|
159
|
-
"server."
|
160
|
-
)
|
161
|
-
else:
|
162
|
-
recommendation = (
|
163
|
-
"Please run `zenml disconnect` and `zenml connect --url "
|
164
|
-
f"{self.url}` to reconnect to the server."
|
165
|
-
)
|
166
|
-
raise RuntimeError(f"{error_message}\n{recommendation}") from e
|
167
|
-
|
168
|
-
except AuthorizationException as e:
|
169
|
-
raise AuthorizationException(
|
170
|
-
f"Authorization failed for store at '{self.url}'. Please check "
|
171
|
-
f"your credentials: {str(e)}"
|
172
|
-
)
|
173
|
-
|
174
|
-
except Exception as e:
|
175
|
-
zenml_pro_extra = ""
|
176
|
-
if ".zenml.io" in self.url:
|
177
|
-
zenml_pro_extra = (
|
178
|
-
ZENML_PRO_CONNECTION_ISSUES_SUSPENDED_PAUSED_TENANT_HINT
|
179
|
-
)
|
180
|
-
raise RuntimeError(
|
181
|
-
f"Error initializing {self.type.value} store with URL "
|
182
|
-
f"'{self.url}': {str(e)}" + zenml_pro_extra
|
183
|
-
) from e
|
135
|
+
self._initialize()
|
184
136
|
|
185
137
|
if not skip_default_registrations:
|
186
138
|
logger.debug("Initializing database")
|
@@ -293,6 +245,9 @@ class BaseZenStore(
|
|
293
245
|
Returns:
|
294
246
|
The default store configuration.
|
295
247
|
"""
|
248
|
+
from zenml.zen_stores.secrets_stores.sql_secrets_store import (
|
249
|
+
SqlSecretsStoreConfiguration,
|
250
|
+
)
|
296
251
|
from zenml.zen_stores.sql_zen_store import SqlZenStoreConfiguration
|
297
252
|
|
298
253
|
config = SqlZenStoreConfiguration(
|
@@ -426,7 +381,6 @@ class BaseZenStore(
|
|
426
381
|
secrets_store_type = SecretsStoreType.NONE
|
427
382
|
if isinstance(self, SqlZenStore) and self.config.secrets_store:
|
428
383
|
secrets_store_type = self.config.secrets_store.type
|
429
|
-
use_legacy_dashboard = server_config.use_legacy_dashboard
|
430
384
|
return ServerModel(
|
431
385
|
id=GlobalConfiguration().user_id,
|
432
386
|
active=True,
|
@@ -440,7 +394,6 @@ class BaseZenStore(
|
|
440
394
|
dashboard_url=server_config.dashboard_url or "",
|
441
395
|
analytics_enabled=GlobalConfiguration().analytics_opt_in,
|
442
396
|
metadata=metadata,
|
443
|
-
use_legacy_dashboard=use_legacy_dashboard,
|
444
397
|
)
|
445
398
|
|
446
399
|
def is_local_store(self) -> bool:
|
@@ -0,0 +1,23 @@
|
|
1
|
+
"""Release [0.67.0].
|
2
|
+
|
3
|
+
Revision ID: 0.67.0
|
4
|
+
Revises: 0.66.0
|
5
|
+
Create Date: 2024-09-25 10:39:36.711715
|
6
|
+
|
7
|
+
"""
|
8
|
+
|
9
|
+
# revision identifiers, used by Alembic.
|
10
|
+
revision = "0.67.0"
|
11
|
+
down_revision = "0.66.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,23 @@
|
|
1
|
+
"""Release [0.68.0].
|
2
|
+
|
3
|
+
Revision ID: 0.68.0
|
4
|
+
Revises: 1d8f30c54477
|
5
|
+
Create Date: 2024-10-24 13:14:56.912159
|
6
|
+
|
7
|
+
"""
|
8
|
+
|
9
|
+
# revision identifiers, used by Alembic.
|
10
|
+
revision = "0.68.0"
|
11
|
+
down_revision = "1d8f30c54477"
|
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.68.1].
|
2
|
+
|
3
|
+
Revision ID: 0.68.1
|
4
|
+
Revises: 0.68.0
|
5
|
+
Create Date: 2024-10-28 10:34:17.307663
|
6
|
+
|
7
|
+
"""
|
8
|
+
|
9
|
+
# revision identifiers, used by Alembic.
|
10
|
+
revision = "0.68.1"
|
11
|
+
down_revision = "0.68.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
|