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.
Files changed (123) hide show
  1. zenml/VERSION +1 -1
  2. zenml/analytics/context.py +4 -4
  3. zenml/analytics/enums.py +2 -2
  4. zenml/artifacts/utils.py +2 -2
  5. zenml/cli/__init__.py +8 -9
  6. zenml/cli/base.py +2 -2
  7. zenml/cli/code_repository.py +1 -1
  8. zenml/cli/pipeline.py +3 -3
  9. zenml/cli/project.py +172 -0
  10. zenml/cli/service_accounts.py +0 -1
  11. zenml/cli/service_connectors.py +15 -16
  12. zenml/cli/stack.py +0 -2
  13. zenml/cli/stack_components.py +2 -2
  14. zenml/cli/utils.py +3 -3
  15. zenml/client.py +347 -340
  16. zenml/config/global_config.py +41 -43
  17. zenml/constants.py +5 -3
  18. zenml/event_hub/event_hub.py +1 -1
  19. zenml/integrations/gcp/service_connectors/gcp_service_connector.py +7 -6
  20. zenml/integrations/mlflow/steps/mlflow_registry.py +3 -3
  21. zenml/integrations/wandb/__init__.py +1 -1
  22. zenml/integrations/wandb/experiment_trackers/wandb_experiment_tracker.py +29 -9
  23. zenml/integrations/wandb/flavors/wandb_experiment_tracker_flavor.py +2 -0
  24. zenml/model/model.py +2 -2
  25. zenml/model_registries/base_model_registry.py +1 -1
  26. zenml/models/__init__.py +29 -29
  27. zenml/models/v2/base/filter.py +1 -1
  28. zenml/models/v2/base/scoped.py +49 -53
  29. zenml/models/v2/core/action.py +12 -12
  30. zenml/models/v2/core/artifact.py +15 -15
  31. zenml/models/v2/core/artifact_version.py +15 -15
  32. zenml/models/v2/core/code_repository.py +12 -12
  33. zenml/models/v2/core/event_source.py +12 -12
  34. zenml/models/v2/core/model.py +17 -17
  35. zenml/models/v2/core/model_version.py +15 -15
  36. zenml/models/v2/core/pipeline.py +15 -15
  37. zenml/models/v2/core/pipeline_build.py +14 -14
  38. zenml/models/v2/core/pipeline_deployment.py +12 -14
  39. zenml/models/v2/core/pipeline_run.py +16 -16
  40. zenml/models/v2/core/project.py +203 -0
  41. zenml/models/v2/core/run_metadata.py +2 -2
  42. zenml/models/v2/core/run_template.py +15 -15
  43. zenml/models/v2/core/schedule.py +12 -12
  44. zenml/models/v2/core/secret.py +1 -1
  45. zenml/models/v2/core/service.py +14 -14
  46. zenml/models/v2/core/step_run.py +13 -13
  47. zenml/models/v2/core/trigger.py +13 -13
  48. zenml/models/v2/core/trigger_execution.py +2 -2
  49. zenml/models/v2/core/user.py +0 -17
  50. zenml/models/v2/misc/statistics.py +4 -4
  51. zenml/orchestrators/cache_utils.py +7 -7
  52. zenml/orchestrators/input_utils.py +1 -1
  53. zenml/orchestrators/step_launcher.py +1 -1
  54. zenml/orchestrators/step_run_utils.py +2 -2
  55. zenml/orchestrators/utils.py +4 -4
  56. zenml/pipelines/build_utils.py +2 -2
  57. zenml/pipelines/pipeline_definition.py +5 -5
  58. zenml/pipelines/run_utils.py +1 -1
  59. zenml/service_connectors/service_connector.py +0 -3
  60. zenml/service_connectors/service_connector_utils.py +0 -1
  61. zenml/stack/stack.py +0 -1
  62. zenml/steps/base_step.py +10 -2
  63. zenml/zen_server/rbac/endpoint_utils.py +17 -17
  64. zenml/zen_server/rbac/models.py +20 -20
  65. zenml/zen_server/rbac/rbac_sql_zen_store.py +3 -3
  66. zenml/zen_server/rbac/utils.py +23 -25
  67. zenml/zen_server/rbac/zenml_cloud_rbac.py +12 -16
  68. zenml/zen_server/routers/artifact_version_endpoints.py +10 -10
  69. zenml/zen_server/routers/auth_endpoints.py +6 -6
  70. zenml/zen_server/routers/code_repositories_endpoints.py +12 -14
  71. zenml/zen_server/routers/model_versions_endpoints.py +13 -15
  72. zenml/zen_server/routers/models_endpoints.py +7 -9
  73. zenml/zen_server/routers/pipeline_builds_endpoints.py +14 -16
  74. zenml/zen_server/routers/pipeline_deployments_endpoints.py +13 -15
  75. zenml/zen_server/routers/pipelines_endpoints.py +16 -18
  76. zenml/zen_server/routers/{workspaces_endpoints.py → projects_endpoints.py} +111 -68
  77. zenml/zen_server/routers/run_metadata_endpoints.py +7 -9
  78. zenml/zen_server/routers/run_templates_endpoints.py +15 -17
  79. zenml/zen_server/routers/runs_endpoints.py +12 -14
  80. zenml/zen_server/routers/schedule_endpoints.py +12 -14
  81. zenml/zen_server/routers/secrets_endpoints.py +1 -3
  82. zenml/zen_server/routers/server_endpoints.py +5 -5
  83. zenml/zen_server/routers/service_connectors_endpoints.py +11 -13
  84. zenml/zen_server/routers/service_endpoints.py +7 -9
  85. zenml/zen_server/routers/stack_components_endpoints.py +9 -11
  86. zenml/zen_server/routers/stacks_endpoints.py +9 -11
  87. zenml/zen_server/routers/steps_endpoints.py +6 -6
  88. zenml/zen_server/routers/users_endpoints.py +5 -43
  89. zenml/zen_server/template_execution/utils.py +4 -4
  90. zenml/zen_server/utils.py +10 -10
  91. zenml/zen_server/zen_server_api.py +3 -2
  92. zenml/zen_stores/base_zen_store.py +35 -39
  93. zenml/zen_stores/migrations/versions/12eff0206201_rename_workspace_to_project.py +768 -0
  94. zenml/zen_stores/migrations/versions/41b28cae31ce_make_artifacts_workspace_scoped.py +3 -3
  95. zenml/zen_stores/migrations/versions/cbc6acd71f92_add_workspace_display_name.py +58 -0
  96. zenml/zen_stores/rest_zen_store.py +54 -62
  97. zenml/zen_stores/schemas/__init__.py +2 -2
  98. zenml/zen_stores/schemas/action_schemas.py +9 -9
  99. zenml/zen_stores/schemas/artifact_schemas.py +15 -17
  100. zenml/zen_stores/schemas/code_repository_schemas.py +16 -18
  101. zenml/zen_stores/schemas/event_source_schemas.py +9 -9
  102. zenml/zen_stores/schemas/model_schemas.py +15 -17
  103. zenml/zen_stores/schemas/pipeline_build_schemas.py +7 -7
  104. zenml/zen_stores/schemas/pipeline_deployment_schemas.py +7 -7
  105. zenml/zen_stores/schemas/pipeline_run_schemas.py +9 -9
  106. zenml/zen_stores/schemas/pipeline_schemas.py +9 -9
  107. zenml/zen_stores/schemas/{workspace_schemas.py → project_schemas.py} +47 -41
  108. zenml/zen_stores/schemas/run_metadata_schemas.py +5 -5
  109. zenml/zen_stores/schemas/run_template_schemas.py +9 -9
  110. zenml/zen_stores/schemas/schedule_schema.py +9 -9
  111. zenml/zen_stores/schemas/service_schemas.py +7 -7
  112. zenml/zen_stores/schemas/step_run_schemas.py +7 -7
  113. zenml/zen_stores/schemas/trigger_schemas.py +9 -9
  114. zenml/zen_stores/schemas/user_schemas.py +0 -12
  115. zenml/zen_stores/sql_zen_store.py +258 -268
  116. zenml/zen_stores/zen_store_interface.py +56 -70
  117. {zenml_nightly-0.75.0.dev20250313.dist-info → zenml_nightly-0.75.0.dev20250314.dist-info}/METADATA +1 -1
  118. {zenml_nightly-0.75.0.dev20250313.dist-info → zenml_nightly-0.75.0.dev20250314.dist-info}/RECORD +121 -119
  119. zenml/cli/workspace.py +0 -160
  120. zenml/models/v2/core/workspace.py +0 -131
  121. {zenml_nightly-0.75.0.dev20250313.dist-info → zenml_nightly-0.75.0.dev20250314.dist-info}/LICENSE +0 -0
  122. {zenml_nightly-0.75.0.dev20250313.dist-info → zenml_nightly-0.75.0.dev20250314.dist-info}/WHEEL +0 -0
  123. {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
- WorkspaceScopedRequest,
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(WorkspaceScopedRequest):
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(WorkspaceScopedRequest):
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(WorkspaceScopedResponseBody):
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(WorkspaceScopedResponseMetadata):
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(WorkspaceScopedResponseResources):
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
- WorkspaceScopedResponse[
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(WorkspaceScopedFilter, TaggableFilter):
311
+ class RunTemplateFilter(ProjectScopedFilter, TaggableFilter):
312
312
  """Model for filtering of run templates."""
313
313
 
314
314
  FILTER_EXCLUDE_FIELDS: ClassVar[List[str]] = [
315
- *WorkspaceScopedFilter.FILTER_EXCLUDE_FIELDS,
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
- *WorkspaceScopedFilter.CUSTOM_SORTING_OPTIONS,
325
+ *ProjectScopedFilter.CUSTOM_SORTING_OPTIONS,
326
326
  *TaggableFilter.CUSTOM_SORTING_OPTIONS,
327
327
  ]
328
328
  CLI_EXCLUDE_FIELDS: ClassVar[List[str]] = [
329
- *WorkspaceScopedFilter.CLI_EXCLUDE_FIELDS,
329
+ *ProjectScopedFilter.CLI_EXCLUDE_FIELDS,
330
330
  *TaggableFilter.CLI_EXCLUDE_FIELDS,
331
331
  ]
332
332
 
@@ -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
- WorkspaceScopedFilter,
28
- WorkspaceScopedRequest,
29
- WorkspaceScopedResponse,
30
- WorkspaceScopedResponseBody,
31
- WorkspaceScopedResponseMetadata,
32
- WorkspaceScopedResponseResources,
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(WorkspaceScopedRequest):
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(WorkspaceScopedResponseBody):
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(WorkspaceScopedResponseMetadata):
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(WorkspaceScopedResponseResources):
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
- WorkspaceScopedResponse[
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(WorkspaceScopedFilter):
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(
@@ -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 workspace.
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.
@@ -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
- WorkspaceScopedFilter,
37
- WorkspaceScopedRequest,
38
- WorkspaceScopedResponse,
39
- WorkspaceScopedResponseBody,
40
- WorkspaceScopedResponseMetadata,
41
- WorkspaceScopedResponseResources,
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(WorkspaceScopedRequest):
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(WorkspaceScopedResponseBody):
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(WorkspaceScopedResponseMetadata):
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(WorkspaceScopedResponseResources):
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
- WorkspaceScopedResponse[
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(WorkspaceScopedFilter):
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
- *WorkspaceScopedFilter.FILTER_EXCLUDE_FIELDS,
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
- *WorkspaceScopedFilter.CLI_EXCLUDE_FIELDS,
486
+ *ProjectScopedFilter.CLI_EXCLUDE_FIELDS,
487
487
  "flavor",
488
488
  "type",
489
489
  "pipeline_step_name",
@@ -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
- WorkspaceScopedFilter,
39
- WorkspaceScopedRequest,
40
- WorkspaceScopedResponse,
41
- WorkspaceScopedResponseBody,
42
- WorkspaceScopedResponseMetadata,
43
- WorkspaceScopedResponseResources,
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(WorkspaceScopedRequest):
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(WorkspaceScopedResponseBody):
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(WorkspaceScopedResponseMetadata):
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(WorkspaceScopedResponseResources):
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
- WorkspaceScopedResponse[
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(WorkspaceScopedFilter):
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
- *WorkspaceScopedFilter.FILTER_EXCLUDE_FIELDS,
511
+ *ProjectScopedFilter.FILTER_EXCLUDE_FIELDS,
512
512
  "model",
513
513
  "run_metadata",
514
514
  ]
@@ -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
- WorkspaceScopedFilter,
37
- WorkspaceScopedRequest,
38
- WorkspaceScopedResponse,
39
- WorkspaceScopedResponseBody,
40
- WorkspaceScopedResponseMetadata,
41
- WorkspaceScopedResponseResources,
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(WorkspaceScopedRequest):
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(WorkspaceScopedResponseBody):
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(WorkspaceScopedResponseMetadata):
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(WorkspaceScopedResponseResources):
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
- WorkspaceScopedResponse[
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(WorkspaceScopedFilter):
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
- *WorkspaceScopedFilter.FILTER_EXCLUDE_FIELDS,
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 WorkspaceScopedFilter
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(WorkspaceScopedFilter):
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(
@@ -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.