zenml-nightly 0.75.0.dev20250312__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/__init__.py +2 -0
- zenml/analytics/context.py +7 -0
- zenml/analytics/enums.py +2 -2
- zenml/artifacts/utils.py +2 -4
- zenml/cli/__init__.py +8 -9
- zenml/cli/base.py +2 -2
- zenml/cli/code_repository.py +1 -1
- zenml/cli/login.py +6 -0
- zenml/cli/model.py +7 -15
- zenml/cli/pipeline.py +3 -3
- zenml/cli/project.py +172 -0
- zenml/cli/secret.py +47 -44
- zenml/cli/service_accounts.py +0 -1
- zenml/cli/service_connectors.py +15 -17
- zenml/cli/stack.py +0 -3
- zenml/cli/stack_components.py +2 -2
- zenml/cli/tag.py +3 -5
- zenml/cli/utils.py +25 -23
- zenml/client.py +749 -475
- zenml/config/global_config.py +48 -37
- zenml/config/pipeline_configurations.py +3 -2
- zenml/config/pipeline_run_configuration.py +2 -1
- zenml/config/secret_reference_mixin.py +1 -1
- zenml/constants.py +6 -6
- zenml/enums.py +0 -7
- zenml/event_hub/event_hub.py +3 -1
- zenml/exceptions.py +0 -24
- zenml/integrations/aws/orchestrators/sagemaker_orchestrator.py +5 -3
- zenml/integrations/bitbucket/plugins/event_sources/bitbucket_webhook_event_source.py +1 -4
- zenml/integrations/gcp/service_connectors/gcp_service_connector.py +7 -6
- zenml/integrations/github/plugins/event_sources/github_webhook_event_source.py +1 -4
- zenml/integrations/mlflow/steps/mlflow_registry.py +3 -3
- zenml/integrations/seldon/model_deployers/seldon_model_deployer.py +1 -1
- 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 +5 -3
- zenml/model/model.py +10 -10
- zenml/model_registries/base_model_registry.py +1 -1
- zenml/models/__init__.py +45 -28
- zenml/models/v2/base/base.py +0 -5
- zenml/models/v2/base/filter.py +2 -2
- zenml/models/v2/base/scoped.py +135 -156
- zenml/models/v2/core/action.py +12 -12
- zenml/models/v2/core/api_key.py +1 -1
- zenml/models/v2/core/artifact.py +31 -18
- zenml/models/v2/core/artifact_version.py +57 -40
- zenml/models/v2/core/code_repository.py +12 -12
- zenml/models/v2/core/component.py +22 -33
- zenml/models/v2/core/device.py +3 -2
- zenml/models/v2/core/event_source.py +14 -14
- zenml/models/v2/core/flavor.py +19 -47
- zenml/models/v2/core/logs.py +1 -2
- zenml/models/v2/core/model.py +23 -20
- zenml/models/v2/core/model_version.py +51 -42
- zenml/models/v2/core/pipeline.py +16 -16
- 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 +21 -29
- zenml/models/v2/core/project.py +203 -0
- zenml/models/v2/core/run_metadata.py +2 -2
- zenml/models/v2/core/run_template.py +16 -17
- zenml/models/v2/core/schedule.py +12 -21
- zenml/models/v2/core/secret.py +94 -128
- zenml/models/v2/core/server_settings.py +2 -2
- zenml/models/v2/core/service.py +57 -26
- zenml/models/v2/core/service_connector.py +14 -16
- zenml/models/v2/core/stack.py +24 -26
- zenml/models/v2/core/step_run.py +16 -28
- zenml/models/v2/core/tag.py +41 -15
- zenml/models/v2/core/trigger.py +13 -13
- zenml/models/v2/core/trigger_execution.py +2 -2
- zenml/models/v2/core/user.py +2 -2
- zenml/models/v2/misc/statistics.py +45 -0
- zenml/models/v2/misc/tag.py +27 -0
- zenml/orchestrators/cache_utils.py +7 -7
- zenml/orchestrators/input_utils.py +1 -0
- zenml/orchestrators/step_launcher.py +1 -2
- zenml/orchestrators/step_run_utils.py +2 -4
- zenml/orchestrators/step_runner.py +10 -1
- zenml/orchestrators/utils.py +4 -4
- zenml/pipelines/build_utils.py +2 -4
- zenml/pipelines/pipeline_decorator.py +3 -2
- zenml/pipelines/pipeline_definition.py +8 -9
- zenml/pipelines/run_utils.py +4 -4
- zenml/service_connectors/service_connector.py +0 -10
- zenml/service_connectors/service_connector_utils.py +0 -2
- zenml/stack/authentication_mixin.py +1 -1
- zenml/stack/flavor.py +3 -14
- zenml/stack/stack.py +0 -1
- zenml/stack/stack_component.py +1 -5
- zenml/steps/base_step.py +10 -2
- zenml/steps/step_context.py +19 -0
- zenml/utils/string_utils.py +1 -1
- zenml/utils/tag_utils.py +642 -0
- zenml/zen_server/cloud_utils.py +21 -0
- zenml/zen_server/exceptions.py +0 -6
- zenml/zen_server/rbac/endpoint_utils.py +134 -46
- zenml/zen_server/rbac/models.py +65 -3
- zenml/zen_server/rbac/rbac_interface.py +9 -0
- zenml/zen_server/rbac/rbac_sql_zen_store.py +15 -7
- zenml/zen_server/rbac/utils.py +155 -30
- zenml/zen_server/rbac/zenml_cloud_rbac.py +39 -11
- zenml/zen_server/routers/actions_endpoints.py +3 -5
- zenml/zen_server/routers/artifact_endpoint.py +0 -5
- zenml/zen_server/routers/artifact_version_endpoints.py +15 -9
- zenml/zen_server/routers/auth_endpoints.py +22 -7
- zenml/zen_server/routers/code_repositories_endpoints.py +54 -3
- zenml/zen_server/routers/devices_endpoints.py +0 -4
- zenml/zen_server/routers/event_source_endpoints.py +0 -5
- zenml/zen_server/routers/flavors_endpoints.py +0 -5
- zenml/zen_server/routers/logs_endpoints.py +0 -1
- zenml/zen_server/routers/model_versions_endpoints.py +100 -23
- zenml/zen_server/routers/models_endpoints.py +50 -69
- zenml/zen_server/routers/pipeline_builds_endpoints.py +55 -3
- zenml/zen_server/routers/pipeline_deployments_endpoints.py +56 -4
- zenml/zen_server/routers/pipelines_endpoints.py +70 -3
- zenml/zen_server/routers/plugin_endpoints.py +0 -1
- zenml/zen_server/routers/projects_endpoints.py +283 -0
- zenml/zen_server/routers/run_metadata_endpoints.py +97 -0
- zenml/zen_server/routers/run_templates_endpoints.py +64 -3
- zenml/zen_server/routers/runs_endpoints.py +58 -8
- zenml/zen_server/routers/schedule_endpoints.py +67 -6
- zenml/zen_server/routers/secrets_endpoints.py +38 -4
- zenml/zen_server/routers/server_endpoints.py +53 -1
- zenml/zen_server/routers/service_accounts_endpoints.py +14 -15
- zenml/zen_server/routers/service_connectors_endpoints.py +94 -14
- zenml/zen_server/routers/service_endpoints.py +18 -7
- zenml/zen_server/routers/stack_components_endpoints.py +66 -7
- zenml/zen_server/routers/stacks_endpoints.py +95 -6
- zenml/zen_server/routers/steps_endpoints.py +17 -11
- zenml/zen_server/routers/tag_resource_endpoints.py +115 -0
- zenml/zen_server/routers/tags_endpoints.py +6 -17
- zenml/zen_server/routers/triggers_endpoints.py +5 -8
- zenml/zen_server/routers/users_endpoints.py +9 -12
- zenml/zen_server/template_execution/utils.py +8 -7
- zenml/zen_server/utils.py +21 -0
- zenml/zen_server/zen_server_api.py +7 -2
- zenml/zen_stores/base_zen_store.py +50 -69
- zenml/zen_stores/migrations/versions/12eff0206201_rename_workspace_to_project.py +768 -0
- zenml/zen_stores/migrations/versions/1cb6477f72d6_move_artifact_save_type.py +20 -10
- zenml/zen_stores/migrations/versions/1f9d1cd00b90_add_unique_name_constraints.py +231 -0
- zenml/zen_stores/migrations/versions/288f4fb6e112_make_tags_user_scoped.py +74 -0
- zenml/zen_stores/migrations/versions/2e695a26fe7a_add_user_default_workspace.py +45 -0
- zenml/zen_stores/migrations/versions/3b1776345020_remove_workspace_from_globals.py +81 -0
- zenml/zen_stores/migrations/versions/41b28cae31ce_make_artifacts_workspace_scoped.py +136 -0
- zenml/zen_stores/migrations/versions/9e7bf0970266_adding_exclusive_attribute_to_tags.py +47 -0
- zenml/zen_stores/migrations/versions/b557b2871693_update_step_run_input_types.py +8 -4
- zenml/zen_stores/migrations/versions/cbc6acd71f92_add_workspace_display_name.py +58 -0
- zenml/zen_stores/migrations/versions/cc269488e5a9_separate_run_metadata.py +12 -6
- zenml/zen_stores/migrations/versions/f1d723fd723b_add_secret_private_attr.py +61 -0
- zenml/zen_stores/migrations/versions/f76a368a25a5_add_stack_description.py +35 -0
- zenml/zen_stores/rest_zen_store.py +223 -230
- zenml/zen_stores/schemas/__init__.py +2 -2
- zenml/zen_stores/schemas/action_schemas.py +15 -8
- zenml/zen_stores/schemas/api_key_schemas.py +8 -1
- zenml/zen_stores/schemas/artifact_schemas.py +35 -10
- zenml/zen_stores/schemas/code_repository_schemas.py +22 -17
- zenml/zen_stores/schemas/component_schemas.py +9 -14
- zenml/zen_stores/schemas/event_source_schemas.py +15 -8
- zenml/zen_stores/schemas/flavor_schemas.py +14 -20
- zenml/zen_stores/schemas/model_schemas.py +18 -17
- zenml/zen_stores/schemas/pipeline_build_schemas.py +7 -7
- zenml/zen_stores/schemas/pipeline_deployment_schemas.py +10 -8
- zenml/zen_stores/schemas/pipeline_run_schemas.py +9 -12
- zenml/zen_stores/schemas/pipeline_schemas.py +9 -9
- zenml/zen_stores/schemas/{workspace_schemas.py → project_schemas.py} +53 -65
- zenml/zen_stores/schemas/run_metadata_schemas.py +5 -5
- zenml/zen_stores/schemas/run_template_schemas.py +17 -13
- zenml/zen_stores/schemas/schedule_schema.py +16 -21
- zenml/zen_stores/schemas/secret_schemas.py +15 -25
- zenml/zen_stores/schemas/service_connector_schemas.py +8 -17
- zenml/zen_stores/schemas/service_schemas.py +7 -8
- zenml/zen_stores/schemas/stack_schemas.py +12 -15
- zenml/zen_stores/schemas/step_run_schemas.py +14 -15
- zenml/zen_stores/schemas/tag_schemas.py +30 -2
- zenml/zen_stores/schemas/trigger_schemas.py +15 -8
- zenml/zen_stores/schemas/user_schemas.py +12 -2
- zenml/zen_stores/schemas/utils.py +16 -0
- zenml/zen_stores/secrets_stores/service_connector_secrets_store.py +0 -3
- zenml/zen_stores/sql_zen_store.py +2984 -2369
- zenml/zen_stores/template_utils.py +1 -1
- zenml/zen_stores/zen_store_interface.py +136 -126
- {zenml_nightly-0.75.0.dev20250312.dist-info → zenml_nightly-0.75.0.dev20250314.dist-info}/METADATA +1 -1
- {zenml_nightly-0.75.0.dev20250312.dist-info → zenml_nightly-0.75.0.dev20250314.dist-info}/RECORD +188 -173
- zenml/cli/workspace.py +0 -86
- zenml/models/v2/core/workspace.py +0 -131
- zenml/zen_server/routers/workspaces_endpoints.py +0 -1469
- {zenml_nightly-0.75.0.dev20250312.dist-info → zenml_nightly-0.75.0.dev20250314.dist-info}/LICENSE +0 -0
- {zenml_nightly-0.75.0.dev20250312.dist-info → zenml_nightly-0.75.0.dev20250314.dist-info}/WHEEL +0 -0
- {zenml_nightly-0.75.0.dev20250312.dist-info → zenml_nightly-0.75.0.dev20250314.dist-info}/entry_points.txt +0 -0
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/api_key.py
CHANGED
zenml/models/v2/core/artifact.py
CHANGED
@@ -25,17 +25,19 @@ from typing import (
|
|
25
25
|
)
|
26
26
|
from uuid import UUID
|
27
27
|
|
28
|
-
from pydantic import
|
28
|
+
from pydantic import Field
|
29
29
|
|
30
30
|
from zenml.constants import SORT_BY_LATEST_VERSION_KEY, STR_FIELD_MAX_LENGTH
|
31
|
-
from zenml.models.v2.base.base import
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
31
|
+
from zenml.models.v2.base.base import BaseUpdate
|
32
|
+
from zenml.models.v2.base.scoped import (
|
33
|
+
ProjectScopedFilter,
|
34
|
+
ProjectScopedRequest,
|
35
|
+
ProjectScopedResponse,
|
36
|
+
ProjectScopedResponseBody,
|
37
|
+
ProjectScopedResponseMetadata,
|
38
|
+
ProjectScopedResponseResources,
|
39
|
+
TaggableFilter,
|
37
40
|
)
|
38
|
-
from zenml.models.v2.base.scoped import TaggableFilter
|
39
41
|
from zenml.models.v2.core.tag import TagResponse
|
40
42
|
|
41
43
|
if TYPE_CHECKING:
|
@@ -49,7 +51,7 @@ AnyQuery = TypeVar("AnyQuery", bound=Any)
|
|
49
51
|
# ------------------ Request Model ------------------
|
50
52
|
|
51
53
|
|
52
|
-
class ArtifactRequest(
|
54
|
+
class ArtifactRequest(ProjectScopedRequest):
|
53
55
|
"""Artifact request model."""
|
54
56
|
|
55
57
|
name: str = Field(
|
@@ -70,7 +72,7 @@ class ArtifactRequest(BaseRequest):
|
|
70
72
|
# ------------------ Update Model ------------------
|
71
73
|
|
72
74
|
|
73
|
-
class ArtifactUpdate(
|
75
|
+
class ArtifactUpdate(BaseUpdate):
|
74
76
|
"""Artifact update model."""
|
75
77
|
|
76
78
|
name: Optional[str] = None
|
@@ -82,7 +84,7 @@ class ArtifactUpdate(BaseModel):
|
|
82
84
|
# ------------------ Response Model ------------------
|
83
85
|
|
84
86
|
|
85
|
-
class ArtifactResponseBody(
|
87
|
+
class ArtifactResponseBody(ProjectScopedResponseBody):
|
86
88
|
"""Response body for artifacts."""
|
87
89
|
|
88
90
|
tags: List[TagResponse] = Field(
|
@@ -92,7 +94,7 @@ class ArtifactResponseBody(BaseDatedResponseBody):
|
|
92
94
|
latest_version_id: Optional[UUID] = None
|
93
95
|
|
94
96
|
|
95
|
-
class ArtifactResponseMetadata(
|
97
|
+
class ArtifactResponseMetadata(ProjectScopedResponseMetadata):
|
96
98
|
"""Response metadata for artifacts."""
|
97
99
|
|
98
100
|
has_custom_name: bool = Field(
|
@@ -101,12 +103,12 @@ class ArtifactResponseMetadata(BaseResponseMetadata):
|
|
101
103
|
)
|
102
104
|
|
103
105
|
|
104
|
-
class ArtifactResponseResources(
|
106
|
+
class ArtifactResponseResources(ProjectScopedResponseResources):
|
105
107
|
"""Class for all resource models associated with the Artifact Entity."""
|
106
108
|
|
107
109
|
|
108
110
|
class ArtifactResponse(
|
109
|
-
|
111
|
+
ProjectScopedResponse[
|
110
112
|
ArtifactResponseBody,
|
111
113
|
ArtifactResponseMetadata,
|
112
114
|
ArtifactResponseResources,
|
@@ -176,24 +178,35 @@ class ArtifactResponse(
|
|
176
178
|
"""
|
177
179
|
from zenml.client import Client
|
178
180
|
|
179
|
-
responses = Client().list_artifact_versions(
|
181
|
+
responses = Client().list_artifact_versions(artifact=self.name)
|
180
182
|
return {str(response.version): response for response in responses}
|
181
183
|
|
182
184
|
|
183
185
|
# ------------------ Filter Model ------------------
|
184
186
|
|
185
187
|
|
186
|
-
class ArtifactFilter(TaggableFilter):
|
188
|
+
class ArtifactFilter(ProjectScopedFilter, TaggableFilter):
|
187
189
|
"""Model to enable advanced filtering of artifacts."""
|
188
190
|
|
189
|
-
|
190
|
-
|
191
|
+
FILTER_EXCLUDE_FIELDS: ClassVar[List[str]] = [
|
192
|
+
*ProjectScopedFilter.FILTER_EXCLUDE_FIELDS,
|
193
|
+
*TaggableFilter.FILTER_EXCLUDE_FIELDS,
|
194
|
+
]
|
191
195
|
|
192
196
|
CUSTOM_SORTING_OPTIONS: ClassVar[List[str]] = [
|
197
|
+
*ProjectScopedFilter.CUSTOM_SORTING_OPTIONS,
|
193
198
|
*TaggableFilter.CUSTOM_SORTING_OPTIONS,
|
194
199
|
SORT_BY_LATEST_VERSION_KEY,
|
195
200
|
]
|
196
201
|
|
202
|
+
CLI_EXCLUDE_FIELDS: ClassVar[List[str]] = [
|
203
|
+
*ProjectScopedFilter.CLI_EXCLUDE_FIELDS,
|
204
|
+
*TaggableFilter.CLI_EXCLUDE_FIELDS,
|
205
|
+
]
|
206
|
+
|
207
|
+
name: Optional[str] = None
|
208
|
+
has_custom_name: Optional[bool] = None
|
209
|
+
|
197
210
|
def apply_sorting(
|
198
211
|
self,
|
199
212
|
query: AnyQuery,
|
@@ -27,7 +27,6 @@ from typing import (
|
|
27
27
|
from uuid import UUID
|
28
28
|
|
29
29
|
from pydantic import (
|
30
|
-
BaseModel,
|
31
30
|
ConfigDict,
|
32
31
|
Field,
|
33
32
|
field_validator,
|
@@ -36,18 +35,19 @@ from pydantic import (
|
|
36
35
|
|
37
36
|
from zenml.config.source import Source, SourceWithValidator
|
38
37
|
from zenml.constants import STR_FIELD_MAX_LENGTH, TEXT_FIELD_MAX_LENGTH
|
39
|
-
from zenml.enums import ArtifactSaveType, ArtifactType
|
38
|
+
from zenml.enums import ArtifactSaveType, ArtifactType
|
40
39
|
from zenml.logger import get_logger
|
41
40
|
from zenml.metadata.metadata_types import MetadataType
|
42
|
-
from zenml.models.v2.base.
|
41
|
+
from zenml.models.v2.base.base import BaseUpdate
|
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(
|
@@ -165,7 +165,7 @@ class ArtifactVersionRequest(WorkspaceScopedRequest):
|
|
165
165
|
# ------------------ Update Model ------------------
|
166
166
|
|
167
167
|
|
168
|
-
class ArtifactVersionUpdate(
|
168
|
+
class ArtifactVersionUpdate(BaseUpdate):
|
169
169
|
"""Artifact version update model."""
|
170
170
|
|
171
171
|
name: Optional[str] = None
|
@@ -176,7 +176,7 @@ class ArtifactVersionUpdate(BaseModel):
|
|
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,13 +470,14 @@ 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
|
+
"artifact",
|
480
481
|
"only_unused",
|
481
482
|
"has_custom_name",
|
482
483
|
"model",
|
@@ -484,23 +485,28 @@ class ArtifactVersionFilter(WorkspaceScopedFilter, TaggableFilter):
|
|
484
485
|
"model_version_id",
|
485
486
|
"run_metadata",
|
486
487
|
]
|
487
|
-
CUSTOM_SORTING_OPTIONS = [
|
488
|
-
*
|
488
|
+
CUSTOM_SORTING_OPTIONS: ClassVar[List[str]] = [
|
489
|
+
*ProjectScopedFilter.CUSTOM_SORTING_OPTIONS,
|
489
490
|
*TaggableFilter.CUSTOM_SORTING_OPTIONS,
|
490
491
|
]
|
491
|
-
CLI_EXCLUDE_FIELDS = [
|
492
|
-
*
|
492
|
+
CLI_EXCLUDE_FIELDS: ClassVar[List[str]] = [
|
493
|
+
*ProjectScopedFilter.CLI_EXCLUDE_FIELDS,
|
493
494
|
*TaggableFilter.CLI_EXCLUDE_FIELDS,
|
495
|
+
"artifact_id",
|
494
496
|
]
|
495
497
|
|
496
|
-
|
498
|
+
artifact: Optional[Union[UUID, str]] = Field(
|
497
499
|
default=None,
|
498
|
-
description="ID of the artifact
|
500
|
+
description="The name or ID of the artifact which the search is scoped "
|
501
|
+
"to. This field must always be set and is always applied in addition "
|
502
|
+
"to the other filters, regardless of the value of the "
|
503
|
+
"logical_operator field.",
|
499
504
|
union_mode="left_to_right",
|
500
505
|
)
|
501
|
-
|
506
|
+
artifact_id: Optional[Union[UUID, str]] = Field(
|
502
507
|
default=None,
|
503
|
-
description="
|
508
|
+
description="[Deprecated] Use 'artifact' instead. ID of the artifact to which this version belongs.",
|
509
|
+
union_mode="left_to_right",
|
504
510
|
)
|
505
511
|
version: Optional[str] = Field(
|
506
512
|
default=None,
|
@@ -545,10 +551,6 @@ class ArtifactVersionFilter(WorkspaceScopedFilter, TaggableFilter):
|
|
545
551
|
default=None,
|
546
552
|
description="Filter only artifacts with/without custom names.",
|
547
553
|
)
|
548
|
-
user: Optional[Union[UUID, str]] = Field(
|
549
|
-
default=None,
|
550
|
-
description="Name/ID of the user that created the artifact version.",
|
551
|
-
)
|
552
554
|
model: Optional[Union[UUID, str]] = Field(
|
553
555
|
default=None,
|
554
556
|
description="Name/ID of the model that is associated with this "
|
@@ -595,18 +597,15 @@ class ArtifactVersionFilter(WorkspaceScopedFilter, TaggableFilter):
|
|
595
597
|
StepRunSchema,
|
596
598
|
)
|
597
599
|
|
598
|
-
if self.
|
599
|
-
value,
|
600
|
-
|
601
|
-
operation=GenericFilterOps(filter_operator),
|
602
|
-
column="name",
|
603
|
-
value=value,
|
604
|
-
)
|
605
|
-
artifact_name_filter = and_(
|
600
|
+
if self.artifact:
|
601
|
+
value, operator = self._resolve_operator(self.artifact)
|
602
|
+
artifact_filter = and_(
|
606
603
|
ArtifactVersionSchema.artifact_id == ArtifactSchema.id,
|
607
|
-
|
604
|
+
self.generate_name_or_id_query_conditions(
|
605
|
+
value=self.artifact, table=ArtifactSchema
|
606
|
+
),
|
608
607
|
)
|
609
|
-
custom_filters.append(
|
608
|
+
custom_filters.append(artifact_filter)
|
610
609
|
|
611
610
|
if self.only_unused:
|
612
611
|
unused_filter = and_(
|
@@ -702,6 +701,24 @@ class ArtifactVersionFilter(WorkspaceScopedFilter, TaggableFilter):
|
|
702
701
|
|
703
702
|
return custom_filters
|
704
703
|
|
704
|
+
@model_validator(mode="after")
|
705
|
+
def _migrate_artifact_id(self) -> "ArtifactVersionFilter":
|
706
|
+
"""Migrate value from the deprecated artifact_id attribute.
|
707
|
+
|
708
|
+
Returns:
|
709
|
+
The filter with migrated value.
|
710
|
+
"""
|
711
|
+
# Handle deprecated artifact_id field
|
712
|
+
if self.artifact_id is not None:
|
713
|
+
logger.warning(
|
714
|
+
"The 'ArtifactVersionFilter.artifact_id' field is deprecated "
|
715
|
+
"and will be removed in a future version. Please use "
|
716
|
+
"'ArtifactVersionFilter.artifact' instead."
|
717
|
+
)
|
718
|
+
self.artifact = self.artifact or self.artifact_id
|
719
|
+
|
720
|
+
return self
|
721
|
+
|
705
722
|
|
706
723
|
# -------------------- Lazy Loader --------------------
|
707
724
|
|
@@ -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(
|
@@ -32,12 +32,12 @@ from zenml.constants import STR_FIELD_MAX_LENGTH
|
|
32
32
|
from zenml.enums import LogicalOperators, StackComponentType
|
33
33
|
from zenml.models.v2.base.base import BaseUpdate
|
34
34
|
from zenml.models.v2.base.scoped import (
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
35
|
+
UserScopedFilter,
|
36
|
+
UserScopedRequest,
|
37
|
+
UserScopedResponse,
|
38
|
+
UserScopedResponseBody,
|
39
|
+
UserScopedResponseMetadata,
|
40
|
+
UserScopedResponseResources,
|
41
41
|
)
|
42
42
|
from zenml.utils import secret_utils
|
43
43
|
|
@@ -88,8 +88,8 @@ class ComponentBase(BaseModel):
|
|
88
88
|
# ------------------ Request Model ------------------
|
89
89
|
|
90
90
|
|
91
|
-
class ComponentRequest(ComponentBase,
|
92
|
-
"""Request model for components."""
|
91
|
+
class ComponentRequest(ComponentBase, UserScopedRequest):
|
92
|
+
"""Request model for stack components."""
|
93
93
|
|
94
94
|
ANALYTICS_FIELDS: ClassVar[List[str]] = ["type", "flavor"]
|
95
95
|
|
@@ -120,13 +120,8 @@ class ComponentRequest(ComponentBase, WorkspaceScopedRequest):
|
|
120
120
|
return name
|
121
121
|
|
122
122
|
|
123
|
-
class
|
124
|
-
"""Internal component request model."""
|
125
|
-
|
126
|
-
user: Optional[UUID] = Field( # type: ignore[assignment]
|
127
|
-
title="The id of the user that created this resource.",
|
128
|
-
default=None,
|
129
|
-
)
|
123
|
+
class DefaultComponentRequest(ComponentRequest):
|
124
|
+
"""Internal component request model used only for default stack components."""
|
130
125
|
|
131
126
|
|
132
127
|
# ------------------ Update Model ------------------
|
@@ -162,8 +157,8 @@ class ComponentUpdate(BaseUpdate):
|
|
162
157
|
# ------------------ Response Model ------------------
|
163
158
|
|
164
159
|
|
165
|
-
class ComponentResponseBody(
|
166
|
-
"""Response body for components."""
|
160
|
+
class ComponentResponseBody(UserScopedResponseBody):
|
161
|
+
"""Response body for stack components."""
|
167
162
|
|
168
163
|
type: StackComponentType = Field(
|
169
164
|
title="The type of the stack component.",
|
@@ -185,8 +180,8 @@ class ComponentResponseBody(WorkspaceScopedResponseBody):
|
|
185
180
|
)
|
186
181
|
|
187
182
|
|
188
|
-
class ComponentResponseMetadata(
|
189
|
-
"""Response metadata for components."""
|
183
|
+
class ComponentResponseMetadata(UserScopedResponseMetadata):
|
184
|
+
"""Response metadata for stack components."""
|
190
185
|
|
191
186
|
configuration: Dict[str, Any] = Field(
|
192
187
|
title="The stack component configuration.",
|
@@ -206,8 +201,8 @@ class ComponentResponseMetadata(WorkspaceScopedResponseMetadata):
|
|
206
201
|
)
|
207
202
|
|
208
203
|
|
209
|
-
class ComponentResponseResources(
|
210
|
-
"""
|
204
|
+
class ComponentResponseResources(UserScopedResponseResources):
|
205
|
+
"""Response resources for stack components."""
|
211
206
|
|
212
207
|
flavor: "FlavorResponse" = Field(
|
213
208
|
title="The flavor of this stack component.",
|
@@ -215,13 +210,13 @@ class ComponentResponseResources(WorkspaceScopedResponseResources):
|
|
215
210
|
|
216
211
|
|
217
212
|
class ComponentResponse(
|
218
|
-
|
213
|
+
UserScopedResponse[
|
219
214
|
ComponentResponseBody,
|
220
215
|
ComponentResponseMetadata,
|
221
216
|
ComponentResponseResources,
|
222
217
|
]
|
223
218
|
):
|
224
|
-
"""Response model for components."""
|
219
|
+
"""Response model for stack components."""
|
225
220
|
|
226
221
|
ANALYTICS_FIELDS: ClassVar[List[str]] = ["type"]
|
227
222
|
|
@@ -346,22 +341,16 @@ class ComponentResponse(
|
|
346
341
|
# ------------------ Filter Model ------------------
|
347
342
|
|
348
343
|
|
349
|
-
class ComponentFilter(
|
350
|
-
"""Model to enable advanced
|
351
|
-
|
352
|
-
The Component Model needs additional scoping. As such the `_scope_user`
|
353
|
-
field can be set to the user that is doing the filtering. The
|
354
|
-
`generate_filter()` method of the baseclass is overwritten to include the
|
355
|
-
scoping.
|
356
|
-
"""
|
344
|
+
class ComponentFilter(UserScopedFilter):
|
345
|
+
"""Model to enable advanced stack component filtering."""
|
357
346
|
|
358
347
|
FILTER_EXCLUDE_FIELDS: ClassVar[List[str]] = [
|
359
|
-
*
|
348
|
+
*UserScopedFilter.FILTER_EXCLUDE_FIELDS,
|
360
349
|
"scope_type",
|
361
350
|
"stack_id",
|
362
351
|
]
|
363
352
|
CLI_EXCLUDE_FIELDS: ClassVar[List[str]] = [
|
364
|
-
*
|
353
|
+
*UserScopedFilter.CLI_EXCLUDE_FIELDS,
|
365
354
|
"scope_type",
|
366
355
|
]
|
367
356
|
scope_type: Optional[str] = Field(
|
zenml/models/v2/core/device.py
CHANGED
@@ -18,11 +18,12 @@ from typing import Optional, Union
|
|
18
18
|
from uuid import UUID
|
19
19
|
|
20
20
|
from passlib.context import CryptContext
|
21
|
-
from pydantic import
|
21
|
+
from pydantic import Field
|
22
22
|
|
23
23
|
from zenml.enums import OAuthDeviceStatus
|
24
24
|
from zenml.models.v2.base.base import (
|
25
25
|
BaseRequest,
|
26
|
+
BaseUpdate,
|
26
27
|
)
|
27
28
|
from zenml.models.v2.base.scoped import (
|
28
29
|
UserScopedFilter,
|
@@ -81,7 +82,7 @@ class OAuthDeviceInternalRequest(BaseRequest):
|
|
81
82
|
# ------------------ Update Model ------------------
|
82
83
|
|
83
84
|
|
84
|
-
class OAuthDeviceUpdate(
|
85
|
+
class OAuthDeviceUpdate(BaseUpdate):
|
85
86
|
"""OAuth2 device update model."""
|
86
87
|
|
87
88
|
locked: Optional[bool] = Field(
|