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
@@ -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 WorkspaceScopedRequest(UserScopedRequest):
84
- """Base workspace-scoped request domain model.
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 workspace-scoped.
86
+ Used as a base class for all domain models that are project-scoped.
87
87
  """
88
88
 
89
- workspace: UUID = Field(
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 workspace scoped models.
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["workspace_id"] = self.workspace
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
- # Workspace-scoped models
286
+ # Project-scoped models
289
287
 
290
288
 
291
- class WorkspaceScopedResponseBody(UserScopedResponseBody):
292
- """Base workspace-scoped body."""
289
+ class ProjectScopedResponseBody(UserScopedResponseBody):
290
+ """Base project-scoped body."""
293
291
 
294
292
 
295
- class WorkspaceScopedResponseMetadata(UserScopedResponseMetadata):
296
- """Base workspace-scoped metadata."""
293
+ class ProjectScopedResponseMetadata(UserScopedResponseMetadata):
294
+ """Base project-scoped metadata."""
297
295
 
298
- workspace: "WorkspaceResponse" = Field(
299
- title="The workspace of this resource."
300
- )
296
+ project: "ProjectResponse" = Field(title="The project of this resource.")
301
297
 
302
298
 
303
- class WorkspaceScopedResponseResources(UserScopedResponseResources):
304
- """Base workspace-scoped resources."""
299
+ class ProjectScopedResponseResources(UserScopedResponseResources):
300
+ """Base project-scoped resources."""
305
301
 
306
302
 
307
- WorkspaceBody = TypeVar("WorkspaceBody", bound=WorkspaceScopedResponseBody)
308
- WorkspaceMetadata = TypeVar(
309
- "WorkspaceMetadata", bound=WorkspaceScopedResponseMetadata
303
+ ProjectBody = TypeVar("ProjectBody", bound=ProjectScopedResponseBody)
304
+ ProjectMetadata = TypeVar(
305
+ "ProjectMetadata", bound=ProjectScopedResponseMetadata
310
306
  )
311
- WorkspaceResources = TypeVar(
312
- "WorkspaceResources", bound=WorkspaceScopedResponseResources
307
+ ProjectResources = TypeVar(
308
+ "ProjectResources", bound=ProjectScopedResponseResources
313
309
  )
314
310
 
315
311
 
316
- class WorkspaceScopedResponse(
317
- UserScopedResponse[WorkspaceBody, WorkspaceMetadata, WorkspaceResources],
318
- Generic[WorkspaceBody, WorkspaceMetadata, WorkspaceResources],
312
+ class ProjectScopedResponse(
313
+ UserScopedResponse[ProjectBody, ProjectMetadata, ProjectResources],
314
+ Generic[ProjectBody, ProjectMetadata, ProjectResources],
319
315
  ):
320
- """Base workspace-scoped domain model.
316
+ """Base project-scoped domain model.
321
317
 
322
- Used as a base class for all domain models that are workspace-scoped.
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 workspace scoped models.
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.workspace is not None:
334
- metadata["workspace_id"] = self.workspace.id
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 workspace(self) -> "WorkspaceResponse":
340
- """The workspace property.
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().workspace
341
+ return self.get_metadata().project
346
342
 
347
343
 
348
344
  # ---------------------- Filter Models ----------------------
349
345
 
350
346
 
351
- class WorkspaceScopedFilter(UserScopedFilter):
352
- """Model to enable advanced scoping with workspace."""
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
- "workspace",
352
+ "project",
357
353
  ]
358
- workspace: Optional[Union[UUID, str]] = Field(
354
+ project: Optional[Union[UUID, str]] = Field(
359
355
  default=None,
360
- description="Name/ID of the workspace which the search is scoped to. "
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 workspace scope is missing from the filter.
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 workspace scope must always be set and must be a UUID. If 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
- # workspace ID.
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 workspace or even the server's default workspace, if
392
- # they are configured. If this also fails to yield a workspace, this
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._set_filter_workspace_id
391
+ # See: SqlZenStore._set_filter_project_id
396
392
 
397
- if not self.workspace:
398
- raise ValueError("Workspace scope missing from the filter.")
393
+ if not self.project:
394
+ raise ValueError("Project scope missing from the filter.")
399
395
 
400
- if not isinstance(self.workspace, UUID):
396
+ if not isinstance(self.project, UUID):
401
397
  raise ValueError(
402
- f"Workspace scope must be a UUID, got {type(self.workspace)}."
398
+ f"Project scope must be a UUID, got {type(self.project)}."
403
399
  )
404
400
 
405
- scope_filter = getattr(table, "workspace_id") == self.workspace
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 is not None:
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 is not None:
490
+ if self.tags:
495
491
  from sqlmodel import exists, select
496
492
 
497
493
  from zenml.zen_stores.schemas import TagResourceSchema, TagSchema
@@ -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
- WorkspaceScopedFilter,
33
- WorkspaceScopedRequest,
34
- WorkspaceScopedResponse,
35
- WorkspaceScopedResponseBody,
36
- WorkspaceScopedResponseMetadata,
37
- WorkspaceScopedResponseResources,
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(WorkspaceScopedRequest):
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(WorkspaceScopedResponseBody):
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(WorkspaceScopedResponseMetadata):
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(WorkspaceScopedResponseResources):
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
- WorkspaceScopedResponse[
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(WorkspaceScopedFilter):
262
+ class ActionFilter(ProjectScopedFilter):
263
263
  """Model to enable advanced filtering of all actions."""
264
264
 
265
265
  name: Optional[str] = Field(
@@ -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(WorkspaceScopedRequest):
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(WorkspaceScopedResponseBody):
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(WorkspaceScopedResponseMetadata):
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(WorkspaceScopedResponseResources):
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
- WorkspaceScopedResponse[
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(WorkspaceScopedFilter, TaggableFilter):
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
- *WorkspaceScopedFilter.FILTER_EXCLUDE_FIELDS,
192
+ *ProjectScopedFilter.FILTER_EXCLUDE_FIELDS,
193
193
  *TaggableFilter.FILTER_EXCLUDE_FIELDS,
194
194
  ]
195
195
 
196
196
  CUSTOM_SORTING_OPTIONS: ClassVar[List[str]] = [
197
- *WorkspaceScopedFilter.CUSTOM_SORTING_OPTIONS,
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
- *WorkspaceScopedFilter.CLI_EXCLUDE_FIELDS,
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(WorkspaceScopedRequest):
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(WorkspaceScopedResponseBody):
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(WorkspaceScopedResponseMetadata):
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(WorkspaceScopedResponseResources):
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
- WorkspaceScopedResponse[
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(WorkspaceScopedFilter, TaggableFilter):
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
- *WorkspaceScopedFilter.FILTER_EXCLUDE_FIELDS,
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
- *WorkspaceScopedFilter.CUSTOM_SORTING_OPTIONS,
489
+ *ProjectScopedFilter.CUSTOM_SORTING_OPTIONS,
490
490
  *TaggableFilter.CUSTOM_SORTING_OPTIONS,
491
491
  ]
492
492
  CLI_EXCLUDE_FIELDS: ClassVar[List[str]] = [
493
- *WorkspaceScopedFilter.CLI_EXCLUDE_FIELDS,
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
- WorkspaceScopedFilter,
25
- WorkspaceScopedRequest,
26
- WorkspaceScopedResponse,
27
- WorkspaceScopedResponseBody,
28
- WorkspaceScopedResponseMetadata,
29
- WorkspaceScopedResponseResources,
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(WorkspaceScopedRequest):
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(WorkspaceScopedResponseBody):
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(WorkspaceScopedResponseMetadata):
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(WorkspaceScopedResponseResources):
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
- WorkspaceScopedResponse[
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(WorkspaceScopedFilter):
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
- WorkspaceScopedFilter,
27
- WorkspaceScopedRequest,
28
- WorkspaceScopedResponse,
29
- WorkspaceScopedResponseBody,
30
- WorkspaceScopedResponseMetadata,
31
- WorkspaceScopedResponseResources,
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(WorkspaceScopedRequest):
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(WorkspaceScopedResponseBody):
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(WorkspaceScopedResponseMetadata):
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(WorkspaceScopedResponseResources):
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
- WorkspaceScopedResponse[
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(WorkspaceScopedFilter):
229
+ class EventSourceFilter(ProjectScopedFilter):
230
230
  """Model to enable advanced filtering of all EventSourceModels."""
231
231
 
232
232
  name: Optional[str] = Field(