zenml-nightly 0.62.0.dev20240729__py3-none-any.whl → 0.64.0.dev20240809__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 +2 -2
- RELEASE_NOTES.md +120 -0
- zenml/VERSION +1 -1
- zenml/__init__.py +0 -4
- zenml/actions/pipeline_run/pipeline_run_action.py +19 -17
- zenml/analytics/enums.py +4 -6
- zenml/cli/__init__.py +28 -76
- zenml/cli/base.py +2 -2
- zenml/cli/pipeline.py +54 -61
- zenml/cli/stack.py +6 -8
- zenml/cli/web_login.py +8 -0
- zenml/client.py +232 -103
- zenml/config/build_configuration.py +43 -17
- zenml/config/compiler.py +14 -22
- zenml/config/docker_settings.py +80 -57
- zenml/config/pipeline_run_configuration.py +3 -0
- zenml/config/server_config.py +3 -0
- zenml/config/source.py +60 -1
- zenml/constants.py +11 -2
- zenml/entrypoints/base_entrypoint_configuration.py +53 -8
- zenml/enums.py +4 -1
- zenml/environment.py +25 -9
- zenml/image_builders/base_image_builder.py +1 -1
- zenml/image_builders/build_context.py +25 -72
- zenml/integrations/aws/orchestrators/sagemaker_orchestrator.py +13 -4
- zenml/integrations/azure/__init__.py +4 -0
- zenml/integrations/azure/flavors/__init__.py +11 -0
- zenml/integrations/azure/flavors/azureml_orchestrator_flavor.py +263 -0
- zenml/{_hub → integrations/azure/orchestrators}/__init__.py +7 -2
- zenml/integrations/azure/orchestrators/azureml_orchestrator.py +544 -0
- zenml/integrations/azure/orchestrators/azureml_orchestrator_entrypoint_config.py +86 -0
- zenml/integrations/azure/step_operators/azureml_step_operator.py +3 -0
- zenml/integrations/databricks/flavors/databricks_orchestrator_flavor.py +20 -2
- zenml/integrations/databricks/orchestrators/databricks_orchestrator.py +19 -13
- zenml/integrations/gcp/orchestrators/vertex_orchestrator.py +7 -2
- zenml/integrations/gcp/service_connectors/gcp_service_connector.py +123 -6
- zenml/integrations/kaniko/image_builders/kaniko_image_builder.py +1 -1
- zenml/integrations/mlflow/__init__.py +1 -1
- zenml/integrations/mlflow/experiment_trackers/mlflow_experiment_tracker.py +3 -1
- zenml/integrations/mlflow/flavors/mlflow_experiment_tracker_flavor.py +3 -0
- zenml/logger.py +13 -0
- zenml/models/__init__.py +26 -22
- zenml/models/v2/base/filter.py +32 -0
- zenml/models/v2/core/pipeline.py +73 -89
- zenml/models/v2/core/pipeline_build.py +15 -11
- zenml/models/v2/core/pipeline_deployment.py +72 -24
- zenml/models/v2/core/pipeline_run.py +65 -1
- zenml/models/v2/core/run_template.py +393 -0
- zenml/models/v2/core/server_settings.py +12 -0
- zenml/models/v2/core/user.py +0 -21
- zenml/models/v2/misc/server_models.py +7 -1
- zenml/models/v2/misc/stack_deployment.py +5 -0
- zenml/models/v2/misc/user_auth.py +0 -7
- zenml/new/pipelines/build_utils.py +220 -89
- zenml/new/pipelines/code_archive.py +157 -0
- zenml/new/pipelines/pipeline.py +46 -78
- zenml/new/pipelines/run_utils.py +79 -1
- zenml/post_execution/pipeline.py +1 -4
- zenml/service_connectors/service_connector_utils.py +18 -2
- zenml/stack_deployments/aws_stack_deployment.py +32 -8
- zenml/stack_deployments/azure_stack_deployment.py +122 -10
- zenml/stack_deployments/gcp_stack_deployment.py +36 -7
- zenml/stack_deployments/stack_deployment.py +23 -7
- zenml/steps/base_step.py +3 -0
- zenml/steps/utils.py +0 -4
- zenml/utils/archivable.py +149 -0
- zenml/utils/code_utils.py +244 -0
- zenml/utils/notebook_utils.py +122 -0
- zenml/utils/package_utils.py +39 -0
- zenml/utils/pipeline_docker_image_builder.py +3 -96
- zenml/utils/source_utils.py +109 -1
- zenml/zen_server/dashboard/assets/{404-B_YdvmwS.js → 404-CRAA_Lew.js} +1 -1
- zenml/zen_server/dashboard/assets/@radix-BXWm7HOa.js +85 -0
- zenml/zen_server/dashboard/assets/{@react-router-CO-OsFwI.js → @react-router-l3lMcXA2.js} +1 -1
- zenml/zen_server/dashboard/assets/{@reactflow-l_1hUr1S.js → @reactflow-CeVxyqYT.js} +2 -2
- zenml/zen_server/dashboard/assets/{@tanstack-DYiOyJUL.js → @tanstack-FmcYZMuX.js} +4 -4
- zenml/zen_server/dashboard/assets/AlertDialogDropdownItem-ErO9aOgK.js +1 -0
- zenml/zen_server/dashboard/assets/{AwarenessChannel-CFg5iX4Z.js → AwarenessChannel-CLXo5rKM.js} +1 -1
- zenml/zen_server/dashboard/assets/{CodeSnippet-Dvkx_82E.js → CodeSnippet-D0VLxT2A.js} +2 -2
- zenml/zen_server/dashboard/assets/CollapsibleCard-BaUPiVg0.js +1 -0
- zenml/zen_server/dashboard/assets/{Commands-DoN1xrEq.js → Commands-JrcZK-3j.js} +1 -1
- zenml/zen_server/dashboard/assets/CopyButton-Dbo52T1K.js +2 -0
- zenml/zen_server/dashboard/assets/{CsvVizualization-Ck-nZ43m.js → CsvVizualization-D3kAypDj.js} +3 -3
- zenml/zen_server/dashboard/assets/DisplayDate-DizbSeT-.js +1 -0
- zenml/zen_server/dashboard/assets/EditSecretDialog-Bd7mFLS4.js +1 -0
- zenml/zen_server/dashboard/assets/{EmptyState-BMLnFVlB.js → EmptyState-BHblM39I.js} +1 -1
- zenml/zen_server/dashboard/assets/{Error-kLtljEOM.js → Error-C6LeJSER.js} +1 -1
- zenml/zen_server/dashboard/assets/{ExecutionStatus-DguLLgTK.js → ExecutionStatus-jH4OrWBq.js} +1 -1
- zenml/zen_server/dashboard/assets/{Helpbox-BXUMP21n.js → Helpbox-aAB2XP-z.js} +1 -1
- zenml/zen_server/dashboard/assets/{Infobox-DSt0O-dm.js → Infobox-BQ0aty32.js} +1 -1
- zenml/zen_server/dashboard/assets/{InlineAvatar-xsrsIGE-.js → InlineAvatar-DpTLgM3Q.js} +1 -1
- zenml/zen_server/dashboard/assets/Lock-CNyJvf2r.js +1 -0
- zenml/zen_server/dashboard/assets/{MarkdownVisualization-xp3hhULl.js → MarkdownVisualization-Bajxn0HY.js} +1 -1
- zenml/zen_server/dashboard/assets/NumberBox-BmKE0qnO.js +1 -0
- zenml/zen_server/dashboard/assets/{PasswordChecker-DUveqlva.js → PasswordChecker-yGGoJSB-.js} +1 -1
- zenml/zen_server/dashboard/assets/ProviderRadio-BBqkIuTd.js +1 -0
- zenml/zen_server/dashboard/assets/RadioItem-xLhXoiFV.js +1 -0
- zenml/zen_server/dashboard/assets/SearchField-C9R0mdaX.js +1 -0
- zenml/zen_server/dashboard/assets/{SetPassword-BXGTWiwj.js → SetPassword-52sNxNiO.js} +1 -1
- zenml/zen_server/dashboard/assets/{SuccessStep-DZC60t0x.js → SuccessStep-DlkItqYG.js} +1 -1
- zenml/zen_server/dashboard/assets/Tick-uxv80Q6a.js +1 -0
- zenml/zen_server/dashboard/assets/{UpdatePasswordSchemas-DGvwFWO1.js → UpdatePasswordSchemas-oN4G3sKz.js} +1 -1
- zenml/zen_server/dashboard/assets/{aws-BgKTfTfx.js → aws-0_3UsPif.js} +1 -1
- zenml/zen_server/dashboard/assets/{check-circle-i56092KI.js → check-circle-1_I207rW.js} +1 -1
- zenml/zen_server/dashboard/assets/chevron-down-BpaF8JqM.js +1 -0
- zenml/zen_server/dashboard/assets/{chevron-right-double-CZBOf6JM.js → chevron-right-double-Dk8e2L99.js} +1 -1
- zenml/zen_server/dashboard/assets/{cloud-only-C_yFCAkP.js → cloud-only-BkUuI0lZ.js} +1 -1
- zenml/zen_server/dashboard/assets/components-Br2ezRib.js +1 -0
- zenml/zen_server/dashboard/assets/{copy-BXNk6BjL.js → copy-f3XGPPxt.js} +1 -1
- zenml/zen_server/dashboard/assets/{database-1xWSgZfO.js → database-cXYNX9tt.js} +1 -1
- zenml/zen_server/dashboard/assets/{docker-CQMVm_4d.js → docker-8uj__HHK.js} +1 -1
- zenml/zen_server/dashboard/assets/dots-horizontal-sKQlWEni.js +1 -0
- zenml/zen_server/dashboard/assets/edit-C0MVvPD2.js +1 -0
- zenml/zen_server/dashboard/assets/{file-text-CqD_iu6l.js → file-text-B9JibxTs.js} +1 -1
- zenml/zen_server/dashboard/assets/{help-bu_DgLKI.js → help-FuHlZwn0.js} +1 -1
- zenml/zen_server/dashboard/assets/{index-rK_Wuy2W.js → index-Bd1xgUQG.js} +1 -1
- zenml/zen_server/dashboard/assets/index-DaGknux4.css +1 -0
- zenml/zen_server/dashboard/assets/{index-BczVOqUf.js → index-DhIZtpxB.js} +5 -5
- zenml/zen_server/dashboard/assets/index.esm-DT4uyn2i.js +1 -0
- zenml/zen_server/dashboard/assets/layout-D6oiSbfd.js +1 -0
- zenml/zen_server/dashboard/assets/{login-mutation-CrHrndTI.js → login-mutation-13A_JSVA.js} +1 -1
- zenml/zen_server/dashboard/assets/{logs-D8k8BVFf.js → logs-CgeE2vZP.js} +1 -1
- zenml/zen_server/dashboard/assets/{not-found-DYa4pC-C.js → not-found-B0Mmb90p.js} +1 -1
- zenml/zen_server/dashboard/assets/package-DdkziX79.js +1 -0
- zenml/zen_server/dashboard/assets/page-7-v2OBm-.js +1 -0
- zenml/zen_server/dashboard/assets/{page-MFQyIJd3.js → page-B3ozwdD1.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-BkuQDIf-.js → page-BGwA9B1M.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-1iL8aMqs.js → page-BkjAUyTA.js} +1 -1
- zenml/zen_server/dashboard/assets/page-BnacgBiy.js +1 -0
- zenml/zen_server/dashboard/assets/page-BxF_KMQ3.js +2 -0
- zenml/zen_server/dashboard/assets/page-C4POHC0K.js +1 -0
- zenml/zen_server/dashboard/assets/page-C9kudd44.js +9 -0
- zenml/zen_server/dashboard/assets/page-CA1j3GpJ.js +1 -0
- zenml/zen_server/dashboard/assets/page-CCY6yfmu.js +1 -0
- zenml/zen_server/dashboard/assets/page-CgTe7Bme.js +1 -0
- zenml/zen_server/dashboard/assets/{page-8a4UMKXZ.js → page-Cgn-6v2Y.js} +1 -1
- zenml/zen_server/dashboard/assets/page-CxQmQqDw.js +1 -0
- zenml/zen_server/dashboard/assets/page-D2Goey3H.js +1 -0
- zenml/zen_server/dashboard/assets/page-DLpOnf7u.js +1 -0
- zenml/zen_server/dashboard/assets/{page-BhgCDInH.js → page-DSTQnBk-.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-1h_sD1jz.js → page-DTysUGOy.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-2grKx_MY.js → page-D_EXUFJb.js} +1 -1
- zenml/zen_server/dashboard/assets/page-Db15QzsM.js +1 -0
- zenml/zen_server/dashboard/assets/{page-BDns21Iz.js → page-DugsjcQ_.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-C6-UGEbH.js → page-OFKSPyN7.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-BkeAAYwp.js → page-RnG-qhv9.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-CCNRIt_f.js → page-T2BtjwPl.js} +1 -1
- zenml/zen_server/dashboard/assets/page-TXe1Eo3Z.js +1 -0
- zenml/zen_server/dashboard/assets/{page-BnaevhnB.js → page-YiF_fNbe.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-uA5prJGY.js → page-hQaiQXfg.js} +1 -1
- zenml/zen_server/dashboard/assets/persist-3-5nOJ6m.js +1 -0
- zenml/zen_server/dashboard/assets/{play-circle-CNtZKDnW.js → play-circle-XSkLR12B.js} +1 -1
- zenml/zen_server/dashboard/assets/plus-FB9-lEq_.js +1 -0
- zenml/zen_server/dashboard/assets/refresh-COb6KYDi.js +1 -0
- zenml/zen_server/dashboard/assets/sharedSchema-BoYx_B_L.js +14 -0
- zenml/zen_server/dashboard/assets/{stack-detail-query-Cficsl6d.js → stack-detail-query-B-US_-wa.js} +1 -1
- zenml/zen_server/dashboard/assets/{terminal-By9cErXc.js → terminal-grtjrIEJ.js} +1 -1
- zenml/zen_server/dashboard/assets/trash-Cd5CSFqA.js +1 -0
- zenml/zen_server/dashboard/assets/{update-server-settings-mutation-7d8xi1tS.js → update-server-settings-mutation-B8GB_ubU.js} +1 -1
- zenml/zen_server/dashboard/assets/{url-D7mAQGUM.js → url-hcMJkz8p.js} +1 -1
- zenml/zen_server/dashboard/assets/{zod-BhoGpZ63.js → zod-CnykDKJj.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.12246c7548e71e2c4438e496360de80c.js → precache-manifest.9c473c96a43298343a7ce1256183123b.js} +4 -4
- zenml/zen_server/dashboard_legacy/service-worker.js +1 -1
- zenml/zen_server/dashboard_legacy/static/js/{main.3b27024b.chunk.js → main.463c90b9.chunk.js} +2 -2
- zenml/zen_server/dashboard_legacy/static/js/{main.3b27024b.chunk.js.map → main.463c90b9.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/rbac/models.py +1 -0
- zenml/zen_server/rbac/utils.py +4 -0
- zenml/zen_server/routers/pipeline_builds_endpoints.py +2 -66
- zenml/zen_server/routers/pipeline_deployments_endpoints.py +2 -53
- zenml/zen_server/routers/pipelines_endpoints.py +1 -74
- zenml/zen_server/routers/run_templates_endpoints.py +212 -0
- zenml/zen_server/routers/stack_deployment_endpoints.py +6 -0
- zenml/zen_server/routers/users_endpoints.py +0 -7
- zenml/zen_server/routers/workspaces_endpoints.py +79 -0
- zenml/zen_server/{pipeline_deployment → template_execution}/runner_entrypoint_configuration.py +1 -8
- zenml/zen_server/{pipeline_deployment → template_execution}/utils.py +214 -92
- zenml/zen_server/utils.py +77 -2
- zenml/zen_server/zen_server_api.py +54 -2
- zenml/zen_stores/base_zen_store.py +7 -1
- zenml/zen_stores/migrations/versions/0.63.0_release.py +23 -0
- zenml/zen_stores/migrations/versions/0.64.0_release.py +23 -0
- zenml/zen_stores/migrations/versions/026d4577b6a0_add_code_path.py +39 -0
- zenml/zen_stores/migrations/versions/3dcc5d20e82f_add_last_user_activity.py +51 -0
- zenml/zen_stores/migrations/versions/7d1919bb1ef0_add_run_templates.py +100 -0
- zenml/zen_stores/migrations/versions/909550c7c4da_remove_user_hub_token.py +36 -0
- zenml/zen_stores/migrations/versions/b59aa68fdb1f_simplify_pipelines.py +139 -0
- zenml/zen_stores/rest_zen_store.py +112 -39
- zenml/zen_stores/schemas/__init__.py +2 -0
- zenml/zen_stores/schemas/pipeline_build_schemas.py +3 -3
- zenml/zen_stores/schemas/pipeline_deployment_schemas.py +32 -2
- zenml/zen_stores/schemas/pipeline_run_schemas.py +29 -3
- zenml/zen_stores/schemas/pipeline_schemas.py +29 -30
- zenml/zen_stores/schemas/run_template_schemas.py +264 -0
- zenml/zen_stores/schemas/server_settings_schemas.py +2 -0
- zenml/zen_stores/schemas/step_run_schemas.py +11 -4
- zenml/zen_stores/schemas/user_schemas.py +0 -2
- zenml/zen_stores/sql_zen_store.py +389 -151
- zenml/zen_stores/template_utils.py +261 -0
- zenml/zen_stores/zen_store_interface.py +93 -20
- {zenml_nightly-0.62.0.dev20240729.dist-info → zenml_nightly-0.64.0.dev20240809.dist-info}/METADATA +3 -3
- {zenml_nightly-0.62.0.dev20240729.dist-info → zenml_nightly-0.64.0.dev20240809.dist-info}/RECORD +211 -184
- zenml/_hub/client.py +0 -289
- zenml/_hub/constants.py +0 -21
- zenml/_hub/utils.py +0 -79
- zenml/cli/hub.py +0 -1116
- zenml/models/v2/core/pipeline_namespace.py +0 -113
- zenml/models/v2/misc/hub_plugin_models.py +0 -79
- zenml/new/pipelines/deserialization_utils.py +0 -292
- zenml/zen_server/dashboard/assets/@radix-CFOkMR_E.js +0 -85
- zenml/zen_server/dashboard/assets/CollapsibleCard-opiuBHHc.js +0 -1
- zenml/zen_server/dashboard/assets/CopyButton-Cr7xYEPb.js +0 -2
- zenml/zen_server/dashboard/assets/DisplayDate-DYgIjlDF.js +0 -1
- zenml/zen_server/dashboard/assets/Pagination-C6X-mifw.js +0 -1
- zenml/zen_server/dashboard/assets/index-EpMIKgrI.css +0 -1
- zenml/zen_server/dashboard/assets/index.esm-Corw4lXQ.js +0 -1
- zenml/zen_server/dashboard/assets/package-B3fWP-Dh.js +0 -1
- zenml/zen_server/dashboard/assets/page-5NCOHOsy.js +0 -1
- zenml/zen_server/dashboard/assets/page-B6h3iaHJ.js +0 -1
- zenml/zen_server/dashboard/assets/page-Bi-wtWiO.js +0 -5
- zenml/zen_server/dashboard/assets/page-Bq0YxkLV.js +0 -1
- zenml/zen_server/dashboard/assets/page-Bs2F4eoD.js +0 -2
- zenml/zen_server/dashboard/assets/page-CHNxpz3n.js +0 -1
- zenml/zen_server/dashboard/assets/page-DgorQFqi.js +0 -1
- zenml/zen_server/dashboard/assets/page-K8ebxVIs.js +0 -1
- zenml/zen_server/dashboard/assets/page-TgCF0P_U.js +0 -1
- zenml/zen_server/dashboard/assets/page-ZnCEe-eK.js +0 -9
- zenml/zen_server/dashboard/assets/persist-D7HJNBWx.js +0 -1
- zenml/zen_server/dashboard/assets/plus-C8WOyCzt.js +0 -1
- zenml/zen_server/dashboard/assets/secrets-video-OBJ6irhH.svg +0 -21
- zenml/zen_server/dashboard/assets/stacks-video-7gfxpAq4.svg +0 -21
- /zenml/zen_server/{pipeline_deployment → template_execution}/__init__.py +0 -0
- /zenml/zen_server/{pipeline_deployment → template_execution}/workload_manager_interface.py +0 -0
- {zenml_nightly-0.62.0.dev20240729.dist-info → zenml_nightly-0.64.0.dev20240809.dist-info}/LICENSE +0 -0
- {zenml_nightly-0.62.0.dev20240729.dist-info → zenml_nightly-0.64.0.dev20240809.dist-info}/WHEEL +0 -0
- {zenml_nightly-0.62.0.dev20240729.dist-info → zenml_nightly-0.64.0.dev20240809.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,264 @@
|
|
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
|
+
"""SQLModel implementation of run template tables."""
|
15
|
+
|
16
|
+
from datetime import datetime
|
17
|
+
from typing import TYPE_CHECKING, Any, List, Optional
|
18
|
+
from uuid import UUID
|
19
|
+
|
20
|
+
from sqlalchemy import Column, String, UniqueConstraint
|
21
|
+
from sqlalchemy.dialects.mysql import MEDIUMTEXT
|
22
|
+
from sqlmodel import Field, Relationship
|
23
|
+
|
24
|
+
from zenml.constants import MEDIUMTEXT_MAX_LENGTH
|
25
|
+
from zenml.enums import TaggableResourceTypes
|
26
|
+
from zenml.models import (
|
27
|
+
RunTemplateRequest,
|
28
|
+
RunTemplateResponse,
|
29
|
+
RunTemplateResponseBody,
|
30
|
+
RunTemplateResponseMetadata,
|
31
|
+
RunTemplateResponseResources,
|
32
|
+
RunTemplateUpdate,
|
33
|
+
)
|
34
|
+
from zenml.zen_stores.schemas.base_schemas import BaseSchema
|
35
|
+
from zenml.zen_stores.schemas.schema_utils import build_foreign_key_field
|
36
|
+
from zenml.zen_stores.schemas.user_schemas import UserSchema
|
37
|
+
from zenml.zen_stores.schemas.workspace_schemas import WorkspaceSchema
|
38
|
+
|
39
|
+
if TYPE_CHECKING:
|
40
|
+
from zenml.zen_stores.schemas.pipeline_deployment_schemas import (
|
41
|
+
PipelineDeploymentSchema,
|
42
|
+
)
|
43
|
+
from zenml.zen_stores.schemas.pipeline_run_schemas import PipelineRunSchema
|
44
|
+
from zenml.zen_stores.schemas.tag_schemas import TagResourceSchema
|
45
|
+
|
46
|
+
|
47
|
+
class RunTemplateSchema(BaseSchema, table=True):
|
48
|
+
"""SQL Model for run templates."""
|
49
|
+
|
50
|
+
__tablename__ = "run_template"
|
51
|
+
__table_args__ = (
|
52
|
+
UniqueConstraint(
|
53
|
+
"name",
|
54
|
+
"workspace_id",
|
55
|
+
name="unique_template_name_in_workspace",
|
56
|
+
),
|
57
|
+
)
|
58
|
+
|
59
|
+
name: str = Field(nullable=False)
|
60
|
+
description: Optional[str] = Field(
|
61
|
+
sa_column=Column(
|
62
|
+
String(length=MEDIUMTEXT_MAX_LENGTH).with_variant(
|
63
|
+
MEDIUMTEXT, "mysql"
|
64
|
+
),
|
65
|
+
nullable=True,
|
66
|
+
)
|
67
|
+
)
|
68
|
+
|
69
|
+
user_id: Optional[UUID] = build_foreign_key_field(
|
70
|
+
source=__tablename__,
|
71
|
+
target=UserSchema.__tablename__,
|
72
|
+
source_column="user_id",
|
73
|
+
target_column="id",
|
74
|
+
ondelete="SET NULL",
|
75
|
+
nullable=True,
|
76
|
+
)
|
77
|
+
workspace_id: UUID = build_foreign_key_field(
|
78
|
+
source=__tablename__,
|
79
|
+
target=WorkspaceSchema.__tablename__,
|
80
|
+
source_column="workspace_id",
|
81
|
+
target_column="id",
|
82
|
+
ondelete="CASCADE",
|
83
|
+
nullable=False,
|
84
|
+
)
|
85
|
+
source_deployment_id: Optional[UUID] = build_foreign_key_field(
|
86
|
+
source=__tablename__,
|
87
|
+
target="pipeline_deployment",
|
88
|
+
source_column="source_deployment_id",
|
89
|
+
target_column="id",
|
90
|
+
ondelete="SET NULL",
|
91
|
+
nullable=True,
|
92
|
+
)
|
93
|
+
|
94
|
+
user: Optional["UserSchema"] = Relationship()
|
95
|
+
workspace: "WorkspaceSchema" = Relationship()
|
96
|
+
source_deployment: Optional["PipelineDeploymentSchema"] = Relationship(
|
97
|
+
sa_relationship_kwargs={
|
98
|
+
"foreign_keys": "RunTemplateSchema.source_deployment_id",
|
99
|
+
}
|
100
|
+
)
|
101
|
+
|
102
|
+
runs: List["PipelineRunSchema"] = Relationship(
|
103
|
+
sa_relationship_kwargs={
|
104
|
+
"primaryjoin": "RunTemplateSchema.id==PipelineDeploymentSchema.template_id",
|
105
|
+
"secondaryjoin": "PipelineDeploymentSchema.id==PipelineRunSchema.deployment_id",
|
106
|
+
"secondary": "pipeline_deployment",
|
107
|
+
"cascade": "delete",
|
108
|
+
"viewonly": True,
|
109
|
+
"order_by": "PipelineRunSchema.created",
|
110
|
+
}
|
111
|
+
)
|
112
|
+
|
113
|
+
tags: List["TagResourceSchema"] = Relationship(
|
114
|
+
sa_relationship_kwargs=dict(
|
115
|
+
primaryjoin=f"and_(TagResourceSchema.resource_type=='{TaggableResourceTypes.RUN_TEMPLATE.value}', foreign(TagResourceSchema.resource_id)==RunTemplateSchema.id)",
|
116
|
+
cascade="delete",
|
117
|
+
overlaps="tags",
|
118
|
+
),
|
119
|
+
)
|
120
|
+
|
121
|
+
@classmethod
|
122
|
+
def from_request(
|
123
|
+
cls,
|
124
|
+
request: RunTemplateRequest,
|
125
|
+
) -> "RunTemplateSchema":
|
126
|
+
"""Create a schema from a request.
|
127
|
+
|
128
|
+
Args:
|
129
|
+
request: The request to convert.
|
130
|
+
|
131
|
+
|
132
|
+
Returns:
|
133
|
+
The created schema.
|
134
|
+
"""
|
135
|
+
return cls(
|
136
|
+
user_id=request.user,
|
137
|
+
workspace_id=request.workspace,
|
138
|
+
name=request.name,
|
139
|
+
description=request.description,
|
140
|
+
source_deployment_id=request.source_deployment_id,
|
141
|
+
)
|
142
|
+
|
143
|
+
def update(self, update: RunTemplateUpdate) -> "RunTemplateSchema":
|
144
|
+
"""Update the schema.
|
145
|
+
|
146
|
+
Args:
|
147
|
+
update: The update model.
|
148
|
+
|
149
|
+
Returns:
|
150
|
+
The updated schema.
|
151
|
+
"""
|
152
|
+
for field, value in update.model_dump(
|
153
|
+
exclude_unset=True, exclude_none=True
|
154
|
+
).items():
|
155
|
+
setattr(self, field, value)
|
156
|
+
|
157
|
+
self.updated = datetime.utcnow()
|
158
|
+
return self
|
159
|
+
|
160
|
+
def to_model(
|
161
|
+
self,
|
162
|
+
include_metadata: bool = False,
|
163
|
+
include_resources: bool = False,
|
164
|
+
**kwargs: Any,
|
165
|
+
) -> RunTemplateResponse:
|
166
|
+
"""Convert the schema to a response model.
|
167
|
+
|
168
|
+
Args:
|
169
|
+
include_metadata: Whether the metadata will be filled.
|
170
|
+
include_resources: Whether the resources will be filled.
|
171
|
+
**kwargs: Keyword arguments to allow schema specific logic
|
172
|
+
|
173
|
+
Returns:
|
174
|
+
Model representing this schema.
|
175
|
+
"""
|
176
|
+
runnable = False
|
177
|
+
if (
|
178
|
+
self.source_deployment
|
179
|
+
and self.source_deployment.build
|
180
|
+
and self.source_deployment.build.stack
|
181
|
+
):
|
182
|
+
runnable = True
|
183
|
+
|
184
|
+
body = RunTemplateResponseBody(
|
185
|
+
user=self.user.to_model() if self.user else None,
|
186
|
+
created=self.created,
|
187
|
+
updated=self.updated,
|
188
|
+
runnable=runnable,
|
189
|
+
latest_run_id=self.runs[-1].id if self.runs else None,
|
190
|
+
latest_run_status=self.runs[-1].status if self.runs else None,
|
191
|
+
)
|
192
|
+
|
193
|
+
metadata = None
|
194
|
+
if include_metadata:
|
195
|
+
pipeline_spec = None
|
196
|
+
config_template = None
|
197
|
+
config_schema = None
|
198
|
+
|
199
|
+
if self.source_deployment:
|
200
|
+
from zenml.zen_stores import template_utils
|
201
|
+
|
202
|
+
pipeline_spec = self.source_deployment.to_model(
|
203
|
+
include_metadata=True, include_resources=True
|
204
|
+
).pipeline_spec
|
205
|
+
|
206
|
+
if (
|
207
|
+
self.source_deployment.build
|
208
|
+
and self.source_deployment.build.stack
|
209
|
+
):
|
210
|
+
config_template = template_utils.generate_config_template(
|
211
|
+
deployment=self.source_deployment
|
212
|
+
)
|
213
|
+
config_schema = template_utils.generate_config_schema(
|
214
|
+
deployment=self.source_deployment
|
215
|
+
)
|
216
|
+
|
217
|
+
metadata = RunTemplateResponseMetadata(
|
218
|
+
workspace=self.workspace.to_model(),
|
219
|
+
description=self.description,
|
220
|
+
pipeline_spec=pipeline_spec,
|
221
|
+
config_template=config_template,
|
222
|
+
config_schema=config_schema,
|
223
|
+
)
|
224
|
+
|
225
|
+
resources = None
|
226
|
+
if include_resources:
|
227
|
+
if self.source_deployment:
|
228
|
+
pipeline = (
|
229
|
+
self.source_deployment.pipeline.to_model()
|
230
|
+
if self.source_deployment.pipeline
|
231
|
+
else None
|
232
|
+
)
|
233
|
+
build = (
|
234
|
+
self.source_deployment.build.to_model()
|
235
|
+
if self.source_deployment.build
|
236
|
+
else None
|
237
|
+
)
|
238
|
+
code_reference = (
|
239
|
+
self.source_deployment.code_reference.to_model()
|
240
|
+
if self.source_deployment.code_reference
|
241
|
+
else None
|
242
|
+
)
|
243
|
+
else:
|
244
|
+
pipeline = None
|
245
|
+
build = None
|
246
|
+
code_reference = None
|
247
|
+
|
248
|
+
resources = RunTemplateResponseResources(
|
249
|
+
source_deployment=self.source_deployment.to_model()
|
250
|
+
if self.source_deployment
|
251
|
+
else None,
|
252
|
+
pipeline=pipeline,
|
253
|
+
build=build,
|
254
|
+
code_reference=code_reference,
|
255
|
+
tags=[t.tag.to_model() for t in self.tags],
|
256
|
+
)
|
257
|
+
|
258
|
+
return RunTemplateResponse(
|
259
|
+
id=self.id,
|
260
|
+
name=self.name,
|
261
|
+
body=body,
|
262
|
+
metadata=metadata,
|
263
|
+
resources=resources,
|
264
|
+
)
|
@@ -42,6 +42,7 @@ class ServerSettingsSchema(SQLModel, table=True):
|
|
42
42
|
display_announcements: Optional[bool] = Field(nullable=True)
|
43
43
|
display_updates: Optional[bool] = Field(nullable=True)
|
44
44
|
onboarding_state: Optional[str] = Field(nullable=True)
|
45
|
+
last_user_activity: datetime = Field(default_factory=datetime.utcnow)
|
45
46
|
updated: datetime = Field(default_factory=datetime.utcnow)
|
46
47
|
|
47
48
|
def update(
|
@@ -111,6 +112,7 @@ class ServerSettingsSchema(SQLModel, table=True):
|
|
111
112
|
display_updates=self.display_updates,
|
112
113
|
active=self.active,
|
113
114
|
updated=self.updated,
|
115
|
+
last_user_activity=self.last_user_activity,
|
114
116
|
)
|
115
117
|
|
116
118
|
metadata = None
|
@@ -274,11 +274,18 @@ class StepRunSchema(NamedSchema, table=True):
|
|
274
274
|
if include_resources:
|
275
275
|
model_version = None
|
276
276
|
if full_step_config.config.model:
|
277
|
-
|
278
|
-
|
279
|
-
|
277
|
+
# TODO: Why is there no ID check similar to
|
278
|
+
# PipelineRunSchema.to_model()?
|
279
|
+
try:
|
280
|
+
model_version = (
|
281
|
+
full_step_config.config.model._get_model_version(
|
282
|
+
hydrate=False
|
283
|
+
)
|
280
284
|
)
|
281
|
-
|
285
|
+
except KeyError:
|
286
|
+
# Unable to find the model version, it was probably deleted
|
287
|
+
pass
|
288
|
+
|
282
289
|
resources = StepRunResponseResources(model_version=model_version)
|
283
290
|
|
284
291
|
return StepRunResponse(
|
@@ -77,7 +77,6 @@ class UserSchema(NamedSchema, table=True):
|
|
77
77
|
active: bool
|
78
78
|
password: Optional[str] = Field(nullable=True)
|
79
79
|
activation_token: Optional[str] = Field(nullable=True)
|
80
|
-
hub_token: Optional[str] = Field(nullable=True)
|
81
80
|
email_opted_in: Optional[bool] = Field(nullable=True)
|
82
81
|
external_user_id: Optional[UUID] = Field(nullable=True)
|
83
82
|
is_admin: bool = Field(default=False)
|
@@ -281,7 +280,6 @@ class UserSchema(NamedSchema, table=True):
|
|
281
280
|
if include_metadata:
|
282
281
|
metadata = UserResponseMetadata(
|
283
282
|
email=self.email if include_private else None,
|
284
|
-
hub_token=self.hub_token if include_private else None,
|
285
283
|
external_user_id=self.external_user_id,
|
286
284
|
user_metadata=json.loads(self.user_metadata)
|
287
285
|
if self.user_metadata
|