zenml-nightly 0.75.0.dev20250313__py3-none-any.whl → 0.75.0.dev20250314__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/pipeline.py +3 -3
- zenml/cli/project.py +172 -0
- 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 +347 -340
- zenml/config/global_config.py +41 -43
- zenml/constants.py +5 -3
- zenml/event_hub/event_hub.py +1 -1
- zenml/integrations/gcp/service_connectors/gcp_service_connector.py +7 -6
- 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/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 +17 -17
- 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/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/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 +2 -2
- 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/zen_server/rbac/endpoint_utils.py +17 -17
- zenml/zen_server/rbac/models.py +20 -20
- 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 +12 -16
- 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 +5 -5
- 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 +3 -2
- zenml/zen_stores/base_zen_store.py +35 -39
- 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 +54 -62
- 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 +258 -268
- zenml/zen_stores/zen_store_interface.py +56 -70
- {zenml_nightly-0.75.0.dev20250313.dist-info → zenml_nightly-0.75.0.dev20250314.dist-info}/METADATA +1 -1
- {zenml_nightly-0.75.0.dev20250313.dist-info → zenml_nightly-0.75.0.dev20250314.dist-info}/RECORD +121 -119
- 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.dev20250314.dist-info}/LICENSE +0 -0
- {zenml_nightly-0.75.0.dev20250313.dist-info → zenml_nightly-0.75.0.dev20250314.dist-info}/WHEEL +0 -0
- {zenml_nightly-0.75.0.dev20250313.dist-info → zenml_nightly-0.75.0.dev20250314.dist-info}/entry_points.txt +0 -0
@@ -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
|
]
|
zenml/models/v2/core/trigger.py
CHANGED
@@ -33,12 +33,12 @@ from zenml.constants import STR_FIELD_MAX_LENGTH
|
|
33
33
|
from zenml.models.v2.base.base import BaseUpdate
|
34
34
|
from zenml.models.v2.base.page import Page
|
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.models.v2.core.trigger_execution import TriggerExecutionResponse
|
44
44
|
|
@@ -57,7 +57,7 @@ if TYPE_CHECKING:
|
|
57
57
|
# ------------------ Request Model ------------------
|
58
58
|
|
59
59
|
|
60
|
-
class TriggerRequest(
|
60
|
+
class TriggerRequest(ProjectScopedRequest):
|
61
61
|
"""Model for creating a new trigger."""
|
62
62
|
|
63
63
|
name: str = Field(
|
@@ -145,7 +145,7 @@ class TriggerUpdate(BaseUpdate):
|
|
145
145
|
# ------------------ Response Model ------------------
|
146
146
|
|
147
147
|
|
148
|
-
class TriggerResponseBody(
|
148
|
+
class TriggerResponseBody(ProjectScopedResponseBody):
|
149
149
|
"""Response body for triggers."""
|
150
150
|
|
151
151
|
action_flavor: str = Field(
|
@@ -172,7 +172,7 @@ class TriggerResponseBody(WorkspaceScopedResponseBody):
|
|
172
172
|
)
|
173
173
|
|
174
174
|
|
175
|
-
class TriggerResponseMetadata(
|
175
|
+
class TriggerResponseMetadata(ProjectScopedResponseMetadata):
|
176
176
|
"""Response metadata for triggers."""
|
177
177
|
|
178
178
|
description: str = Field(
|
@@ -192,7 +192,7 @@ class TriggerResponseMetadata(WorkspaceScopedResponseMetadata):
|
|
192
192
|
)
|
193
193
|
|
194
194
|
|
195
|
-
class TriggerResponseResources(
|
195
|
+
class TriggerResponseResources(ProjectScopedResponseResources):
|
196
196
|
"""Class for all resource models associated with the trigger entity."""
|
197
197
|
|
198
198
|
action: "ActionResponse" = Field(
|
@@ -209,7 +209,7 @@ class TriggerResponseResources(WorkspaceScopedResponseResources):
|
|
209
209
|
|
210
210
|
|
211
211
|
class TriggerResponse(
|
212
|
-
|
212
|
+
ProjectScopedResponse[
|
213
213
|
TriggerResponseBody, TriggerResponseMetadata, TriggerResponseResources
|
214
214
|
]
|
215
215
|
):
|
@@ -324,11 +324,11 @@ class TriggerResponse(
|
|
324
324
|
# ------------------ Filter Model ------------------
|
325
325
|
|
326
326
|
|
327
|
-
class TriggerFilter(
|
327
|
+
class TriggerFilter(ProjectScopedFilter):
|
328
328
|
"""Model to enable advanced filtering of all triggers."""
|
329
329
|
|
330
330
|
FILTER_EXCLUDE_FIELDS: ClassVar[List[str]] = [
|
331
|
-
*
|
331
|
+
*ProjectScopedFilter.FILTER_EXCLUDE_FIELDS,
|
332
332
|
"action_flavor",
|
333
333
|
"action_subtype",
|
334
334
|
"event_source_flavor",
|
@@ -27,7 +27,7 @@ from zenml.models.v2.base.base import (
|
|
27
27
|
BaseDatedResponseBody,
|
28
28
|
BaseResponseResources,
|
29
29
|
)
|
30
|
-
from zenml.models.v2.base.scoped import
|
30
|
+
from zenml.models.v2.base.scoped import ProjectScopedFilter
|
31
31
|
|
32
32
|
if TYPE_CHECKING:
|
33
33
|
from zenml.models.v2.core.trigger import TriggerResponse
|
@@ -109,7 +109,7 @@ class TriggerExecutionResponse(
|
|
109
109
|
# ------------------ Filter Model ------------------
|
110
110
|
|
111
111
|
|
112
|
-
class TriggerExecutionFilter(
|
112
|
+
class TriggerExecutionFilter(ProjectScopedFilter):
|
113
113
|
"""Model to enable advanced filtering of all trigger executions."""
|
114
114
|
|
115
115
|
trigger_id: Optional[Union[UUID, str]] = Field(
|
zenml/models/v2/core/user.py
CHANGED
@@ -81,10 +81,6 @@ class UserBase(BaseModel):
|
|
81
81
|
default=None,
|
82
82
|
title="The metadata associated with the user.",
|
83
83
|
)
|
84
|
-
default_workspace_id: Optional[UUID] = Field(
|
85
|
-
default=None,
|
86
|
-
title="The default workspace ID for the user.",
|
87
|
-
)
|
88
84
|
|
89
85
|
@classmethod
|
90
86
|
def _get_crypt_context(cls) -> "CryptContext":
|
@@ -283,10 +279,6 @@ class UserResponseBody(BaseDatedResponseBody):
|
|
283
279
|
is_admin: bool = Field(
|
284
280
|
title="Whether the account is an administrator.",
|
285
281
|
)
|
286
|
-
default_workspace_id: Optional[UUID] = Field(
|
287
|
-
default=None,
|
288
|
-
title="The default workspace ID for the user.",
|
289
|
-
)
|
290
282
|
|
291
283
|
|
292
284
|
class UserResponseMetadata(BaseResponseMetadata):
|
@@ -403,15 +395,6 @@ class UserResponse(
|
|
403
395
|
"""
|
404
396
|
return self.get_body().is_admin
|
405
397
|
|
406
|
-
@property
|
407
|
-
def default_workspace_id(self) -> Optional[UUID]:
|
408
|
-
"""The `default_workspace_id` property.
|
409
|
-
|
410
|
-
Returns:
|
411
|
-
the value of the property.
|
412
|
-
"""
|
413
|
-
return self.get_body().default_workspace_id
|
414
|
-
|
415
398
|
@property
|
416
399
|
def email(self) -> Optional[str]:
|
417
400
|
"""The `email` property.
|