zenml-nightly 0.75.0.dev20250313__py3-none-any.whl → 0.75.0.dev20250315__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 (145) 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/login.py +21 -18
  9. zenml/cli/pipeline.py +3 -3
  10. zenml/cli/project.py +172 -0
  11. zenml/cli/server.py +5 -5
  12. zenml/cli/service_accounts.py +0 -1
  13. zenml/cli/service_connectors.py +15 -16
  14. zenml/cli/stack.py +0 -2
  15. zenml/cli/stack_components.py +2 -2
  16. zenml/cli/utils.py +3 -3
  17. zenml/client.py +352 -341
  18. zenml/config/global_config.py +41 -43
  19. zenml/config/server_config.py +9 -9
  20. zenml/constants.py +5 -3
  21. zenml/event_hub/event_hub.py +1 -1
  22. zenml/integrations/gcp/__init__.py +1 -0
  23. zenml/integrations/gcp/flavors/vertex_orchestrator_flavor.py +5 -0
  24. zenml/integrations/gcp/flavors/vertex_step_operator_flavor.py +5 -28
  25. zenml/integrations/gcp/orchestrators/vertex_orchestrator.py +125 -78
  26. zenml/integrations/gcp/service_connectors/gcp_service_connector.py +7 -6
  27. zenml/integrations/gcp/vertex_custom_job_parameters.py +50 -0
  28. zenml/integrations/mlflow/steps/mlflow_registry.py +3 -3
  29. zenml/integrations/wandb/__init__.py +1 -1
  30. zenml/integrations/wandb/experiment_trackers/wandb_experiment_tracker.py +29 -9
  31. zenml/integrations/wandb/flavors/wandb_experiment_tracker_flavor.py +2 -0
  32. zenml/login/credentials.py +26 -27
  33. zenml/login/credentials_store.py +5 -5
  34. zenml/login/pro/client.py +9 -9
  35. zenml/login/pro/utils.py +8 -8
  36. zenml/login/pro/{tenant → workspace}/__init__.py +1 -1
  37. zenml/login/pro/{tenant → workspace}/client.py +25 -25
  38. zenml/login/pro/{tenant → workspace}/models.py +27 -28
  39. zenml/model/model.py +2 -2
  40. zenml/model_registries/base_model_registry.py +1 -1
  41. zenml/models/__init__.py +29 -29
  42. zenml/models/v2/base/filter.py +1 -1
  43. zenml/models/v2/base/scoped.py +49 -53
  44. zenml/models/v2/core/action.py +12 -12
  45. zenml/models/v2/core/artifact.py +15 -15
  46. zenml/models/v2/core/artifact_version.py +15 -15
  47. zenml/models/v2/core/code_repository.py +12 -12
  48. zenml/models/v2/core/event_source.py +12 -12
  49. zenml/models/v2/core/model.py +26 -18
  50. zenml/models/v2/core/model_version.py +15 -15
  51. zenml/models/v2/core/pipeline.py +15 -15
  52. zenml/models/v2/core/pipeline_build.py +14 -14
  53. zenml/models/v2/core/pipeline_deployment.py +12 -14
  54. zenml/models/v2/core/pipeline_run.py +16 -16
  55. zenml/models/v2/core/project.py +203 -0
  56. zenml/models/v2/core/run_metadata.py +2 -2
  57. zenml/models/v2/core/run_template.py +15 -15
  58. zenml/models/v2/core/schedule.py +12 -12
  59. zenml/models/v2/core/secret.py +1 -1
  60. zenml/models/v2/core/service.py +14 -14
  61. zenml/models/v2/core/step_run.py +13 -13
  62. zenml/models/v2/core/tag.py +96 -3
  63. zenml/models/v2/core/trigger.py +13 -13
  64. zenml/models/v2/core/trigger_execution.py +2 -2
  65. zenml/models/v2/core/user.py +0 -17
  66. zenml/models/v2/misc/server_models.py +6 -6
  67. zenml/models/v2/misc/statistics.py +4 -4
  68. zenml/orchestrators/cache_utils.py +7 -7
  69. zenml/orchestrators/input_utils.py +1 -1
  70. zenml/orchestrators/step_launcher.py +1 -1
  71. zenml/orchestrators/step_run_utils.py +3 -3
  72. zenml/orchestrators/utils.py +4 -4
  73. zenml/pipelines/build_utils.py +2 -2
  74. zenml/pipelines/pipeline_definition.py +5 -5
  75. zenml/pipelines/run_utils.py +1 -1
  76. zenml/service_connectors/service_connector.py +0 -3
  77. zenml/service_connectors/service_connector_utils.py +0 -1
  78. zenml/stack/stack.py +0 -1
  79. zenml/steps/base_step.py +10 -2
  80. zenml/utils/dashboard_utils.py +1 -1
  81. zenml/utils/tag_utils.py +0 -12
  82. zenml/zen_server/cloud_utils.py +3 -3
  83. zenml/zen_server/feature_gate/endpoint_utils.py +1 -1
  84. zenml/zen_server/feature_gate/zenml_cloud_feature_gate.py +1 -1
  85. zenml/zen_server/rbac/endpoint_utils.py +17 -17
  86. zenml/zen_server/rbac/models.py +47 -22
  87. zenml/zen_server/rbac/rbac_sql_zen_store.py +3 -3
  88. zenml/zen_server/rbac/utils.py +23 -25
  89. zenml/zen_server/rbac/zenml_cloud_rbac.py +7 -74
  90. zenml/zen_server/routers/artifact_version_endpoints.py +10 -10
  91. zenml/zen_server/routers/auth_endpoints.py +6 -6
  92. zenml/zen_server/routers/code_repositories_endpoints.py +12 -14
  93. zenml/zen_server/routers/model_versions_endpoints.py +13 -15
  94. zenml/zen_server/routers/models_endpoints.py +7 -9
  95. zenml/zen_server/routers/pipeline_builds_endpoints.py +14 -16
  96. zenml/zen_server/routers/pipeline_deployments_endpoints.py +13 -15
  97. zenml/zen_server/routers/pipelines_endpoints.py +16 -18
  98. zenml/zen_server/routers/{workspaces_endpoints.py → projects_endpoints.py} +111 -68
  99. zenml/zen_server/routers/run_metadata_endpoints.py +7 -9
  100. zenml/zen_server/routers/run_templates_endpoints.py +15 -17
  101. zenml/zen_server/routers/runs_endpoints.py +12 -14
  102. zenml/zen_server/routers/schedule_endpoints.py +12 -14
  103. zenml/zen_server/routers/secrets_endpoints.py +1 -3
  104. zenml/zen_server/routers/server_endpoints.py +7 -7
  105. zenml/zen_server/routers/service_connectors_endpoints.py +11 -13
  106. zenml/zen_server/routers/service_endpoints.py +7 -9
  107. zenml/zen_server/routers/stack_components_endpoints.py +9 -11
  108. zenml/zen_server/routers/stacks_endpoints.py +9 -11
  109. zenml/zen_server/routers/steps_endpoints.py +6 -6
  110. zenml/zen_server/routers/users_endpoints.py +5 -43
  111. zenml/zen_server/template_execution/utils.py +4 -4
  112. zenml/zen_server/utils.py +10 -10
  113. zenml/zen_server/zen_server_api.py +6 -5
  114. zenml/zen_stores/base_zen_store.py +38 -42
  115. zenml/zen_stores/migrations/versions/12eff0206201_rename_workspace_to_project.py +768 -0
  116. zenml/zen_stores/migrations/versions/41b28cae31ce_make_artifacts_workspace_scoped.py +3 -3
  117. zenml/zen_stores/migrations/versions/cbc6acd71f92_add_workspace_display_name.py +58 -0
  118. zenml/zen_stores/rest_zen_store.py +55 -63
  119. zenml/zen_stores/schemas/__init__.py +2 -2
  120. zenml/zen_stores/schemas/action_schemas.py +9 -9
  121. zenml/zen_stores/schemas/artifact_schemas.py +15 -17
  122. zenml/zen_stores/schemas/code_repository_schemas.py +16 -18
  123. zenml/zen_stores/schemas/event_source_schemas.py +9 -9
  124. zenml/zen_stores/schemas/model_schemas.py +15 -17
  125. zenml/zen_stores/schemas/pipeline_build_schemas.py +7 -7
  126. zenml/zen_stores/schemas/pipeline_deployment_schemas.py +7 -7
  127. zenml/zen_stores/schemas/pipeline_run_schemas.py +9 -9
  128. zenml/zen_stores/schemas/pipeline_schemas.py +9 -9
  129. zenml/zen_stores/schemas/{workspace_schemas.py → project_schemas.py} +47 -41
  130. zenml/zen_stores/schemas/run_metadata_schemas.py +5 -5
  131. zenml/zen_stores/schemas/run_template_schemas.py +9 -9
  132. zenml/zen_stores/schemas/schedule_schema.py +9 -9
  133. zenml/zen_stores/schemas/service_schemas.py +7 -7
  134. zenml/zen_stores/schemas/step_run_schemas.py +7 -7
  135. zenml/zen_stores/schemas/trigger_schemas.py +9 -9
  136. zenml/zen_stores/schemas/user_schemas.py +0 -12
  137. zenml/zen_stores/sql_zen_store.py +318 -275
  138. zenml/zen_stores/zen_store_interface.py +56 -70
  139. {zenml_nightly-0.75.0.dev20250313.dist-info → zenml_nightly-0.75.0.dev20250315.dist-info}/METADATA +1 -1
  140. {zenml_nightly-0.75.0.dev20250313.dist-info → zenml_nightly-0.75.0.dev20250315.dist-info}/RECORD +143 -140
  141. zenml/cli/workspace.py +0 -160
  142. zenml/models/v2/core/workspace.py +0 -131
  143. {zenml_nightly-0.75.0.dev20250313.dist-info → zenml_nightly-0.75.0.dev20250315.dist-info}/LICENSE +0 -0
  144. {zenml_nightly-0.75.0.dev20250313.dist-info → zenml_nightly-0.75.0.dev20250315.dist-info}/WHEEL +0 -0
  145. {zenml_nightly-0.75.0.dev20250313.dist-info → zenml_nightly-0.75.0.dev20250315.dist-info}/entry_points.txt +0 -0
