zenml-nightly 0.75.0.dev20250313__py3-none-any.whl → 0.75.0.dev20250315__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- zenml/VERSION +1 -1
- zenml/analytics/context.py +4 -4
- zenml/analytics/enums.py +2 -2
- zenml/artifacts/utils.py +2 -2
- zenml/cli/__init__.py +8 -9
- zenml/cli/base.py +2 -2
- zenml/cli/code_repository.py +1 -1
- zenml/cli/login.py +21 -18
- zenml/cli/pipeline.py +3 -3
- zenml/cli/project.py +172 -0
- zenml/cli/server.py +5 -5
- zenml/cli/service_accounts.py +0 -1
- zenml/cli/service_connectors.py +15 -16
- zenml/cli/stack.py +0 -2
- zenml/cli/stack_components.py +2 -2
- zenml/cli/utils.py +3 -3
- zenml/client.py +352 -341
- zenml/config/global_config.py +41 -43
- zenml/config/server_config.py +9 -9
- zenml/constants.py +5 -3
- zenml/event_hub/event_hub.py +1 -1
- zenml/integrations/gcp/__init__.py +1 -0
- zenml/integrations/gcp/flavors/vertex_orchestrator_flavor.py +5 -0
- zenml/integrations/gcp/flavors/vertex_step_operator_flavor.py +5 -28
- zenml/integrations/gcp/orchestrators/vertex_orchestrator.py +125 -78
- zenml/integrations/gcp/service_connectors/gcp_service_connector.py +7 -6
- zenml/integrations/gcp/vertex_custom_job_parameters.py +50 -0
- zenml/integrations/mlflow/steps/mlflow_registry.py +3 -3
- zenml/integrations/wandb/__init__.py +1 -1
- zenml/integrations/wandb/experiment_trackers/wandb_experiment_tracker.py +29 -9
- zenml/integrations/wandb/flavors/wandb_experiment_tracker_flavor.py +2 -0
- zenml/login/credentials.py +26 -27
- zenml/login/credentials_store.py +5 -5
- zenml/login/pro/client.py +9 -9
- zenml/login/pro/utils.py +8 -8
- zenml/login/pro/{tenant → workspace}/__init__.py +1 -1
- zenml/login/pro/{tenant → workspace}/client.py +25 -25
- zenml/login/pro/{tenant → workspace}/models.py +27 -28
- zenml/model/model.py +2 -2
- zenml/model_registries/base_model_registry.py +1 -1
- zenml/models/__init__.py +29 -29
- zenml/models/v2/base/filter.py +1 -1
- zenml/models/v2/base/scoped.py +49 -53
- zenml/models/v2/core/action.py +12 -12
- zenml/models/v2/core/artifact.py +15 -15
- zenml/models/v2/core/artifact_version.py +15 -15
- zenml/models/v2/core/code_repository.py +12 -12
- zenml/models/v2/core/event_source.py +12 -12
- zenml/models/v2/core/model.py +26 -18
- zenml/models/v2/core/model_version.py +15 -15
- zenml/models/v2/core/pipeline.py +15 -15
- zenml/models/v2/core/pipeline_build.py +14 -14
- zenml/models/v2/core/pipeline_deployment.py +12 -14
- zenml/models/v2/core/pipeline_run.py +16 -16
- zenml/models/v2/core/project.py +203 -0
- zenml/models/v2/core/run_metadata.py +2 -2
- zenml/models/v2/core/run_template.py +15 -15
- zenml/models/v2/core/schedule.py +12 -12
- zenml/models/v2/core/secret.py +1 -1
- zenml/models/v2/core/service.py +14 -14
- zenml/models/v2/core/step_run.py +13 -13
- zenml/models/v2/core/tag.py +96 -3
- zenml/models/v2/core/trigger.py +13 -13
- zenml/models/v2/core/trigger_execution.py +2 -2
- zenml/models/v2/core/user.py +0 -17
- zenml/models/v2/misc/server_models.py +6 -6
- zenml/models/v2/misc/statistics.py +4 -4
- zenml/orchestrators/cache_utils.py +7 -7
- zenml/orchestrators/input_utils.py +1 -1
- zenml/orchestrators/step_launcher.py +1 -1
- zenml/orchestrators/step_run_utils.py +3 -3
- zenml/orchestrators/utils.py +4 -4
- zenml/pipelines/build_utils.py +2 -2
- zenml/pipelines/pipeline_definition.py +5 -5
- zenml/pipelines/run_utils.py +1 -1
- zenml/service_connectors/service_connector.py +0 -3
- zenml/service_connectors/service_connector_utils.py +0 -1
- zenml/stack/stack.py +0 -1
- zenml/steps/base_step.py +10 -2
- zenml/utils/dashboard_utils.py +1 -1
- zenml/utils/tag_utils.py +0 -12
- zenml/zen_server/cloud_utils.py +3 -3
- zenml/zen_server/feature_gate/endpoint_utils.py +1 -1
- zenml/zen_server/feature_gate/zenml_cloud_feature_gate.py +1 -1
- zenml/zen_server/rbac/endpoint_utils.py +17 -17
- zenml/zen_server/rbac/models.py +47 -22
- zenml/zen_server/rbac/rbac_sql_zen_store.py +3 -3
- zenml/zen_server/rbac/utils.py +23 -25
- zenml/zen_server/rbac/zenml_cloud_rbac.py +7 -74
- zenml/zen_server/routers/artifact_version_endpoints.py +10 -10
- zenml/zen_server/routers/auth_endpoints.py +6 -6
- zenml/zen_server/routers/code_repositories_endpoints.py +12 -14
- zenml/zen_server/routers/model_versions_endpoints.py +13 -15
- zenml/zen_server/routers/models_endpoints.py +7 -9
- zenml/zen_server/routers/pipeline_builds_endpoints.py +14 -16
- zenml/zen_server/routers/pipeline_deployments_endpoints.py +13 -15
- zenml/zen_server/routers/pipelines_endpoints.py +16 -18
- zenml/zen_server/routers/{workspaces_endpoints.py → projects_endpoints.py} +111 -68
- zenml/zen_server/routers/run_metadata_endpoints.py +7 -9
- zenml/zen_server/routers/run_templates_endpoints.py +15 -17
- zenml/zen_server/routers/runs_endpoints.py +12 -14
- zenml/zen_server/routers/schedule_endpoints.py +12 -14
- zenml/zen_server/routers/secrets_endpoints.py +1 -3
- zenml/zen_server/routers/server_endpoints.py +7 -7
- zenml/zen_server/routers/service_connectors_endpoints.py +11 -13
- zenml/zen_server/routers/service_endpoints.py +7 -9
- zenml/zen_server/routers/stack_components_endpoints.py +9 -11
- zenml/zen_server/routers/stacks_endpoints.py +9 -11
- zenml/zen_server/routers/steps_endpoints.py +6 -6
- zenml/zen_server/routers/users_endpoints.py +5 -43
- zenml/zen_server/template_execution/utils.py +4 -4
- zenml/zen_server/utils.py +10 -10
- zenml/zen_server/zen_server_api.py +6 -5
- zenml/zen_stores/base_zen_store.py +38 -42
- zenml/zen_stores/migrations/versions/12eff0206201_rename_workspace_to_project.py +768 -0
- zenml/zen_stores/migrations/versions/41b28cae31ce_make_artifacts_workspace_scoped.py +3 -3
- zenml/zen_stores/migrations/versions/cbc6acd71f92_add_workspace_display_name.py +58 -0
- zenml/zen_stores/rest_zen_store.py +55 -63
- zenml/zen_stores/schemas/__init__.py +2 -2
- zenml/zen_stores/schemas/action_schemas.py +9 -9
- zenml/zen_stores/schemas/artifact_schemas.py +15 -17
- zenml/zen_stores/schemas/code_repository_schemas.py +16 -18
- zenml/zen_stores/schemas/event_source_schemas.py +9 -9
- zenml/zen_stores/schemas/model_schemas.py +15 -17
- zenml/zen_stores/schemas/pipeline_build_schemas.py +7 -7
- zenml/zen_stores/schemas/pipeline_deployment_schemas.py +7 -7
- zenml/zen_stores/schemas/pipeline_run_schemas.py +9 -9
- zenml/zen_stores/schemas/pipeline_schemas.py +9 -9
- zenml/zen_stores/schemas/{workspace_schemas.py → project_schemas.py} +47 -41
- zenml/zen_stores/schemas/run_metadata_schemas.py +5 -5
- zenml/zen_stores/schemas/run_template_schemas.py +9 -9
- zenml/zen_stores/schemas/schedule_schema.py +9 -9
- zenml/zen_stores/schemas/service_schemas.py +7 -7
- zenml/zen_stores/schemas/step_run_schemas.py +7 -7
- zenml/zen_stores/schemas/trigger_schemas.py +9 -9
- zenml/zen_stores/schemas/user_schemas.py +0 -12
- zenml/zen_stores/sql_zen_store.py +318 -275
- zenml/zen_stores/zen_store_interface.py +56 -70
- {zenml_nightly-0.75.0.dev20250313.dist-info → zenml_nightly-0.75.0.dev20250315.dist-info}/METADATA +1 -1
- {zenml_nightly-0.75.0.dev20250313.dist-info → zenml_nightly-0.75.0.dev20250315.dist-info}/RECORD +143 -140
- zenml/cli/workspace.py +0 -160
- zenml/models/v2/core/workspace.py +0 -131
- {zenml_nightly-0.75.0.dev20250313.dist-info → zenml_nightly-0.75.0.dev20250315.dist-info}/LICENSE +0 -0
- {zenml_nightly-0.75.0.dev20250313.dist-info → zenml_nightly-0.75.0.dev20250315.dist-info}/WHEEL +0 -0
- {zenml_nightly-0.75.0.dev20250313.dist-info → zenml_nightly-0.75.0.dev20250315.dist-info}/entry_points.txt +0 -0
@@ -36,13 +36,13 @@ from zenml.enums import ExecutionStatus
|
|
36
36
|
from zenml.metadata.metadata_types import MetadataType
|
37
37
|
from zenml.models.v2.base.base import BaseUpdate
|
38
38
|
from zenml.models.v2.base.scoped import (
|
39
|
+
ProjectScopedFilter,
|
40
|
+
ProjectScopedRequest,
|
41
|
+
ProjectScopedResponse,
|
42
|
+
ProjectScopedResponseBody,
|
43
|
+
ProjectScopedResponseMetadata,
|
44
|
+
ProjectScopedResponseResources,
|
39
45
|
TaggableFilter,
|
40
|
-
WorkspaceScopedFilter,
|
41
|
-
WorkspaceScopedRequest,
|
42
|
-
WorkspaceScopedResponse,
|
43
|
-
WorkspaceScopedResponseBody,
|
44
|
-
WorkspaceScopedResponseMetadata,
|
45
|
-
WorkspaceScopedResponseResources,
|
46
46
|
)
|
47
47
|
from zenml.models.v2.core.model_version import ModelVersionResponse
|
48
48
|
from zenml.models.v2.core.tag import TagResponse
|
@@ -71,7 +71,7 @@ AnyQuery = TypeVar("AnyQuery", bound=Any)
|
|
71
71
|
# ------------------ Request Model ------------------
|
72
72
|
|
73
73
|
|
74
|
-
class PipelineRunRequest(
|
74
|
+
class PipelineRunRequest(ProjectScopedRequest):
|
75
75
|
"""Request model for pipeline runs."""
|
76
76
|
|
77
77
|
name: str = Field(
|
@@ -150,7 +150,7 @@ class PipelineRunUpdate(BaseUpdate):
|
|
150
150
|
# ------------------ Response Model ------------------
|
151
151
|
|
152
152
|
|
153
|
-
class PipelineRunResponseBody(
|
153
|
+
class PipelineRunResponseBody(ProjectScopedResponseBody):
|
154
154
|
"""Response body for pipeline runs."""
|
155
155
|
|
156
156
|
status: ExecutionStatus = Field(
|
@@ -186,7 +186,7 @@ class PipelineRunResponseBody(WorkspaceScopedResponseBody):
|
|
186
186
|
model_config = ConfigDict(protected_namespaces=())
|
187
187
|
|
188
188
|
|
189
|
-
class PipelineRunResponseMetadata(
|
189
|
+
class PipelineRunResponseMetadata(ProjectScopedResponseMetadata):
|
190
190
|
"""Response metadata for pipeline runs."""
|
191
191
|
|
192
192
|
run_metadata: Dict[str, MetadataType] = Field(
|
@@ -244,7 +244,7 @@ class PipelineRunResponseMetadata(WorkspaceScopedResponseMetadata):
|
|
244
244
|
)
|
245
245
|
|
246
246
|
|
247
|
-
class PipelineRunResponseResources(
|
247
|
+
class PipelineRunResponseResources(ProjectScopedResponseResources):
|
248
248
|
"""Class for all resource models associated with the pipeline run entity."""
|
249
249
|
|
250
250
|
model_version: Optional[ModelVersionResponse] = None
|
@@ -262,7 +262,7 @@ class PipelineRunResponseResources(WorkspaceScopedResponseResources):
|
|
262
262
|
|
263
263
|
|
264
264
|
class PipelineRunResponse(
|
265
|
-
|
265
|
+
ProjectScopedResponse[
|
266
266
|
PipelineRunResponseBody,
|
267
267
|
PipelineRunResponseMetadata,
|
268
268
|
PipelineRunResponseResources,
|
@@ -582,11 +582,11 @@ class PipelineRunResponse(
|
|
582
582
|
# ------------------ Filter Model ------------------
|
583
583
|
|
584
584
|
|
585
|
-
class PipelineRunFilter(
|
586
|
-
"""Model to enable advanced filtering of all
|
585
|
+
class PipelineRunFilter(ProjectScopedFilter, TaggableFilter):
|
586
|
+
"""Model to enable advanced filtering of all pipeline runs."""
|
587
587
|
|
588
588
|
CUSTOM_SORTING_OPTIONS: ClassVar[List[str]] = [
|
589
|
-
*
|
589
|
+
*ProjectScopedFilter.CUSTOM_SORTING_OPTIONS,
|
590
590
|
*TaggableFilter.CUSTOM_SORTING_OPTIONS,
|
591
591
|
"tag",
|
592
592
|
"stack",
|
@@ -595,7 +595,7 @@ class PipelineRunFilter(WorkspaceScopedFilter, TaggableFilter):
|
|
595
595
|
"model_version",
|
596
596
|
]
|
597
597
|
FILTER_EXCLUDE_FIELDS: ClassVar[List[str]] = [
|
598
|
-
*
|
598
|
+
*ProjectScopedFilter.FILTER_EXCLUDE_FIELDS,
|
599
599
|
*TaggableFilter.FILTER_EXCLUDE_FIELDS,
|
600
600
|
"unlisted",
|
601
601
|
"code_repository_id",
|
@@ -613,7 +613,7 @@ class PipelineRunFilter(WorkspaceScopedFilter, TaggableFilter):
|
|
613
613
|
"run_metadata",
|
614
614
|
]
|
615
615
|
CLI_EXCLUDE_FIELDS = [
|
616
|
-
*
|
616
|
+
*ProjectScopedFilter.CLI_EXCLUDE_FIELDS,
|
617
617
|
*TaggableFilter.CLI_EXCLUDE_FIELDS,
|
618
618
|
]
|
619
619
|
|
@@ -0,0 +1,203 @@
|
|
1
|
+
# Copyright (c) ZenML GmbH 2023. 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
|
+
"""Models representing projects."""
|
15
|
+
|
16
|
+
import re
|
17
|
+
from typing import Any, Dict, Optional
|
18
|
+
|
19
|
+
from pydantic import Field, model_validator
|
20
|
+
|
21
|
+
from zenml.constants import STR_FIELD_MAX_LENGTH, STR_ID_FIELD_MAX_LENGTH
|
22
|
+
from zenml.models.v2.base.base import (
|
23
|
+
BaseDatedResponseBody,
|
24
|
+
BaseIdentifiedResponse,
|
25
|
+
BaseRequest,
|
26
|
+
BaseResponseMetadata,
|
27
|
+
BaseResponseResources,
|
28
|
+
BaseUpdate,
|
29
|
+
)
|
30
|
+
from zenml.models.v2.base.filter import BaseFilter
|
31
|
+
from zenml.utils.pydantic_utils import before_validator_handler
|
32
|
+
|
33
|
+
# ------------------ Request Model ------------------
|
34
|
+
|
35
|
+
|
36
|
+
class ProjectRequest(BaseRequest):
|
37
|
+
"""Request model for projects."""
|
38
|
+
|
39
|
+
name: str = Field(
|
40
|
+
title="The unique name of the project. The project name must only "
|
41
|
+
"contain only lowercase letters, numbers, underscores, and hyphens and "
|
42
|
+
"be at most 50 characters long.",
|
43
|
+
min_length=1,
|
44
|
+
max_length=STR_ID_FIELD_MAX_LENGTH,
|
45
|
+
pattern=r"^[a-z0-9_-]+$",
|
46
|
+
)
|
47
|
+
display_name: str = Field(
|
48
|
+
default="",
|
49
|
+
title="The display name of the project.",
|
50
|
+
max_length=STR_FIELD_MAX_LENGTH,
|
51
|
+
)
|
52
|
+
description: str = Field(
|
53
|
+
default="",
|
54
|
+
title="The description of the project.",
|
55
|
+
max_length=STR_FIELD_MAX_LENGTH,
|
56
|
+
)
|
57
|
+
|
58
|
+
@model_validator(mode="before")
|
59
|
+
@classmethod
|
60
|
+
@before_validator_handler
|
61
|
+
def _validate_project_name(cls, data: Dict[str, Any]) -> Dict[str, Any]:
|
62
|
+
"""Validate the project name.
|
63
|
+
|
64
|
+
Args:
|
65
|
+
data: The values to validate.
|
66
|
+
|
67
|
+
Returns:
|
68
|
+
The validated values.
|
69
|
+
"""
|
70
|
+
name = data.get("name")
|
71
|
+
display_name = data.get("display_name")
|
72
|
+
|
73
|
+
if not name and not display_name:
|
74
|
+
return data
|
75
|
+
|
76
|
+
if not name:
|
77
|
+
assert display_name
|
78
|
+
|
79
|
+
project_name = display_name.lower().replace(" ", "-")
|
80
|
+
project_name = re.sub(r"[^a-z0-9_-]", "", project_name)
|
81
|
+
|
82
|
+
data["name"] = project_name
|
83
|
+
|
84
|
+
if not display_name:
|
85
|
+
# We just use the name as the display name
|
86
|
+
data["display_name"] = name
|
87
|
+
|
88
|
+
return data
|
89
|
+
|
90
|
+
|
91
|
+
# ------------------ Update Model ------------------
|
92
|
+
|
93
|
+
|
94
|
+
class ProjectUpdate(BaseUpdate):
|
95
|
+
"""Update model for projects."""
|
96
|
+
|
97
|
+
name: Optional[str] = Field(
|
98
|
+
title="The unique name of the project. The project name must only "
|
99
|
+
"contain only lowercase letters, numbers, underscores, and hyphens and "
|
100
|
+
"be at most 50 characters long.",
|
101
|
+
min_length=1,
|
102
|
+
max_length=STR_ID_FIELD_MAX_LENGTH,
|
103
|
+
pattern=r"^[a-z0-9_-]+$",
|
104
|
+
default=None,
|
105
|
+
)
|
106
|
+
display_name: Optional[str] = Field(
|
107
|
+
title="The display name of the project.",
|
108
|
+
max_length=STR_FIELD_MAX_LENGTH,
|
109
|
+
default=None,
|
110
|
+
)
|
111
|
+
description: Optional[str] = Field(
|
112
|
+
title="The description of the project.",
|
113
|
+
max_length=STR_FIELD_MAX_LENGTH,
|
114
|
+
default=None,
|
115
|
+
)
|
116
|
+
|
117
|
+
|
118
|
+
# ------------------ Response Model ------------------
|
119
|
+
|
120
|
+
|
121
|
+
class ProjectResponseBody(BaseDatedResponseBody):
|
122
|
+
"""Response body for projects."""
|
123
|
+
|
124
|
+
display_name: str = Field(
|
125
|
+
title="The display name of the project.",
|
126
|
+
max_length=STR_FIELD_MAX_LENGTH,
|
127
|
+
)
|
128
|
+
|
129
|
+
|
130
|
+
class ProjectResponseMetadata(BaseResponseMetadata):
|
131
|
+
"""Response metadata for projects."""
|
132
|
+
|
133
|
+
description: str = Field(
|
134
|
+
default="",
|
135
|
+
title="The description of the project.",
|
136
|
+
max_length=STR_FIELD_MAX_LENGTH,
|
137
|
+
)
|
138
|
+
|
139
|
+
|
140
|
+
class ProjectResponseResources(BaseResponseResources):
|
141
|
+
"""Class for all resource models associated with the project entity."""
|
142
|
+
|
143
|
+
|
144
|
+
class ProjectResponse(
|
145
|
+
BaseIdentifiedResponse[
|
146
|
+
ProjectResponseBody,
|
147
|
+
ProjectResponseMetadata,
|
148
|
+
ProjectResponseResources,
|
149
|
+
]
|
150
|
+
):
|
151
|
+
"""Response model for projects."""
|
152
|
+
|
153
|
+
name: str = Field(
|
154
|
+
title="The unique name of the project.",
|
155
|
+
max_length=STR_ID_FIELD_MAX_LENGTH,
|
156
|
+
)
|
157
|
+
|
158
|
+
def get_hydrated_version(self) -> "ProjectResponse":
|
159
|
+
"""Get the hydrated version of this project.
|
160
|
+
|
161
|
+
Returns:
|
162
|
+
an instance of the same entity with the metadata field attached.
|
163
|
+
"""
|
164
|
+
from zenml.client import Client
|
165
|
+
|
166
|
+
return Client().zen_store.get_project(self.id)
|
167
|
+
|
168
|
+
# Body and metadata properties
|
169
|
+
|
170
|
+
@property
|
171
|
+
def display_name(self) -> str:
|
172
|
+
"""The `display_name` property.
|
173
|
+
|
174
|
+
Returns:
|
175
|
+
the value of the property.
|
176
|
+
"""
|
177
|
+
return self.get_body().display_name
|
178
|
+
|
179
|
+
@property
|
180
|
+
def description(self) -> str:
|
181
|
+
"""The `description` property.
|
182
|
+
|
183
|
+
Returns:
|
184
|
+
the value of the property.
|
185
|
+
"""
|
186
|
+
return self.get_metadata().description
|
187
|
+
|
188
|
+
|
189
|
+
# ------------------ Filter Model ------------------
|
190
|
+
|
191
|
+
|
192
|
+
class ProjectFilter(BaseFilter):
|
193
|
+
"""Model to enable advanced filtering of all projects."""
|
194
|
+
|
195
|
+
name: Optional[str] = Field(
|
196
|
+
default=None,
|
197
|
+
description="Name of the project",
|
198
|
+
)
|
199
|
+
|
200
|
+
display_name: Optional[str] = Field(
|
201
|
+
default=None,
|
202
|
+
description="Display name of the project",
|
203
|
+
)
|
@@ -20,14 +20,14 @@ from pydantic import Field, model_validator
|
|
20
20
|
|
21
21
|
from zenml.metadata.metadata_types import MetadataType, MetadataTypeEnum
|
22
22
|
from zenml.models.v2.base.scoped import (
|
23
|
-
|
23
|
+
ProjectScopedRequest,
|
24
24
|
)
|
25
25
|
from zenml.models.v2.misc.run_metadata import RunMetadataResource
|
26
26
|
|
27
27
|
# ------------------ Request Model ------------------
|
28
28
|
|
29
29
|
|
30
|
-
class RunMetadataRequest(
|
30
|
+
class RunMetadataRequest(ProjectScopedRequest):
|
31
31
|
"""Request model for run metadata."""
|
32
32
|
|
33
33
|
resources: List[RunMetadataResource] = Field(
|
@@ -33,13 +33,13 @@ from zenml.constants import STR_FIELD_MAX_LENGTH, TEXT_FIELD_MAX_LENGTH
|
|
33
33
|
from zenml.enums import ExecutionStatus
|
34
34
|
from zenml.models.v2.base.base import BaseUpdate
|
35
35
|
from zenml.models.v2.base.scoped import (
|
36
|
+
ProjectScopedFilter,
|
37
|
+
ProjectScopedRequest,
|
38
|
+
ProjectScopedResponse,
|
39
|
+
ProjectScopedResponseBody,
|
40
|
+
ProjectScopedResponseMetadata,
|
41
|
+
ProjectScopedResponseResources,
|
36
42
|
TaggableFilter,
|
37
|
-
WorkspaceScopedFilter,
|
38
|
-
WorkspaceScopedRequest,
|
39
|
-
WorkspaceScopedResponse,
|
40
|
-
WorkspaceScopedResponseBody,
|
41
|
-
WorkspaceScopedResponseMetadata,
|
42
|
-
WorkspaceScopedResponseResources,
|
43
43
|
)
|
44
44
|
from zenml.models.v2.core.code_reference import (
|
45
45
|
CodeReferenceResponse,
|
@@ -64,7 +64,7 @@ if TYPE_CHECKING:
|
|
64
64
|
# ------------------ Request Model ------------------
|
65
65
|
|
66
66
|
|
67
|
-
class RunTemplateRequest(
|
67
|
+
class RunTemplateRequest(ProjectScopedRequest):
|
68
68
|
"""Request model for run templates."""
|
69
69
|
|
70
70
|
name: str = Field(
|
@@ -112,7 +112,7 @@ class RunTemplateUpdate(BaseUpdate):
|
|
112
112
|
# ------------------ Response Model ------------------
|
113
113
|
|
114
114
|
|
115
|
-
class RunTemplateResponseBody(
|
115
|
+
class RunTemplateResponseBody(ProjectScopedResponseBody):
|
116
116
|
"""Response body for run templates."""
|
117
117
|
|
118
118
|
runnable: bool = Field(
|
@@ -128,7 +128,7 @@ class RunTemplateResponseBody(WorkspaceScopedResponseBody):
|
|
128
128
|
)
|
129
129
|
|
130
130
|
|
131
|
-
class RunTemplateResponseMetadata(
|
131
|
+
class RunTemplateResponseMetadata(ProjectScopedResponseMetadata):
|
132
132
|
"""Response metadata for run templates."""
|
133
133
|
|
134
134
|
description: Optional[str] = Field(
|
@@ -146,7 +146,7 @@ class RunTemplateResponseMetadata(WorkspaceScopedResponseMetadata):
|
|
146
146
|
)
|
147
147
|
|
148
148
|
|
149
|
-
class RunTemplateResponseResources(
|
149
|
+
class RunTemplateResponseResources(ProjectScopedResponseResources):
|
150
150
|
"""All resource models associated with the run template."""
|
151
151
|
|
152
152
|
source_deployment: Optional[PipelineDeploymentResponse] = Field(
|
@@ -170,7 +170,7 @@ class RunTemplateResponseResources(WorkspaceScopedResponseResources):
|
|
170
170
|
|
171
171
|
|
172
172
|
class RunTemplateResponse(
|
173
|
-
|
173
|
+
ProjectScopedResponse[
|
174
174
|
RunTemplateResponseBody,
|
175
175
|
RunTemplateResponseMetadata,
|
176
176
|
RunTemplateResponseResources,
|
@@ -308,11 +308,11 @@ class RunTemplateResponse(
|
|
308
308
|
# ------------------ Filter Model ------------------
|
309
309
|
|
310
310
|
|
311
|
-
class RunTemplateFilter(
|
311
|
+
class RunTemplateFilter(ProjectScopedFilter, TaggableFilter):
|
312
312
|
"""Model for filtering of run templates."""
|
313
313
|
|
314
314
|
FILTER_EXCLUDE_FIELDS: ClassVar[List[str]] = [
|
315
|
-
*
|
315
|
+
*ProjectScopedFilter.FILTER_EXCLUDE_FIELDS,
|
316
316
|
*TaggableFilter.FILTER_EXCLUDE_FIELDS,
|
317
317
|
"code_repository_id",
|
318
318
|
"stack_id",
|
@@ -322,11 +322,11 @@ class RunTemplateFilter(WorkspaceScopedFilter, TaggableFilter):
|
|
322
322
|
"stack",
|
323
323
|
]
|
324
324
|
CUSTOM_SORTING_OPTIONS = [
|
325
|
-
*
|
325
|
+
*ProjectScopedFilter.CUSTOM_SORTING_OPTIONS,
|
326
326
|
*TaggableFilter.CUSTOM_SORTING_OPTIONS,
|
327
327
|
]
|
328
328
|
CLI_EXCLUDE_FIELDS: ClassVar[List[str]] = [
|
329
|
-
*
|
329
|
+
*ProjectScopedFilter.CLI_EXCLUDE_FIELDS,
|
330
330
|
*TaggableFilter.CLI_EXCLUDE_FIELDS,
|
331
331
|
]
|
332
332
|
|
zenml/models/v2/core/schedule.py
CHANGED
@@ -24,12 +24,12 @@ from zenml.logger import get_logger
|
|
24
24
|
from zenml.metadata.metadata_types import MetadataType
|
25
25
|
from zenml.models.v2.base.base import BaseUpdate
|
26
26
|
from zenml.models.v2.base.scoped import (
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
27
|
+
ProjectScopedFilter,
|
28
|
+
ProjectScopedRequest,
|
29
|
+
ProjectScopedResponse,
|
30
|
+
ProjectScopedResponseBody,
|
31
|
+
ProjectScopedResponseMetadata,
|
32
|
+
ProjectScopedResponseResources,
|
33
33
|
)
|
34
34
|
from zenml.utils.time_utils import to_utc_timezone
|
35
35
|
|
@@ -39,7 +39,7 @@ logger = get_logger(__name__)
|
|
39
39
|
# ------------------ Request Model ------------------
|
40
40
|
|
41
41
|
|
42
|
-
class ScheduleRequest(
|
42
|
+
class ScheduleRequest(ProjectScopedRequest):
|
43
43
|
"""Request model for schedules."""
|
44
44
|
|
45
45
|
name: str
|
@@ -132,7 +132,7 @@ class ScheduleUpdate(BaseUpdate):
|
|
132
132
|
# ------------------ Response Model ------------------
|
133
133
|
|
134
134
|
|
135
|
-
class ScheduleResponseBody(
|
135
|
+
class ScheduleResponseBody(ProjectScopedResponseBody):
|
136
136
|
"""Response body for schedules."""
|
137
137
|
|
138
138
|
active: bool
|
@@ -144,7 +144,7 @@ class ScheduleResponseBody(WorkspaceScopedResponseBody):
|
|
144
144
|
run_once_start_time: Optional[datetime] = None
|
145
145
|
|
146
146
|
|
147
|
-
class ScheduleResponseMetadata(
|
147
|
+
class ScheduleResponseMetadata(ProjectScopedResponseMetadata):
|
148
148
|
"""Response metadata for schedules."""
|
149
149
|
|
150
150
|
orchestrator_id: Optional[UUID]
|
@@ -156,12 +156,12 @@ class ScheduleResponseMetadata(WorkspaceScopedResponseMetadata):
|
|
156
156
|
)
|
157
157
|
|
158
158
|
|
159
|
-
class ScheduleResponseResources(
|
159
|
+
class ScheduleResponseResources(ProjectScopedResponseResources):
|
160
160
|
"""Class for all resource models associated with the schedule entity."""
|
161
161
|
|
162
162
|
|
163
163
|
class ScheduleResponse(
|
164
|
-
|
164
|
+
ProjectScopedResponse[
|
165
165
|
ScheduleResponseBody,
|
166
166
|
ScheduleResponseMetadata,
|
167
167
|
ScheduleResponseResources,
|
@@ -304,7 +304,7 @@ class ScheduleResponse(
|
|
304
304
|
# ------------------ Filter Model ------------------
|
305
305
|
|
306
306
|
|
307
|
-
class ScheduleFilter(
|
307
|
+
class ScheduleFilter(ProjectScopedFilter):
|
308
308
|
"""Model to enable advanced filtering of all Users."""
|
309
309
|
|
310
310
|
pipeline_id: Optional[Union[UUID, str]] = Field(
|
zenml/models/v2/core/secret.py
CHANGED
@@ -162,7 +162,7 @@ class SecretResponse(
|
|
162
162
|
)
|
163
163
|
|
164
164
|
def get_hydrated_version(self) -> "SecretResponse":
|
165
|
-
"""Get the hydrated version of this
|
165
|
+
"""Get the hydrated version of this secret.
|
166
166
|
|
167
167
|
Returns:
|
168
168
|
an instance of the same entity with the metadata field attached.
|
zenml/models/v2/core/service.py
CHANGED
@@ -33,12 +33,12 @@ from sqlalchemy.sql.elements import ColumnElement
|
|
33
33
|
from zenml.constants import STR_FIELD_MAX_LENGTH
|
34
34
|
from zenml.models.v2.base.base import BaseUpdate
|
35
35
|
from zenml.models.v2.base.scoped import (
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
36
|
+
ProjectScopedFilter,
|
37
|
+
ProjectScopedRequest,
|
38
|
+
ProjectScopedResponse,
|
39
|
+
ProjectScopedResponseBody,
|
40
|
+
ProjectScopedResponseMetadata,
|
41
|
+
ProjectScopedResponseResources,
|
42
42
|
)
|
43
43
|
from zenml.services.service_status import ServiceState
|
44
44
|
from zenml.services.service_type import ServiceType
|
@@ -53,7 +53,7 @@ if TYPE_CHECKING:
|
|
53
53
|
# ------------------ Request Model ------------------
|
54
54
|
|
55
55
|
|
56
|
-
class ServiceRequest(
|
56
|
+
class ServiceRequest(ProjectScopedRequest):
|
57
57
|
"""Request model for services."""
|
58
58
|
|
59
59
|
name: str = Field(
|
@@ -178,7 +178,7 @@ class ServiceUpdate(BaseUpdate):
|
|
178
178
|
# ------------------ Response Model ------------------
|
179
179
|
|
180
180
|
|
181
|
-
class ServiceResponseBody(
|
181
|
+
class ServiceResponseBody(ProjectScopedResponseBody):
|
182
182
|
"""Response body for services."""
|
183
183
|
|
184
184
|
service_type: ServiceType = Field(
|
@@ -200,7 +200,7 @@ class ServiceResponseBody(WorkspaceScopedResponseBody):
|
|
200
200
|
)
|
201
201
|
|
202
202
|
|
203
|
-
class ServiceResponseMetadata(
|
203
|
+
class ServiceResponseMetadata(ProjectScopedResponseMetadata):
|
204
204
|
"""Response metadata for services."""
|
205
205
|
|
206
206
|
service_source: Optional[str] = Field(
|
@@ -229,7 +229,7 @@ class ServiceResponseMetadata(WorkspaceScopedResponseMetadata):
|
|
229
229
|
)
|
230
230
|
|
231
231
|
|
232
|
-
class ServiceResponseResources(
|
232
|
+
class ServiceResponseResources(ProjectScopedResponseResources):
|
233
233
|
"""Class for all resource models associated with the service entity."""
|
234
234
|
|
235
235
|
pipeline_run: Optional["PipelineRunResponse"] = Field(
|
@@ -251,7 +251,7 @@ class ServiceResponseResources(WorkspaceScopedResponseResources):
|
|
251
251
|
|
252
252
|
|
253
253
|
class ServiceResponse(
|
254
|
-
|
254
|
+
ProjectScopedResponse[
|
255
255
|
ServiceResponseBody, ServiceResponseMetadata, ServiceResponseResources
|
256
256
|
]
|
257
257
|
):
|
@@ -404,7 +404,7 @@ class ServiceResponse(
|
|
404
404
|
# ------------------ Filter Model ------------------
|
405
405
|
|
406
406
|
|
407
|
-
class ServiceFilter(
|
407
|
+
class ServiceFilter(ProjectScopedFilter):
|
408
408
|
"""Model to enable advanced filtering of services."""
|
409
409
|
|
410
410
|
name: Optional[str] = Field(
|
@@ -474,7 +474,7 @@ class ServiceFilter(WorkspaceScopedFilter):
|
|
474
474
|
|
475
475
|
# Artifact name and type are not DB fields and need to be handled separately
|
476
476
|
FILTER_EXCLUDE_FIELDS = [
|
477
|
-
*
|
477
|
+
*ProjectScopedFilter.FILTER_EXCLUDE_FIELDS,
|
478
478
|
"flavor",
|
479
479
|
"type",
|
480
480
|
"pipeline_step_name",
|
@@ -483,7 +483,7 @@ class ServiceFilter(WorkspaceScopedFilter):
|
|
483
483
|
"config",
|
484
484
|
]
|
485
485
|
CLI_EXCLUDE_FIELDS: ClassVar[List[str]] = [
|
486
|
-
*
|
486
|
+
*ProjectScopedFilter.CLI_EXCLUDE_FIELDS,
|
487
487
|
"flavor",
|
488
488
|
"type",
|
489
489
|
"pipeline_step_name",
|
zenml/models/v2/core/step_run.py
CHANGED
@@ -35,12 +35,12 @@ from zenml.enums import ExecutionStatus, StepRunInputArtifactType
|
|
35
35
|
from zenml.metadata.metadata_types import MetadataType
|
36
36
|
from zenml.models.v2.base.base import BaseUpdate
|
37
37
|
from zenml.models.v2.base.scoped import (
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
38
|
+
ProjectScopedFilter,
|
39
|
+
ProjectScopedRequest,
|
40
|
+
ProjectScopedResponse,
|
41
|
+
ProjectScopedResponseBody,
|
42
|
+
ProjectScopedResponseMetadata,
|
43
|
+
ProjectScopedResponseResources,
|
44
44
|
)
|
45
45
|
from zenml.models.v2.core.artifact_version import ArtifactVersionResponse
|
46
46
|
from zenml.models.v2.core.model_version import ModelVersionResponse
|
@@ -79,7 +79,7 @@ class StepRunInputResponse(ArtifactVersionResponse):
|
|
79
79
|
# ------------------ Request Model ------------------
|
80
80
|
|
81
81
|
|
82
|
-
class StepRunRequest(
|
82
|
+
class StepRunRequest(ProjectScopedRequest):
|
83
83
|
"""Request model for step runs."""
|
84
84
|
|
85
85
|
name: str = Field(
|
@@ -168,7 +168,7 @@ class StepRunUpdate(BaseUpdate):
|
|
168
168
|
|
169
169
|
|
170
170
|
# ------------------ Response Model ------------------
|
171
|
-
class StepRunResponseBody(
|
171
|
+
class StepRunResponseBody(ProjectScopedResponseBody):
|
172
172
|
"""Response body for step runs."""
|
173
173
|
|
174
174
|
status: ExecutionStatus = Field(title="The status of the step.")
|
@@ -196,7 +196,7 @@ class StepRunResponseBody(WorkspaceScopedResponseBody):
|
|
196
196
|
model_config = ConfigDict(protected_namespaces=())
|
197
197
|
|
198
198
|
|
199
|
-
class StepRunResponseMetadata(
|
199
|
+
class StepRunResponseMetadata(ProjectScopedResponseMetadata):
|
200
200
|
"""Response metadata for step runs."""
|
201
201
|
|
202
202
|
# Configuration
|
@@ -250,7 +250,7 @@ class StepRunResponseMetadata(WorkspaceScopedResponseMetadata):
|
|
250
250
|
)
|
251
251
|
|
252
252
|
|
253
|
-
class StepRunResponseResources(
|
253
|
+
class StepRunResponseResources(ProjectScopedResponseResources):
|
254
254
|
"""Class for all resource models associated with the step run entity."""
|
255
255
|
|
256
256
|
model_version: Optional[ModelVersionResponse] = None
|
@@ -265,7 +265,7 @@ class StepRunResponseResources(WorkspaceScopedResponseResources):
|
|
265
265
|
|
266
266
|
|
267
267
|
class StepRunResponse(
|
268
|
-
|
268
|
+
ProjectScopedResponse[
|
269
269
|
StepRunResponseBody, StepRunResponseMetadata, StepRunResponseResources
|
270
270
|
]
|
271
271
|
):
|
@@ -504,11 +504,11 @@ class StepRunResponse(
|
|
504
504
|
# ------------------ Filter Model ------------------
|
505
505
|
|
506
506
|
|
507
|
-
class StepRunFilter(
|
507
|
+
class StepRunFilter(ProjectScopedFilter):
|
508
508
|
"""Model to enable advanced filtering of step runs."""
|
509
509
|
|
510
510
|
FILTER_EXCLUDE_FIELDS: ClassVar[List[str]] = [
|
511
|
-
*
|
511
|
+
*ProjectScopedFilter.FILTER_EXCLUDE_FIELDS,
|
512
512
|
"model",
|
513
513
|
"run_metadata",
|
514
514
|
]
|