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
zenml/models/v2/base/scoped.py
CHANGED
@@ -42,8 +42,8 @@ from zenml.models.v2.base.filter import AnyQuery, BaseFilter
|
|
42
42
|
if TYPE_CHECKING:
|
43
43
|
from sqlalchemy.sql.elements import ColumnElement
|
44
44
|
|
45
|
+
from zenml.models.v2.core.project import ProjectResponse
|
45
46
|
from zenml.models.v2.core.user import UserResponse
|
46
|
-
from zenml.models.v2.core.workspace import WorkspaceResponse
|
47
47
|
from zenml.zen_stores.schemas import BaseSchema
|
48
48
|
|
49
49
|
AnySchema = TypeVar("AnySchema", bound=BaseSchema)
|
@@ -80,24 +80,22 @@ class UserScopedRequest(BaseRequest):
|
|
80
80
|
return metadata
|
81
81
|
|
82
82
|
|
83
|
-
class
|
84
|
-
"""Base
|
83
|
+
class ProjectScopedRequest(UserScopedRequest):
|
84
|
+
"""Base project-scoped request domain model.
|
85
85
|
|
86
|
-
Used as a base class for all domain models that are
|
86
|
+
Used as a base class for all domain models that are project-scoped.
|
87
87
|
"""
|
88
88
|
|
89
|
-
|
90
|
-
title="The workspace to which this resource belongs."
|
91
|
-
)
|
89
|
+
project: UUID = Field(title="The project to which this resource belongs.")
|
92
90
|
|
93
91
|
def get_analytics_metadata(self) -> Dict[str, Any]:
|
94
|
-
"""Fetches the analytics metadata for
|
92
|
+
"""Fetches the analytics metadata for project scoped models.
|
95
93
|
|
96
94
|
Returns:
|
97
95
|
The analytics metadata.
|
98
96
|
"""
|
99
97
|
metadata = super().get_analytics_metadata()
|
100
|
-
metadata["
|
98
|
+
metadata["project_id"] = self.project
|
101
99
|
return metadata
|
102
100
|
|
103
101
|
|
@@ -285,79 +283,77 @@ class UserScopedFilter(BaseFilter):
|
|
285
283
|
return query
|
286
284
|
|
287
285
|
|
288
|
-
#
|
286
|
+
# Project-scoped models
|
289
287
|
|
290
288
|
|
291
|
-
class
|
292
|
-
"""Base
|
289
|
+
class ProjectScopedResponseBody(UserScopedResponseBody):
|
290
|
+
"""Base project-scoped body."""
|
293
291
|
|
294
292
|
|
295
|
-
class
|
296
|
-
"""Base
|
293
|
+
class ProjectScopedResponseMetadata(UserScopedResponseMetadata):
|
294
|
+
"""Base project-scoped metadata."""
|
297
295
|
|
298
|
-
|
299
|
-
title="The workspace of this resource."
|
300
|
-
)
|
296
|
+
project: "ProjectResponse" = Field(title="The project of this resource.")
|
301
297
|
|
302
298
|
|
303
|
-
class
|
304
|
-
"""Base
|
299
|
+
class ProjectScopedResponseResources(UserScopedResponseResources):
|
300
|
+
"""Base project-scoped resources."""
|
305
301
|
|
306
302
|
|
307
|
-
|
308
|
-
|
309
|
-
"
|
303
|
+
ProjectBody = TypeVar("ProjectBody", bound=ProjectScopedResponseBody)
|
304
|
+
ProjectMetadata = TypeVar(
|
305
|
+
"ProjectMetadata", bound=ProjectScopedResponseMetadata
|
310
306
|
)
|
311
|
-
|
312
|
-
"
|
307
|
+
ProjectResources = TypeVar(
|
308
|
+
"ProjectResources", bound=ProjectScopedResponseResources
|
313
309
|
)
|
314
310
|
|
315
311
|
|
316
|
-
class
|
317
|
-
UserScopedResponse[
|
318
|
-
Generic[
|
312
|
+
class ProjectScopedResponse(
|
313
|
+
UserScopedResponse[ProjectBody, ProjectMetadata, ProjectResources],
|
314
|
+
Generic[ProjectBody, ProjectMetadata, ProjectResources],
|
319
315
|
):
|
320
|
-
"""Base
|
316
|
+
"""Base project-scoped domain model.
|
321
317
|
|
322
|
-
Used as a base class for all domain models that are
|
318
|
+
Used as a base class for all domain models that are project-scoped.
|
323
319
|
"""
|
324
320
|
|
325
321
|
# Analytics
|
326
322
|
def get_analytics_metadata(self) -> Dict[str, Any]:
|
327
|
-
"""Fetches the analytics metadata for
|
323
|
+
"""Fetches the analytics metadata for project scoped models.
|
328
324
|
|
329
325
|
Returns:
|
330
326
|
The analytics metadata.
|
331
327
|
"""
|
332
328
|
metadata = super().get_analytics_metadata()
|
333
|
-
if self.
|
334
|
-
metadata["
|
329
|
+
if self.project is not None:
|
330
|
+
metadata["project_id"] = self.project.id
|
335
331
|
return metadata
|
336
332
|
|
337
333
|
# Body and metadata properties
|
338
334
|
@property
|
339
|
-
def
|
340
|
-
"""The
|
335
|
+
def project(self) -> "ProjectResponse":
|
336
|
+
"""The project property.
|
341
337
|
|
342
338
|
Returns:
|
343
339
|
the value of the property.
|
344
340
|
"""
|
345
|
-
return self.get_metadata().
|
341
|
+
return self.get_metadata().project
|
346
342
|
|
347
343
|
|
348
344
|
# ---------------------- Filter Models ----------------------
|
349
345
|
|
350
346
|
|
351
|
-
class
|
352
|
-
"""Model to enable advanced scoping with
|
347
|
+
class ProjectScopedFilter(UserScopedFilter):
|
348
|
+
"""Model to enable advanced scoping with project."""
|
353
349
|
|
354
350
|
FILTER_EXCLUDE_FIELDS: ClassVar[List[str]] = [
|
355
351
|
*UserScopedFilter.FILTER_EXCLUDE_FIELDS,
|
356
|
-
"
|
352
|
+
"project",
|
357
353
|
]
|
358
|
-
|
354
|
+
project: Optional[Union[UUID, str]] = Field(
|
359
355
|
default=None,
|
360
|
-
description="Name/ID of the
|
356
|
+
description="Name/ID of the project which the search is scoped to. "
|
361
357
|
"This field must always be set and is always applied in addition to "
|
362
358
|
"the other filters, regardless of the value of the "
|
363
359
|
"logical_operator field.",
|
@@ -379,30 +375,30 @@ class WorkspaceScopedFilter(UserScopedFilter):
|
|
379
375
|
The query with filter applied.
|
380
376
|
|
381
377
|
Raises:
|
382
|
-
ValueError: If the
|
378
|
+
ValueError: If the project scope is missing from the filter.
|
383
379
|
"""
|
384
380
|
query = super().apply_filter(query=query, table=table)
|
385
381
|
|
386
|
-
# The
|
382
|
+
# The project scope must always be set and must be a UUID. If the
|
387
383
|
# client sets this to a string, the server will try to resolve it to a
|
388
|
-
#
|
384
|
+
# project ID.
|
389
385
|
#
|
390
386
|
# If not set by the client, the server will fall back to using the
|
391
|
-
# user's default
|
392
|
-
# they are configured. If this also fails to yield a
|
387
|
+
# user's default project or even the server's default project, if
|
388
|
+
# they are configured. If this also fails to yield a project, this
|
393
389
|
# method will raise a ValueError.
|
394
390
|
#
|
395
|
-
# See: SqlZenStore.
|
391
|
+
# See: SqlZenStore._set_filter_project_id
|
396
392
|
|
397
|
-
if not self.
|
398
|
-
raise ValueError("
|
393
|
+
if not self.project:
|
394
|
+
raise ValueError("Project scope missing from the filter.")
|
399
395
|
|
400
|
-
if not isinstance(self.
|
396
|
+
if not isinstance(self.project, UUID):
|
401
397
|
raise ValueError(
|
402
|
-
f"
|
398
|
+
f"Project scope must be a UUID, got {type(self.project)}."
|
403
399
|
)
|
404
400
|
|
405
|
-
scope_filter = getattr(table, "
|
401
|
+
scope_filter = getattr(table, "project_id") == self.project
|
406
402
|
query = query.where(scope_filter)
|
407
403
|
|
408
404
|
return query
|
@@ -470,7 +466,7 @@ class TaggableFilter(BaseFilter):
|
|
470
466
|
|
471
467
|
query = super().apply_filter(query=query, table=table)
|
472
468
|
|
473
|
-
if self.tags
|
469
|
+
if self.tags:
|
474
470
|
query = query.join(
|
475
471
|
TagResourceSchema,
|
476
472
|
TagResourceSchema.resource_id == getattr(table, "id"),
|
@@ -491,7 +487,7 @@ class TaggableFilter(BaseFilter):
|
|
491
487
|
"""
|
492
488
|
custom_filters = super().get_custom_filters(table)
|
493
489
|
|
494
|
-
if self.tags
|
490
|
+
if self.tags:
|
495
491
|
from sqlmodel import exists, select
|
496
492
|
|
497
493
|
from zenml.zen_stores.schemas import TagResourceSchema, TagSchema
|
zenml/models/v2/core/action.py
CHANGED
@@ -29,12 +29,12 @@ from zenml.constants import STR_FIELD_MAX_LENGTH
|
|
29
29
|
from zenml.enums import PluginSubType
|
30
30
|
from zenml.models.v2.base.base import BaseUpdate
|
31
31
|
from zenml.models.v2.base.scoped import (
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
32
|
+
ProjectScopedFilter,
|
33
|
+
ProjectScopedRequest,
|
34
|
+
ProjectScopedResponse,
|
35
|
+
ProjectScopedResponseBody,
|
36
|
+
ProjectScopedResponseMetadata,
|
37
|
+
ProjectScopedResponseResources,
|
38
38
|
)
|
39
39
|
from zenml.models.v2.core.user import UserResponse
|
40
40
|
|
@@ -47,7 +47,7 @@ if TYPE_CHECKING:
|
|
47
47
|
# ------------------ Request Model ------------------
|
48
48
|
|
49
49
|
|
50
|
-
class ActionRequest(
|
50
|
+
class ActionRequest(ProjectScopedRequest):
|
51
51
|
"""Model for creating a new action."""
|
52
52
|
|
53
53
|
name: str = Field(
|
@@ -131,7 +131,7 @@ class ActionUpdate(BaseUpdate):
|
|
131
131
|
# ------------------ Response Model ------------------
|
132
132
|
|
133
133
|
|
134
|
-
class ActionResponseBody(
|
134
|
+
class ActionResponseBody(ProjectScopedResponseBody):
|
135
135
|
"""Response body for actions."""
|
136
136
|
|
137
137
|
flavor: str = Field(
|
@@ -144,7 +144,7 @@ class ActionResponseBody(WorkspaceScopedResponseBody):
|
|
144
144
|
)
|
145
145
|
|
146
146
|
|
147
|
-
class ActionResponseMetadata(
|
147
|
+
class ActionResponseMetadata(ProjectScopedResponseMetadata):
|
148
148
|
"""Response metadata for actions."""
|
149
149
|
|
150
150
|
description: str = Field(
|
@@ -161,7 +161,7 @@ class ActionResponseMetadata(WorkspaceScopedResponseMetadata):
|
|
161
161
|
)
|
162
162
|
|
163
163
|
|
164
|
-
class ActionResponseResources(
|
164
|
+
class ActionResponseResources(ProjectScopedResponseResources):
|
165
165
|
"""Class for all resource models associated with the action entity."""
|
166
166
|
|
167
167
|
service_account: UserResponse = Field(
|
@@ -170,7 +170,7 @@ class ActionResponseResources(WorkspaceScopedResponseResources):
|
|
170
170
|
|
171
171
|
|
172
172
|
class ActionResponse(
|
173
|
-
|
173
|
+
ProjectScopedResponse[
|
174
174
|
ActionResponseBody, ActionResponseMetadata, ActionResponseResources
|
175
175
|
]
|
176
176
|
):
|
@@ -259,7 +259,7 @@ class ActionResponse(
|
|
259
259
|
# ------------------ Filter Model ------------------
|
260
260
|
|
261
261
|
|
262
|
-
class ActionFilter(
|
262
|
+
class ActionFilter(ProjectScopedFilter):
|
263
263
|
"""Model to enable advanced filtering of all actions."""
|
264
264
|
|
265
265
|
name: Optional[str] = Field(
|
zenml/models/v2/core/artifact.py
CHANGED
@@ -30,13 +30,13 @@ from pydantic import Field
|
|
30
30
|
from zenml.constants import SORT_BY_LATEST_VERSION_KEY, STR_FIELD_MAX_LENGTH
|
31
31
|
from zenml.models.v2.base.base import BaseUpdate
|
32
32
|
from zenml.models.v2.base.scoped import (
|
33
|
+
ProjectScopedFilter,
|
34
|
+
ProjectScopedRequest,
|
35
|
+
ProjectScopedResponse,
|
36
|
+
ProjectScopedResponseBody,
|
37
|
+
ProjectScopedResponseMetadata,
|
38
|
+
ProjectScopedResponseResources,
|
33
39
|
TaggableFilter,
|
34
|
-
WorkspaceScopedFilter,
|
35
|
-
WorkspaceScopedRequest,
|
36
|
-
WorkspaceScopedResponse,
|
37
|
-
WorkspaceScopedResponseBody,
|
38
|
-
WorkspaceScopedResponseMetadata,
|
39
|
-
WorkspaceScopedResponseResources,
|
40
40
|
)
|
41
41
|
from zenml.models.v2.core.tag import TagResponse
|
42
42
|
|
@@ -51,7 +51,7 @@ AnyQuery = TypeVar("AnyQuery", bound=Any)
|
|
51
51
|
# ------------------ Request Model ------------------
|
52
52
|
|
53
53
|
|
54
|
-
class ArtifactRequest(
|
54
|
+
class ArtifactRequest(ProjectScopedRequest):
|
55
55
|
"""Artifact request model."""
|
56
56
|
|
57
57
|
name: str = Field(
|
@@ -84,7 +84,7 @@ class ArtifactUpdate(BaseUpdate):
|
|
84
84
|
# ------------------ Response Model ------------------
|
85
85
|
|
86
86
|
|
87
|
-
class ArtifactResponseBody(
|
87
|
+
class ArtifactResponseBody(ProjectScopedResponseBody):
|
88
88
|
"""Response body for artifacts."""
|
89
89
|
|
90
90
|
tags: List[TagResponse] = Field(
|
@@ -94,7 +94,7 @@ class ArtifactResponseBody(WorkspaceScopedResponseBody):
|
|
94
94
|
latest_version_id: Optional[UUID] = None
|
95
95
|
|
96
96
|
|
97
|
-
class ArtifactResponseMetadata(
|
97
|
+
class ArtifactResponseMetadata(ProjectScopedResponseMetadata):
|
98
98
|
"""Response metadata for artifacts."""
|
99
99
|
|
100
100
|
has_custom_name: bool = Field(
|
@@ -103,12 +103,12 @@ class ArtifactResponseMetadata(WorkspaceScopedResponseMetadata):
|
|
103
103
|
)
|
104
104
|
|
105
105
|
|
106
|
-
class ArtifactResponseResources(
|
106
|
+
class ArtifactResponseResources(ProjectScopedResponseResources):
|
107
107
|
"""Class for all resource models associated with the Artifact Entity."""
|
108
108
|
|
109
109
|
|
110
110
|
class ArtifactResponse(
|
111
|
-
|
111
|
+
ProjectScopedResponse[
|
112
112
|
ArtifactResponseBody,
|
113
113
|
ArtifactResponseMetadata,
|
114
114
|
ArtifactResponseResources,
|
@@ -185,22 +185,22 @@ class ArtifactResponse(
|
|
185
185
|
# ------------------ Filter Model ------------------
|
186
186
|
|
187
187
|
|
188
|
-
class ArtifactFilter(
|
188
|
+
class ArtifactFilter(ProjectScopedFilter, TaggableFilter):
|
189
189
|
"""Model to enable advanced filtering of artifacts."""
|
190
190
|
|
191
191
|
FILTER_EXCLUDE_FIELDS: ClassVar[List[str]] = [
|
192
|
-
*
|
192
|
+
*ProjectScopedFilter.FILTER_EXCLUDE_FIELDS,
|
193
193
|
*TaggableFilter.FILTER_EXCLUDE_FIELDS,
|
194
194
|
]
|
195
195
|
|
196
196
|
CUSTOM_SORTING_OPTIONS: ClassVar[List[str]] = [
|
197
|
-
*
|
197
|
+
*ProjectScopedFilter.CUSTOM_SORTING_OPTIONS,
|
198
198
|
*TaggableFilter.CUSTOM_SORTING_OPTIONS,
|
199
199
|
SORT_BY_LATEST_VERSION_KEY,
|
200
200
|
]
|
201
201
|
|
202
202
|
CLI_EXCLUDE_FIELDS: ClassVar[List[str]] = [
|
203
|
-
*
|
203
|
+
*ProjectScopedFilter.CLI_EXCLUDE_FIELDS,
|
204
204
|
*TaggableFilter.CLI_EXCLUDE_FIELDS,
|
205
205
|
]
|
206
206
|
|
@@ -41,13 +41,13 @@ from zenml.metadata.metadata_types import MetadataType
|
|
41
41
|
from zenml.models.v2.base.base import BaseUpdate
|
42
42
|
from zenml.models.v2.base.filter import FilterGenerator
|
43
43
|
from zenml.models.v2.base.scoped import (
|
44
|
+
ProjectScopedFilter,
|
45
|
+
ProjectScopedRequest,
|
46
|
+
ProjectScopedResponse,
|
47
|
+
ProjectScopedResponseBody,
|
48
|
+
ProjectScopedResponseMetadata,
|
49
|
+
ProjectScopedResponseResources,
|
44
50
|
TaggableFilter,
|
45
|
-
WorkspaceScopedFilter,
|
46
|
-
WorkspaceScopedRequest,
|
47
|
-
WorkspaceScopedResponse,
|
48
|
-
WorkspaceScopedResponseBody,
|
49
|
-
WorkspaceScopedResponseMetadata,
|
50
|
-
WorkspaceScopedResponseResources,
|
51
51
|
)
|
52
52
|
from zenml.models.v2.core.artifact import ArtifactResponse
|
53
53
|
from zenml.models.v2.core.tag import TagResponse
|
@@ -71,7 +71,7 @@ logger = get_logger(__name__)
|
|
71
71
|
# ------------------ Request Model ------------------
|
72
72
|
|
73
73
|
|
74
|
-
class ArtifactVersionRequest(
|
74
|
+
class ArtifactVersionRequest(ProjectScopedRequest):
|
75
75
|
"""Request model for artifact versions."""
|
76
76
|
|
77
77
|
artifact_id: Optional[UUID] = Field(
|
@@ -176,7 +176,7 @@ class ArtifactVersionUpdate(BaseUpdate):
|
|
176
176
|
# ------------------ Response Model ------------------
|
177
177
|
|
178
178
|
|
179
|
-
class ArtifactVersionResponseBody(
|
179
|
+
class ArtifactVersionResponseBody(ProjectScopedResponseBody):
|
180
180
|
"""Response body for artifact versions."""
|
181
181
|
|
182
182
|
artifact: ArtifactResponse = Field(
|
@@ -230,7 +230,7 @@ class ArtifactVersionResponseBody(WorkspaceScopedResponseBody):
|
|
230
230
|
return value
|
231
231
|
|
232
232
|
|
233
|
-
class ArtifactVersionResponseMetadata(
|
233
|
+
class ArtifactVersionResponseMetadata(ProjectScopedResponseMetadata):
|
234
234
|
"""Response metadata for artifact versions."""
|
235
235
|
|
236
236
|
producer_step_run_id: Optional[UUID] = Field(
|
@@ -245,12 +245,12 @@ class ArtifactVersionResponseMetadata(WorkspaceScopedResponseMetadata):
|
|
245
245
|
)
|
246
246
|
|
247
247
|
|
248
|
-
class ArtifactVersionResponseResources(
|
248
|
+
class ArtifactVersionResponseResources(ProjectScopedResponseResources):
|
249
249
|
"""Class for all resource models associated with the artifact version entity."""
|
250
250
|
|
251
251
|
|
252
252
|
class ArtifactVersionResponse(
|
253
|
-
|
253
|
+
ProjectScopedResponse[
|
254
254
|
ArtifactVersionResponseBody,
|
255
255
|
ArtifactVersionResponseMetadata,
|
256
256
|
ArtifactVersionResponseResources,
|
@@ -470,11 +470,11 @@ class ArtifactVersionResponse(
|
|
470
470
|
# ------------------ Filter Model ------------------
|
471
471
|
|
472
472
|
|
473
|
-
class ArtifactVersionFilter(
|
473
|
+
class ArtifactVersionFilter(ProjectScopedFilter, TaggableFilter):
|
474
474
|
"""Model to enable advanced filtering of artifact versions."""
|
475
475
|
|
476
476
|
FILTER_EXCLUDE_FIELDS: ClassVar[List[str]] = [
|
477
|
-
*
|
477
|
+
*ProjectScopedFilter.FILTER_EXCLUDE_FIELDS,
|
478
478
|
*TaggableFilter.FILTER_EXCLUDE_FIELDS,
|
479
479
|
"artifact_id",
|
480
480
|
"artifact",
|
@@ -486,11 +486,11 @@ class ArtifactVersionFilter(WorkspaceScopedFilter, TaggableFilter):
|
|
486
486
|
"run_metadata",
|
487
487
|
]
|
488
488
|
CUSTOM_SORTING_OPTIONS: ClassVar[List[str]] = [
|
489
|
-
*
|
489
|
+
*ProjectScopedFilter.CUSTOM_SORTING_OPTIONS,
|
490
490
|
*TaggableFilter.CUSTOM_SORTING_OPTIONS,
|
491
491
|
]
|
492
492
|
CLI_EXCLUDE_FIELDS: ClassVar[List[str]] = [
|
493
|
-
*
|
493
|
+
*ProjectScopedFilter.CLI_EXCLUDE_FIELDS,
|
494
494
|
*TaggableFilter.CLI_EXCLUDE_FIELDS,
|
495
495
|
"artifact_id",
|
496
496
|
]
|
@@ -21,18 +21,18 @@ from zenml.config.source import Source, SourceWithValidator
|
|
21
21
|
from zenml.constants import STR_FIELD_MAX_LENGTH, TEXT_FIELD_MAX_LENGTH
|
22
22
|
from zenml.models.v2.base.base import BaseUpdate
|
23
23
|
from zenml.models.v2.base.scoped import (
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
24
|
+
ProjectScopedFilter,
|
25
|
+
ProjectScopedRequest,
|
26
|
+
ProjectScopedResponse,
|
27
|
+
ProjectScopedResponseBody,
|
28
|
+
ProjectScopedResponseMetadata,
|
29
|
+
ProjectScopedResponseResources,
|
30
30
|
)
|
31
31
|
|
32
32
|
# ------------------ Request Model ------------------
|
33
33
|
|
34
34
|
|
35
|
-
class CodeRepositoryRequest(
|
35
|
+
class CodeRepositoryRequest(ProjectScopedRequest):
|
36
36
|
"""Request model for code repositories."""
|
37
37
|
|
38
38
|
name: str = Field(
|
@@ -88,7 +88,7 @@ class CodeRepositoryUpdate(BaseUpdate):
|
|
88
88
|
# ------------------ Response Model ------------------
|
89
89
|
|
90
90
|
|
91
|
-
class CodeRepositoryResponseBody(
|
91
|
+
class CodeRepositoryResponseBody(ProjectScopedResponseBody):
|
92
92
|
"""Response body for code repositories."""
|
93
93
|
|
94
94
|
source: Source = Field(description="The code repository source.")
|
@@ -99,7 +99,7 @@ class CodeRepositoryResponseBody(WorkspaceScopedResponseBody):
|
|
99
99
|
)
|
100
100
|
|
101
101
|
|
102
|
-
class CodeRepositoryResponseMetadata(
|
102
|
+
class CodeRepositoryResponseMetadata(ProjectScopedResponseMetadata):
|
103
103
|
"""Response metadata for code repositories."""
|
104
104
|
|
105
105
|
config: Dict[str, Any] = Field(
|
@@ -112,12 +112,12 @@ class CodeRepositoryResponseMetadata(WorkspaceScopedResponseMetadata):
|
|
112
112
|
)
|
113
113
|
|
114
114
|
|
115
|
-
class CodeRepositoryResponseResources(
|
115
|
+
class CodeRepositoryResponseResources(ProjectScopedResponseResources):
|
116
116
|
"""Class for all resource models associated with the code repository entity."""
|
117
117
|
|
118
118
|
|
119
119
|
class CodeRepositoryResponse(
|
120
|
-
|
120
|
+
ProjectScopedResponse[
|
121
121
|
CodeRepositoryResponseBody,
|
122
122
|
CodeRepositoryResponseMetadata,
|
123
123
|
CodeRepositoryResponseResources,
|
@@ -181,7 +181,7 @@ class CodeRepositoryResponse(
|
|
181
181
|
# ------------------ Filter Model ------------------
|
182
182
|
|
183
183
|
|
184
|
-
class CodeRepositoryFilter(
|
184
|
+
class CodeRepositoryFilter(ProjectScopedFilter):
|
185
185
|
"""Model to enable advanced filtering of all code repositories."""
|
186
186
|
|
187
187
|
name: Optional[str] = Field(
|
@@ -23,19 +23,19 @@ from zenml.enums import PluginSubType
|
|
23
23
|
from zenml.models.v2.base.base import BaseUpdate
|
24
24
|
from zenml.models.v2.base.page import Page
|
25
25
|
from zenml.models.v2.base.scoped import (
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
26
|
+
ProjectScopedFilter,
|
27
|
+
ProjectScopedRequest,
|
28
|
+
ProjectScopedResponse,
|
29
|
+
ProjectScopedResponseBody,
|
30
|
+
ProjectScopedResponseMetadata,
|
31
|
+
ProjectScopedResponseResources,
|
32
32
|
)
|
33
33
|
from zenml.models.v2.core.trigger import TriggerResponse
|
34
34
|
|
35
35
|
# ------------------ Request Model ------------------
|
36
36
|
|
37
37
|
|
38
|
-
class EventSourceRequest(
|
38
|
+
class EventSourceRequest(ProjectScopedRequest):
|
39
39
|
"""BaseModel for all event sources."""
|
40
40
|
|
41
41
|
name: str = Field(
|
@@ -108,7 +108,7 @@ class EventSourceUpdate(BaseUpdate):
|
|
108
108
|
# ------------------ Response Model ------------------
|
109
109
|
|
110
110
|
|
111
|
-
class EventSourceResponseBody(
|
111
|
+
class EventSourceResponseBody(ProjectScopedResponseBody):
|
112
112
|
"""ResponseBody for event sources."""
|
113
113
|
|
114
114
|
flavor: str = Field(
|
@@ -123,7 +123,7 @@ class EventSourceResponseBody(WorkspaceScopedResponseBody):
|
|
123
123
|
)
|
124
124
|
|
125
125
|
|
126
|
-
class EventSourceResponseMetadata(
|
126
|
+
class EventSourceResponseMetadata(ProjectScopedResponseMetadata):
|
127
127
|
"""Response metadata for event sources."""
|
128
128
|
|
129
129
|
description: str = Field(
|
@@ -136,7 +136,7 @@ class EventSourceResponseMetadata(WorkspaceScopedResponseMetadata):
|
|
136
136
|
)
|
137
137
|
|
138
138
|
|
139
|
-
class EventSourceResponseResources(
|
139
|
+
class EventSourceResponseResources(ProjectScopedResponseResources):
|
140
140
|
"""Class for all resource models associated with the code repository entity."""
|
141
141
|
|
142
142
|
triggers: Page[TriggerResponse] = Field(
|
@@ -145,7 +145,7 @@ class EventSourceResponseResources(WorkspaceScopedResponseResources):
|
|
145
145
|
|
146
146
|
|
147
147
|
class EventSourceResponse(
|
148
|
-
|
148
|
+
ProjectScopedResponse[
|
149
149
|
EventSourceResponseBody,
|
150
150
|
EventSourceResponseMetadata,
|
151
151
|
EventSourceResponseResources,
|
@@ -226,7 +226,7 @@ class EventSourceResponse(
|
|
226
226
|
# ------------------ Filter Model ------------------
|
227
227
|
|
228
228
|
|
229
|
-
class EventSourceFilter(
|
229
|
+
class EventSourceFilter(ProjectScopedFilter):
|
230
230
|
"""Model to enable advanced filtering of all EventSourceModels."""
|
231
231
|
|
232
232
|
name: Optional[str] = Field(
|