@@ -15,8 +15,8 @@ from sqlalchemy.orm import Session
15
15
  from sqlalchemy.sql import column, table
16
16
 
17
17
  from zenml.constants import (
18
- DEFAULT_WORKSPACE_NAME,
19
- ENV_ZENML_DEFAULT_WORKSPACE_NAME,
18
+ DEFAULT_PROJECT_NAME,
19
+ ENV_ZENML_DEFAULT_PROJECT_NAME,
20
20
  )
21
21
 
22
22
  # revision identifiers, used by Alembic.
@@ -52,7 +52,7 @@ def upgrade() -> None:
52
52
  )
53
53
 
54
54
  default_workspace_name = os.getenv(
55
- ENV_ZENML_DEFAULT_WORKSPACE_NAME, DEFAULT_WORKSPACE_NAME
55
+ ENV_ZENML_DEFAULT_PROJECT_NAME, DEFAULT_PROJECT_NAME
56
56
  )
57
57
 
58
58
  default_workspace_query = sa.text(
@@ -0,0 +1,58 @@
1
+ """add workspace display name [cbc6acd71f92].
2
+
3
+ Revision ID: cbc6acd71f92
4
+ Revises: 9e7bf0970266
5
+ Create Date: 2025-03-12 19:38:57.126846
6
+
7
+ """
8
+
9
+ import sqlalchemy as sa
10
+ import sqlmodel
11
+ from alembic import op
12
+
13
+ # revision identifiers, used by Alembic.
14
+ revision = "cbc6acd71f92"
15
+ down_revision = "9e7bf0970266"
16
+ branch_labels = None
17
+ depends_on = None
18
+
19
+
20
+ def upgrade() -> None:
21
+ """Upgrade database schema and/or data, creating a new revision."""
22
+ with op.batch_alter_table("workspace", schema=None) as batch_op:
23
+ batch_op.add_column(
24
+ sa.Column(
25
+ "display_name",
26
+ sqlmodel.sql.sqltypes.AutoString(),
27
+ nullable=True,
28
+ )
29
+ )
30
+
31
+ # Migrate existing workspace names to display_name
32
+ connection = op.get_bind()
33
+ meta = sa.MetaData()
34
+ meta.reflect(bind=connection, only=("workspace",))
35
+ workspace_table = sa.Table("workspace", meta)
36
+
37
+ for workspace_id, workspace_name in connection.execute(
38
+ sa.select(
39
+ workspace_table.c.id,
40
+ workspace_table.c.name,
41
+ )
42
+ ):
43
+ connection.execute(
44
+ sa.update(workspace_table)
45
+ .where(workspace_table.c.id == workspace_id)
46
+ .values(display_name=workspace_name)
47
+ )
48
+
49
+ with op.batch_alter_table("workspace", schema=None) as batch_op:
50
+ batch_op.alter_column(
51
+ "display_name", existing_type=sa.String(50), nullable=False
52
+ )
53
+
54
+
55
+ def downgrade() -> None:
56
+ """Downgrade database schema and/or data back to the previous revision."""
57
+ with op.batch_alter_table("workspace", schema=None) as batch_op:
58
+ batch_op.drop_column("display_name")
@@ -80,6 +80,7 @@ from zenml.constants import (
80
80
  PIPELINE_BUILDS,
81
81
  PIPELINE_DEPLOYMENTS,
82
82
  PIPELINES,
83
+ PROJECTS,
83
84
  RUN_METADATA,
84
85
  RUN_TEMPLATES,
85
86
  RUNS,
@@ -108,7 +109,6 @@ from zenml.constants import (
108
109
  TRIGGERS,
109
110
  USERS,
110
111
  VERSION_1,
111
- WORKSPACES,
112
112
  )
113
113
  from zenml.enums import (
114
114
  APITokenType,
@@ -203,6 +203,10 @@ from zenml.models import (
203
203
  PipelineRunResponse,
204
204
  PipelineRunUpdate,
205
205
  PipelineUpdate,
206
+ ProjectFilter,
207
+ ProjectRequest,
208
+ ProjectResponse,
209
+ ProjectUpdate,
206
210
  RunMetadataRequest,
207
211
  RunTemplateFilter,
208
212
  RunTemplateRequest,
@@ -259,10 +263,6 @@ from zenml.models import (
259
263
  UserRequest,
260
264
  UserResponse,
261
265
  UserUpdate,
262
- WorkspaceFilter,
263
- WorkspaceRequest,
264
- WorkspaceResponse,
265
- WorkspaceUpdate,
266
266
  )
267
267
  from zenml.service_connectors.service_connector_registry import (
268
268
  service_connector_registry,
@@ -1086,13 +1086,13 @@ class RestZenStore(BaseZenStore):
1086
1086
 
1087
1087
  def prune_artifact_versions(
1088
1088
  self,
1089
- workspace_name_or_id: Union[str, UUID],
1089
+ project_name_or_id: Union[str, UUID],
1090
1090
  only_versions: bool = True,
1091
1091
  ) -> None:
1092
1092
  """Prunes unused artifact versions and their artifacts.
1093
1093
 
1094
1094
  Args:
1095
- workspace_name_or_id: The workspace name or ID to prune artifact
1095
+ project_name_or_id: The project name or ID to prune artifact
1096
1096
  versions for.
1097
1097
  only_versions: Only delete artifact versions, keeping artifacts
1098
1098
  """
@@ -1100,7 +1100,7 @@ class RestZenStore(BaseZenStore):
1100
1100
  path=ARTIFACT_VERSIONS,
1101
1101
  params={
1102
1102
  "only_versions": only_versions,
1103
- "workspace_name_or_id": workspace_name_or_id,
1103
+ "project_name_or_id": project_name_or_id,
1104
1104
  },
1105
1105
  )
1106
1106
 
@@ -2112,10 +2112,8 @@ class RestZenStore(BaseZenStore):
2112
2112
  The new secret is also validated against the scoping rules enforced in
2113
2113
  the secrets store:
2114
2114
 
2115
- - only one workspace-scoped secret with the given name can exist
2116
- in the target workspace.
2117
- - only one user-scoped secret with the given name can exist in the
2118
- target workspace for the target user.
2115
+ - only one private secret with the given name can exist.
2116
+ - only one public secret with the given name can exist.
2119
2117
 
2120
2118
  Args:
2121
2119
  secret: The secret to create.
@@ -2190,10 +2188,8 @@ class RestZenStore(BaseZenStore):
2190
2188
  If the update includes a change of name or scope, the scoping rules
2191
2189
  enforced in the secrets store are used to validate the update:
2192
2190
 
2193
- - only one workspace-scoped secret with the given name can exist
2194
- in the target workspace.
2195
- - only one user-scoped secret with the given name can exist in the
2196
- target workspace for the target user.
2191
+ - only one private secret with the given name can exist.
2192
+ - only one public secret with the given name can exist.
2197
2193
 
2198
2194
  Args:
2199
2195
  secret_id: The ID of the secret to be updated.
@@ -3339,96 +3335,94 @@ class RestZenStore(BaseZenStore):
3339
3335
  route=USERS,
3340
3336
  )
3341
3337
 
3342
- # ----------------------------- Workspaces -----------------------------
3338
+ # ----------------------------- Projects -----------------------------
3343
3339
 
3344
- def create_workspace(
3345
- self, workspace: WorkspaceRequest
3346
- ) -> WorkspaceResponse:
3347
- """Creates a new workspace.
3340
+ def create_project(self, project: ProjectRequest) -> ProjectResponse:
3341
+ """Creates a new project.
3348
3342
 
3349
3343
  Args:
3350
- workspace: The workspace to create.
3344
+ project: The project to create.
3351
3345
 
3352
3346
  Returns:
3353
- The newly created workspace.
3347
+ The newly created project.
3354
3348
  """
3355
3349
  return self._create_resource(
3356
- resource=workspace,
3357
- route=WORKSPACES,
3358
- response_model=WorkspaceResponse,
3350
+ resource=project,
3351
+ route=PROJECTS,
3352
+ response_model=ProjectResponse,
3359
3353
  )
3360
3354
 
3361
- def get_workspace(
3362
- self, workspace_name_or_id: Union[UUID, str], hydrate: bool = True
3363
- ) -> WorkspaceResponse:
3364
- """Get an existing workspace by name or ID.
3355
+ def get_project(
3356
+ self, project_name_or_id: Union[UUID, str], hydrate: bool = True
3357
+ ) -> ProjectResponse:
3358
+ """Get an existing project by name or ID.
3365
3359
 
3366
3360
  Args:
3367
- workspace_name_or_id: Name or ID of the workspace to get.
3361
+ project_name_or_id: Name or ID of the project to get.
3368
3362
  hydrate: Flag deciding whether to hydrate the output model(s)
3369
3363
  by including metadata fields in the response.
3370
3364
 
3371
3365
  Returns:
3372
- The requested workspace.
3366
+ The requested project.
3373
3367
  """
3374
3368
  return self._get_resource(
3375
- resource_id=workspace_name_or_id,
3376
- route=WORKSPACES,
3377
- response_model=WorkspaceResponse,
3369
+ resource_id=project_name_or_id,
3370
+ route=PROJECTS,
3371
+ response_model=ProjectResponse,
3378
3372
  params={"hydrate": hydrate},
3379
3373
  )
3380
3374
 
3381
- def list_workspaces(
3375
+ def list_projects(
3382
3376
  self,
3383
- workspace_filter_model: WorkspaceFilter,
3377
+ project_filter_model: ProjectFilter,
3384
3378
  hydrate: bool = False,
3385
- ) -> Page[WorkspaceResponse]:
3386
- """List all workspace matching the given filter criteria.
3379
+ ) -> Page[ProjectResponse]:
3380
+ """List all projects matching the given filter criteria.
3387
3381
 
3388
3382
  Args:
3389
- workspace_filter_model: All filter parameters including pagination
3383
+ project_filter_model: All filter parameters including pagination
3390
3384
  params.
3391
3385
  hydrate: Flag deciding whether to hydrate the output model(s)
3392
3386
  by including metadata fields in the response.
3393
3387
 
3394
3388
  Returns:
3395
- A list of all workspace matching the filter criteria.
3389
+ A list of all projects matching the filter criteria.
3396
3390
  """
3397
3391
  return self._list_paginated_resources(
3398
- route=WORKSPACES,
3399
- response_model=WorkspaceResponse,
3400
- filter_model=workspace_filter_model,
3392
+ route=PROJECTS,
3393
+ response_model=ProjectResponse,
3394
+ filter_model=project_filter_model,
3401
3395
  params={"hydrate": hydrate},
3402
3396
  )
3403
3397
 
3404
- def update_workspace(
3405
- self, workspace_id: UUID, workspace_update: WorkspaceUpdate
3406
- ) -> WorkspaceResponse:
3407
- """Update an existing workspace.
3398
+ def update_project(
3399
+ self, project_id: UUID, project_update: ProjectUpdate
3400
+ ) -> ProjectResponse:
3401
+ """Update an existing project.
3408
3402
 
3409
3403
  Args:
3410
- workspace_id: The ID of the workspace to be updated.
3411
- workspace_update: The update to be applied to the workspace.
3404
+ project_id: The ID of the project to be updated.
3405
+ project_update: The update to be applied to the project.
3412
3406
 
3413
3407
  Returns:
3414
- The updated workspace.
3408
+ The updated project.
3415
3409
  """
3416
3410
  return self._update_resource(
3417
- resource_id=workspace_id,
3418
- resource_update=workspace_update,
3419
- route=WORKSPACES,
3420
- response_model=WorkspaceResponse,
3411
+ resource_id=project_id,
3412
+ resource_update=project_update,
3413
+ route=PROJECTS,
3414
+ response_model=ProjectResponse,
3421
3415
  )
3422
3416
 
3423
- def delete_workspace(self, workspace_name_or_id: Union[str, UUID]) -> None:
3424
- """Deletes a workspace.
3417
+ def delete_project(self, project_name_or_id: Union[str, UUID]) -> None:
3418
+ """Deletes a project.
3425
3419
 
3426
3420
  Args:
3427
- workspace_name_or_id: Name or ID of the workspace to delete.
3421
+ project_name_or_id: Name or ID of the project to delete.
3428
3422
  """
3429
3423
  self._delete_resource(
3430
- resource_id=workspace_name_or_id,
3431
- route=WORKSPACES,
3424
+ resource_id=project_name_or_id,
3425
+ route=PROJECTS,
3432
3426
  )
3433
3427
 
3434
3428
  # --------------------------- Model ---------------------------
@@ -4104,7 +4098,7 @@ class RestZenStore(BaseZenStore):
4104
4098
  "password": password,
4105
4099
  }
4106
4100
  elif self.server_info.is_pro_server():
4107
- # ZenML Pro tenants use a proprietary authorization grant
4101
+ # ZenML Pro workspaces use a proprietary authorization grant
4108
4102
  # where the ZenML Pro API session token is exchanged for a
4109
4103
  # regular ZenML server access token.
4110
4104
 
@@ -4209,7 +4203,6 @@ class RestZenStore(BaseZenStore):
4209
4203
  # Retries are triggered for idempotent HTTP methods (GET, HEAD, PUT,
4210
4204
  # OPTIONS and DELETE) on specific HTTP status codes:
4211
4205
  #
4212
- # 500: Internal Server Error.
4213
4206
  # 502: Bad Gateway.
4214
4207
  # 503: Service Unavailable.
4215
4208
  # 504: Gateway Timeout.
@@ -4236,7 +4229,6 @@ class RestZenStore(BaseZenStore):
4236
4229
  status_forcelist=[
4237
4230
  408, # Request Timeout
4238
4231
  429, # Too Many Requests
4239
- 500, # Internal Server Error
4240
4232
  502, # Bad Gateway
4241
4233
  503, # Service Unavailable
4242
4234
  504, # Gateway Timeout
@@ -38,7 +38,7 @@ from zenml.zen_stores.schemas.pipeline_deployment_schemas import (
38
38
  )
39
39
  from zenml.zen_stores.schemas.pipeline_run_schemas import PipelineRunSchema
40
40
  from zenml.zen_stores.schemas.pipeline_schemas import PipelineSchema
41
- from zenml.zen_stores.schemas.workspace_schemas import WorkspaceSchema
41
+ from zenml.zen_stores.schemas.project_schemas import ProjectSchema
42
42
  from zenml.zen_stores.schemas.run_metadata_schemas import (
43
43
  RunMetadataResourceSchema,
44
44
  RunMetadataSchema,
@@ -118,5 +118,5 @@ __all__ = [
118
118
  "ModelVersionSchema",
119
119
  "ModelVersionArtifactSchema",
120
120
  "ModelVersionPipelineRunSchema",
121
- "WorkspaceSchema",
121
+ "ProjectSchema",
122
122
  ]
@@ -32,9 +32,9 @@ from zenml.models import (
32
32
  )
33
33
  from zenml.utils.time_utils import utc_now
34
34
  from zenml.zen_stores.schemas.base_schemas import NamedSchema
35
+ from zenml.zen_stores.schemas.project_schemas import ProjectSchema
35
36
  from zenml.zen_stores.schemas.schema_utils import build_foreign_key_field
36
37
  from zenml.zen_stores.schemas.user_schemas import UserSchema
37
- from zenml.zen_stores.schemas.workspace_schemas import WorkspaceSchema
38
38
 
39
39
  if TYPE_CHECKING:
40
40
  from zenml.zen_stores.schemas import TriggerSchema
@@ -47,20 +47,20 @@ class ActionSchema(NamedSchema, table=True):
47
47
  __table_args__ = (
48
48
  UniqueConstraint(
49
49
  "name",
50
- "workspace_id",
51
- name="unique_action_name_in_workspace",
50
+ "project_id",
51
+ name="unique_action_name_in_project",
52
52
  ),
53
53
  )
54
54
 
55
- workspace_id: UUID = build_foreign_key_field(
55
+ project_id: UUID = build_foreign_key_field(
56
56
  source=__tablename__,
57
- target=WorkspaceSchema.__tablename__,
58
- source_column="workspace_id",
57
+ target=ProjectSchema.__tablename__,
58
+ source_column="project_id",
59
59
  target_column="id",
60
60
  ondelete="CASCADE",
61
61
  nullable=False,
62
62
  )
63
- workspace: "WorkspaceSchema" = Relationship(back_populates="actions")
63
+ project: "ProjectSchema" = Relationship(back_populates="actions")
64
64
 
65
65
  user_id: Optional[UUID] = build_foreign_key_field(
66
66
  source=__tablename__,
@@ -111,7 +111,7 @@ class ActionSchema(NamedSchema, table=True):
111
111
  """
112
112
  return cls(
113
113
  name=request.name,
114
- workspace_id=request.workspace,
114
+ project_id=request.project,
115
115
  user_id=request.user,
116
116
  configuration=base64.b64encode(
117
117
  json.dumps(
@@ -178,7 +178,7 @@ class ActionSchema(NamedSchema, table=True):
178
178
  metadata = None
179
179
  if include_metadata:
180
180
  metadata = ActionResponseMetadata(
181
- workspace=self.workspace.to_model(),
181
+ project=self.project.to_model(),
182
182
  configuration=json.loads(
183
183
  base64.b64decode(self.configuration).decode()
184
184
  ),
@@ -44,6 +44,7 @@ from zenml.models.v2.core.artifact import ArtifactRequest
44
44
  from zenml.utils.time_utils import utc_now
45
45
  from zenml.zen_stores.schemas.base_schemas import BaseSchema, NamedSchema
46
46
  from zenml.zen_stores.schemas.component_schemas import StackComponentSchema
47
+ from zenml.zen_stores.schemas.project_schemas import ProjectSchema
47
48
  from zenml.zen_stores.schemas.schema_utils import build_foreign_key_field
48
49
  from zenml.zen_stores.schemas.step_run_schemas import (
49
50
  StepRunInputArtifactSchema,
@@ -51,7 +52,6 @@ from zenml.zen_stores.schemas.step_run_schemas import (
51
52
  )
52
53
  from zenml.zen_stores.schemas.user_schemas import UserSchema
53
54
  from zenml.zen_stores.schemas.utils import RunMetadataInterface
54
- from zenml.zen_stores.schemas.workspace_schemas import WorkspaceSchema
55
55
 
56
56
  if TYPE_CHECKING:
57
57
  from zenml.zen_stores.schemas.artifact_visualization_schemas import (
@@ -71,8 +71,8 @@ class ArtifactSchema(NamedSchema, table=True):
71
71
  __table_args__ = (
72
72
  UniqueConstraint(
73
73
  "name",
74
- "workspace_id",
75
- name="unique_artifact_name_in_workspace",
74
+ "project_id",
75
+ name="unique_artifact_name_in_project",
76
76
  ),
77
77
  )
78
78
 
@@ -92,15 +92,15 @@ class ArtifactSchema(NamedSchema, table=True):
92
92
  ),
93
93
  )
94
94
 
95
- workspace_id: UUID = build_foreign_key_field(
95
+ project_id: UUID = build_foreign_key_field(
96
96
  source=__tablename__,
97
- target=WorkspaceSchema.__tablename__,
98
- source_column="workspace_id",
97
+ target=ProjectSchema.__tablename__,
98
+ source_column="project_id",
99
99
  target_column="id",
100
100
  ondelete="CASCADE",
101
101
  nullable=False,
102
102
  )
103
- workspace: "WorkspaceSchema" = Relationship()
103
+ project: "ProjectSchema" = Relationship()
104
104
 
105
105
  user_id: Optional[UUID] = build_foreign_key_field(
106
106
  source=__tablename__,
@@ -156,7 +156,7 @@ class ArtifactSchema(NamedSchema, table=True):
156
156
  return cls(
157
157
  name=artifact_request.name,
158
158
  has_custom_name=artifact_request.has_custom_name,
159
- workspace_id=artifact_request.workspace,
159
+ project_id=artifact_request.project,
160
160
  user_id=artifact_request.user,
161
161
  )
162
162
 
@@ -198,7 +198,7 @@ class ArtifactSchema(NamedSchema, table=True):
198
198
  if include_metadata:
199
199
  metadata = ArtifactResponseMetadata(
200
200
  has_custom_name=self.has_custom_name,
201
- workspace=self.workspace.to_model(),
201
+ project=self.project.to_model(),
202
202
  )
203
203
 
204
204
  return ArtifactResponse(
@@ -281,10 +281,10 @@ class ArtifactVersionSchema(BaseSchema, RunMetadataInterface, table=True):
281
281
  ondelete="SET NULL",
282
282
  nullable=True,
283
283
  )
284
- workspace_id: UUID = build_foreign_key_field(
284
+ project_id: UUID = build_foreign_key_field(
285
285
  source=__tablename__,
286
- target=WorkspaceSchema.__tablename__,
287
- source_column="workspace_id",
286
+ target=ProjectSchema.__tablename__,
287
+ source_column="project_id",
288
288
  target_column="id",
289
289
  ondelete="CASCADE",
290
290
  nullable=False,
@@ -295,9 +295,7 @@ class ArtifactVersionSchema(BaseSchema, RunMetadataInterface, table=True):
295
295
  user: Optional["UserSchema"] = Relationship(
296
296
  back_populates="artifact_versions"
297
297
  )
298
- workspace: "WorkspaceSchema" = Relationship(
299
- back_populates="artifact_versions"
300
- )
298
+ project: "ProjectSchema" = Relationship(back_populates="artifact_versions")
301
299
  run_metadata: List["RunMetadataSchema"] = Relationship(
302
300
  sa_relationship_kwargs=dict(
303
301
  secondary="run_metadata_resource",
@@ -353,7 +351,7 @@ class ArtifactVersionSchema(BaseSchema, RunMetadataInterface, table=True):
353
351
  version=str(artifact_version_request.version),
354
352
  version_number=version_number,
355
353
  artifact_store_id=artifact_version_request.artifact_store_id,
356
- workspace_id=artifact_version_request.workspace,
354
+ project_id=artifact_version_request.project,
357
355
  user_id=artifact_version_request.user,
358
356
  type=artifact_version_request.type.value,
359
357
  uri=artifact_version_request.uri,
@@ -429,7 +427,7 @@ class ArtifactVersionSchema(BaseSchema, RunMetadataInterface, table=True):
429
427
  metadata = None
430
428
  if include_metadata:
431
429
  metadata = ArtifactVersionResponseMetadata(
432
- workspace=self.workspace.to_model(),
430
+ project=self.project.to_model(),
433
431
  producer_step_run_id=producer_step_run_id,
434
432
  visualizations=[v.to_model() for v in self.visualizations],
435
433
  run_metadata=self.fetch_metadata(),
@@ -33,9 +33,9 @@ from zenml.models import (
33
33
  )
34
34
  from zenml.utils.time_utils import utc_now
35
35
  from zenml.zen_stores.schemas.base_schemas import BaseSchema, NamedSchema
36
+ from zenml.zen_stores.schemas.project_schemas import ProjectSchema
36
37
  from zenml.zen_stores.schemas.schema_utils import build_foreign_key_field
37
38
  from zenml.zen_stores.schemas.user_schemas import UserSchema
38
- from zenml.zen_stores.schemas.workspace_schemas import WorkspaceSchema
39
39
 
40
40
 
41
41
  class CodeRepositorySchema(NamedSchema, table=True):
@@ -45,22 +45,20 @@ class CodeRepositorySchema(NamedSchema, table=True):
45
45
  __table_args__ = (
46
46
  UniqueConstraint(
47
47
  "name",
48
- "workspace_id",
49
- name="unique_code_repository_name_in_workspace",
48
+ "project_id",
49
+ name="unique_code_repository_name_in_project",
50
50
  ),
51
51
  )
52
52
 
53
- workspace_id: UUID = build_foreign_key_field(
53
+ project_id: UUID = build_foreign_key_field(
54
54
  source=__tablename__,
55
- target=WorkspaceSchema.__tablename__,
56
- source_column="workspace_id",
55
+ target=ProjectSchema.__tablename__,
56
+ source_column="project_id",
57
57
  target_column="id",
58
58
  ondelete="CASCADE",
59
59
  nullable=False,
60
60
  )
61
- workspace: "WorkspaceSchema" = Relationship(
62
- back_populates="code_repositories"
63
- )
61
+ project: "ProjectSchema" = Relationship(back_populates="code_repositories")
64
62
 
65
63
  user_id: Optional[UUID] = build_foreign_key_field(
66
64
  source=__tablename__,
@@ -94,7 +92,7 @@ class CodeRepositorySchema(NamedSchema, table=True):
94
92
  """
95
93
  return cls(
96
94
  name=request.name,
97
- workspace_id=request.workspace,
95
+ project_id=request.project,
98
96
  user_id=request.user,
99
97
  config=json.dumps(request.config),
100
98
  source=request.source.model_dump_json(),
@@ -129,7 +127,7 @@ class CodeRepositorySchema(NamedSchema, table=True):
129
127
  metadata = None
130
128
  if include_metadata:
131
129
  metadata = CodeRepositoryResponseMetadata(
132
- workspace=self.workspace.to_model(),
130
+ project=self.project.to_model(),
133
131
  config=json.loads(self.config),
134
132
  description=self.description,
135
133
  )
@@ -170,15 +168,15 @@ class CodeReferenceSchema(BaseSchema, table=True):
170
168
 
171
169
  __tablename__ = "code_reference"
172
170
 
173
- workspace_id: UUID = build_foreign_key_field(
171
+ project_id: UUID = build_foreign_key_field(
174
172
  source=__tablename__,
175
- target=WorkspaceSchema.__tablename__,
176
- source_column="workspace_id",
173
+ target=ProjectSchema.__tablename__,
174
+ source_column="project_id",
177
175
  target_column="id",
178
176
  ondelete="CASCADE",
179
177
  nullable=False,
180
178
  )
181
- workspace: "WorkspaceSchema" = Relationship()
179
+ project: "ProjectSchema" = Relationship()
182
180
 
183
181
  code_repository_id: UUID = build_foreign_key_field(
184
182
  source=__tablename__,
@@ -195,19 +193,19 @@ class CodeReferenceSchema(BaseSchema, table=True):
195
193
 
196
194
  @classmethod
197
195
  def from_request(
198
- cls, request: "CodeReferenceRequest", workspace_id: UUID
196
+ cls, request: "CodeReferenceRequest", project_id: UUID
199
197
  ) -> "CodeReferenceSchema":
200
198
  """Convert a `CodeReferenceRequest` to a `CodeReferenceSchema`.
201
199
 
202
200
  Args:
203
201
  request: The request model to convert.
204
- workspace_id: The workspace ID.
202
+ project_id: The project ID.
205
203
 
206
204
  Returns:
207
205
  The converted schema.
208
206
  """
209
207
  return cls(
210
- workspace_id=workspace_id,
208
+ project_id=project_id,
211
209
  commit=request.commit,
212
210
  subdirectory=request.subdirectory,
213
211
  code_repository_id=request.code_repository,
@@ -33,10 +33,10 @@ from zenml.models import (
33
33
  from zenml.utils.json_utils import pydantic_encoder
34
34
  from zenml.utils.time_utils import utc_now
35
35
  from zenml.zen_stores.schemas.base_schemas import NamedSchema
36
+ from zenml.zen_stores.schemas.project_schemas import ProjectSchema
36
37
  from zenml.zen_stores.schemas.schema_utils import build_foreign_key_field
37
38
  from zenml.zen_stores.schemas.user_schemas import UserSchema
38
39
  from zenml.zen_stores.schemas.utils import get_page_from_list
39
- from zenml.zen_stores.schemas.workspace_schemas import WorkspaceSchema
40
40
 
41
41
  if TYPE_CHECKING:
42
42
  from zenml.zen_stores.schemas import TriggerSchema
@@ -49,20 +49,20 @@ class EventSourceSchema(NamedSchema, table=True):
49
49
  __table_args__ = (
50
50
  UniqueConstraint(
51
51
  "name",
52
- "workspace_id",
53
- name="unique_event_source_name_in_workspace",
52
+ "project_id",
53
+ name="unique_event_source_name_in_project",
54
54
  ),
55
55
  )
56
56
 
57
- workspace_id: UUID = build_foreign_key_field(
57
+ project_id: UUID = build_foreign_key_field(
58
58
  source=__tablename__,
59
- target=WorkspaceSchema.__tablename__,
60
- source_column="workspace_id",
59
+ target=ProjectSchema.__tablename__,
60
+ source_column="project_id",
61
61
  target_column="id",
62
62
  ondelete="CASCADE",
63
63
  nullable=False,
64
64
  )
65
- workspace: "WorkspaceSchema" = Relationship(back_populates="event_sources")
65
+ project: "ProjectSchema" = Relationship(back_populates="event_sources")
66
66
 
67
67
  user_id: Optional[UUID] = build_foreign_key_field(
68
68
  source=__tablename__,
@@ -96,7 +96,7 @@ class EventSourceSchema(NamedSchema, table=True):
96
96
  The converted schema.
97
97
  """
98
98
  return cls(
99
- workspace_id=request.workspace,
99
+ project_id=request.project,
100
100
  user_id=request.user,
101
101
  flavor=request.flavor,
102
102
  plugin_subtype=request.plugin_subtype,
@@ -157,7 +157,7 @@ class EventSourceSchema(NamedSchema, table=True):
157
157
  metadata = None
158
158
  if include_metadata:
159
159
  metadata = EventSourceResponseMetadata(
160
- workspace=self.workspace.to_model(),
160
+ project=self.project.to_model(),
161
161
  description=self.description,
162
162
  configuration=json.loads(
163
163
  base64.b64decode(self.configuration).decode()