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
@@ -11,7 +11,7 @@
11
11
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
12
12
  # or implied. See the License for the specific language governing
13
13
  # permissions and limitations under the License.
14
- """Endpoint definitions for workspaces."""
14
+ """Endpoint definitions for projects."""
15
15
 
16
16
  from typing import Union
17
17
  from uuid import UUID
@@ -20,6 +20,7 @@ from fastapi import APIRouter, Depends, Security
20
20
 
21
21
  from zenml.constants import (
22
22
  API,
23
+ PROJECTS,
23
24
  STATISTICS,
24
25
  VERSION_1,
25
26
  WORKSPACES,
@@ -28,11 +29,11 @@ from zenml.models import (
28
29
  Page,
29
30
  PipelineFilter,
30
31
  PipelineRunFilter,
31
- WorkspaceFilter,
32
- WorkspaceRequest,
33
- WorkspaceResponse,
34
- WorkspaceStatistics,
35
- WorkspaceUpdate,
32
+ ProjectFilter,
33
+ ProjectRequest,
34
+ ProjectResponse,
35
+ ProjectStatistics,
36
+ ProjectUpdate,
36
37
  )
37
38
  from zenml.zen_server.auth import AuthContext, authorize
38
39
  from zenml.zen_server.exceptions import error_response
@@ -53,188 +54,230 @@ from zenml.zen_server.utils import (
53
54
  zen_store,
54
55
  )
55
56
 
56
- router = APIRouter(
57
+ workspace_router = APIRouter(
57
58
  prefix=API + VERSION_1 + WORKSPACES,
58
59
  tags=["workspaces"],
59
60
  responses={401: error_response},
60
61
  )
61
62
 
63
+ router = APIRouter(
64
+ prefix=API + VERSION_1 + PROJECTS,
65
+ tags=["projects"],
66
+ responses={401: error_response},
67
+ )
68
+
62
69
 
70
+ # TODO: kept for backwards compatibility only; to be removed after the migration
71
+ @workspace_router.get(
72
+ "",
73
+ responses={401: error_response, 404: error_response, 422: error_response},
74
+ deprecated=True,
75
+ )
63
76
  @router.get(
64
77
  "",
65
78
  responses={401: error_response, 404: error_response, 422: error_response},
66
79
  )
67
80
  @handle_exceptions
68
- def list_workspaces(
69
- workspace_filter_model: WorkspaceFilter = Depends(
70
- make_dependable(WorkspaceFilter)
81
+ def list_projects(
82
+ project_filter_model: ProjectFilter = Depends(
83
+ make_dependable(ProjectFilter)
71
84
  ),
72
85
  hydrate: bool = False,
73
86
  _: AuthContext = Security(authorize),
74
- ) -> Page[WorkspaceResponse]:
75
- """Lists all workspaces in the organization.
87
+ ) -> Page[ProjectResponse]:
88
+ """Lists all projects in the organization.
76
89
 
77
90
  Args:
78
- workspace_filter_model: Filter model used for pagination, sorting,
91
+ project_filter_model: Filter model used for pagination, sorting,
79
92
  filtering,
80
93
  hydrate: Flag deciding whether to hydrate the output model(s)
81
94
  by including metadata fields in the response.
82
95
 
83
96
  Returns:
84
- A list of workspaces.
97
+ A list of projects.
85
98
  """
86
99
  return verify_permissions_and_list_entities(
87
- filter_model=workspace_filter_model,
88
- resource_type=ResourceType.WORKSPACE,
89
- list_method=zen_store().list_workspaces,
100
+ filter_model=project_filter_model,
101
+ resource_type=ResourceType.PROJECT,
102
+ list_method=zen_store().list_projects,
90
103
  hydrate=hydrate,
91
104
  )
92
105
 
93
106
 
107
+ # TODO: kept for backwards compatibility only; to be removed after the migration
108
+ @workspace_router.post(
109
+ "",
110
+ responses={401: error_response, 409: error_response, 422: error_response},
111
+ deprecated=True,
112
+ )
94
113
  @router.post(
95
114
  "",
96
115
  responses={401: error_response, 409: error_response, 422: error_response},
97
116
  )
98
117
  @handle_exceptions
99
- def create_workspace(
100
- workspace_request: WorkspaceRequest,
118
+ def create_project(
119
+ project_request: ProjectRequest,
101
120
  _: AuthContext = Security(authorize),
102
- ) -> WorkspaceResponse:
103
- """Creates a workspace based on the requestBody.
121
+ ) -> ProjectResponse:
122
+ """Creates a project based on the requestBody.
104
123
 
105
124
  # noqa: DAR401
106
125
 
107
126
  Args:
108
- workspace_request: Workspace to create.
127
+ project_request: Project to create.
109
128
 
110
129
  Returns:
111
- The created workspace.
130
+ The created project.
112
131
  """
113
132
  return verify_permissions_and_create_entity(
114
- request_model=workspace_request,
115
- create_method=zen_store().create_workspace,
133
+ request_model=project_request,
134
+ create_method=zen_store().create_project,
116
135
  )
117
136
 
118
137
 
138
+ # TODO: kept for backwards compatibility only; to be removed after the migration
139
+ @workspace_router.get(
140
+ "/{project_name_or_id}",
141
+ responses={401: error_response, 404: error_response, 422: error_response},
142
+ deprecated=True,
143
+ )
119
144
  @router.get(
120
- "/{workspace_name_or_id}",
145
+ "/{project_name_or_id}",
121
146
  responses={401: error_response, 404: error_response, 422: error_response},
122
147
  )
123
148
  @handle_exceptions
124
- def get_workspace(
125
- workspace_name_or_id: Union[str, UUID],
149
+ def get_project(
150
+ project_name_or_id: Union[str, UUID],
126
151
  hydrate: bool = True,
127
152
  _: AuthContext = Security(authorize),
128
- ) -> WorkspaceResponse:
129
- """Get a workspace for given name.
153
+ ) -> ProjectResponse:
154
+ """Get a project for given name.
130
155
 
131
156
  # noqa: DAR401
132
157
 
133
158
  Args:
134
- workspace_name_or_id: Name or ID of the workspace.
159
+ project_name_or_id: Name or ID of the project.
135
160
  hydrate: Flag deciding whether to hydrate the output model(s)
136
161
  by including metadata fields in the response.
137
162
 
138
163
  Returns:
139
- The requested workspace.
164
+ The requested project.
140
165
  """
141
166
  return verify_permissions_and_get_entity(
142
- id=workspace_name_or_id,
143
- get_method=zen_store().get_workspace,
167
+ id=project_name_or_id,
168
+ get_method=zen_store().get_project,
144
169
  hydrate=hydrate,
145
170
  )
146
171
 
147
172
 
173
+ # TODO: kept for backwards compatibility only; to be removed after the migration
174
+ @workspace_router.put(
175
+ "/{project_name_or_id}",
176
+ responses={401: error_response, 404: error_response, 422: error_response},
177
+ deprecated=True,
178
+ )
148
179
  @router.put(
149
- "/{workspace_name_or_id}",
180
+ "/{project_name_or_id}",
150
181
  responses={401: error_response, 404: error_response, 422: error_response},
151
182
  )
152
183
  @handle_exceptions
153
- def update_workspace(
154
- workspace_name_or_id: UUID,
155
- workspace_update: WorkspaceUpdate,
184
+ def update_project(
185
+ project_name_or_id: UUID,
186
+ project_update: ProjectUpdate,
156
187
  _: AuthContext = Security(authorize),
157
- ) -> WorkspaceResponse:
158
- """Get a workspace for given name.
188
+ ) -> ProjectResponse:
189
+ """Get a project for given name.
159
190
 
160
191
  # noqa: DAR401
161
192
 
162
193
  Args:
163
- workspace_name_or_id: Name or ID of the workspace to update.
164
- workspace_update: the workspace to use to update
194
+ project_name_or_id: Name or ID of the project to update.
195
+ project_update: the project to use to update
165
196
 
166
197
  Returns:
167
- The updated workspace.
198
+ The updated project.
168
199
  """
169
200
  return verify_permissions_and_update_entity(
170
- id=workspace_name_or_id,
171
- update_model=workspace_update,
172
- get_method=zen_store().get_workspace,
173
- update_method=zen_store().update_workspace,
201
+ id=project_name_or_id,
202
+ update_model=project_update,
203
+ get_method=zen_store().get_project,
204
+ update_method=zen_store().update_project,
174
205
  )
175
206
 
176
207
 
208
+ # TODO: kept for backwards compatibility only; to be removed after the migration
209
+ @workspace_router.delete(
210
+ "/{project_name_or_id}",
211
+ responses={401: error_response, 404: error_response, 422: error_response},
212
+ deprecated=True,
213
+ )
177
214
  @router.delete(
178
- "/{workspace_name_or_id}",
215
+ "/{project_name_or_id}",
179
216
  responses={401: error_response, 404: error_response, 422: error_response},
180
217
  )
181
218
  @handle_exceptions
182
- def delete_workspace(
183
- workspace_name_or_id: Union[str, UUID],
219
+ def delete_project(
220
+ project_name_or_id: Union[str, UUID],
184
221
  _: AuthContext = Security(authorize),
185
222
  ) -> None:
186
- """Deletes a workspace.
223
+ """Deletes a project.
187
224
 
188
225
  Args:
189
- workspace_name_or_id: Name or ID of the workspace.
226
+ project_name_or_id: Name or ID of the project.
190
227
  """
191
228
  verify_permissions_and_delete_entity(
192
- id=workspace_name_or_id,
193
- get_method=zen_store().get_workspace,
194
- delete_method=zen_store().delete_workspace,
229
+ id=project_name_or_id,
230
+ get_method=zen_store().get_project,
231
+ delete_method=zen_store().delete_project,
195
232
  )
196
233
 
197
234
 
235
+ # TODO: kept for backwards compatibility only; to be removed after the migration
236
+ @workspace_router.get(
237
+ "/{project_name_or_id}" + STATISTICS,
238
+ responses={401: error_response, 404: error_response, 422: error_response},
239
+ deprecated=True,
240
+ )
198
241
  @router.get(
199
- "/{workspace_name_or_id}" + STATISTICS,
242
+ "/{project_name_or_id}" + STATISTICS,
200
243
  responses={401: error_response, 404: error_response, 422: error_response},
201
244
  )
202
245
  @handle_exceptions
203
- def get_workspace_statistics(
204
- workspace_name_or_id: Union[str, UUID],
246
+ def get_project_statistics(
247
+ project_name_or_id: Union[str, UUID],
205
248
  auth_context: AuthContext = Security(authorize),
206
- ) -> WorkspaceStatistics:
207
- """Gets statistics of a workspace.
249
+ ) -> ProjectStatistics:
250
+ """Gets statistics of a project.
208
251
 
209
252
  # noqa: DAR401
210
253
 
211
254
  Args:
212
- workspace_name_or_id: Name or ID of the workspace to get statistics for.
255
+ project_name_or_id: Name or ID of the project to get statistics for.
213
256
  auth_context: Authentication context.
214
257
 
215
258
  Returns:
216
- All pipelines within the workspace.
259
+ Project statistics.
217
260
  """
218
- workspace = verify_permissions_and_get_entity(
219
- id=workspace_name_or_id,
220
- get_method=zen_store().get_workspace,
261
+ project = verify_permissions_and_get_entity(
262
+ id=project_name_or_id,
263
+ get_method=zen_store().get_project,
221
264
  )
222
265
 
223
266
  user_id = auth_context.user.id
224
267
 
225
- run_filter = PipelineRunFilter(workspace=workspace.id)
268
+ run_filter = PipelineRunFilter(project=project.id)
226
269
  run_filter.configure_rbac(
227
270
  authenticated_user_id=user_id,
228
271
  id=get_allowed_resource_ids(resource_type=ResourceType.PIPELINE_RUN),
229
272
  )
230
273
 
231
- pipeline_filter = PipelineFilter(workspace=workspace.id)
274
+ pipeline_filter = PipelineFilter(project=project.id)
232
275
  pipeline_filter.configure_rbac(
233
276
  authenticated_user_id=user_id,
234
277
  id=get_allowed_resource_ids(resource_type=ResourceType.PIPELINE),
235
278
  )
236
279
 
237
- return WorkspaceStatistics(
280
+ return ProjectStatistics(
238
281
  pipelines=zen_store().count_pipelines(filter_model=pipeline_filter),
239
282
  runs=zen_store().count_runs(filter_model=run_filter),
240
283
  )
@@ -28,9 +28,7 @@ from zenml.zen_server.rbac.utils import (
28
28
  batch_verify_permissions_for_models,
29
29
  verify_permission_for_model,
30
30
  )
31
- from zenml.zen_server.routers.workspaces_endpoints import (
32
- router as workspace_router,
33
- )
31
+ from zenml.zen_server.routers.projects_endpoints import workspace_router
34
32
  from zenml.zen_server.utils import handle_exceptions, zen_store
35
33
 
36
34
  router = APIRouter(
@@ -47,7 +45,7 @@ router = APIRouter(
47
45
  # TODO: the workspace scoped endpoint is only kept for dashboard compatibility
48
46
  # and can be removed after the migration
49
47
  @workspace_router.post(
50
- "/{workspace_name_or_id}" + RUN_METADATA,
48
+ "/{project_name_or_id}" + RUN_METADATA,
51
49
  responses={401: error_response, 409: error_response, 422: error_response},
52
50
  deprecated=True,
53
51
  tags=["run_metadata"],
@@ -55,22 +53,22 @@ router = APIRouter(
55
53
  @handle_exceptions
56
54
  def create_run_metadata(
57
55
  run_metadata: RunMetadataRequest,
58
- workspace_name_or_id: Optional[Union[str, UUID]] = None,
56
+ project_name_or_id: Optional[Union[str, UUID]] = None,
59
57
  auth_context: AuthContext = Security(authorize),
60
58
  ) -> None:
61
59
  """Creates run metadata.
62
60
 
63
61
  Args:
64
62
  run_metadata: The run metadata to create.
65
- workspace_name_or_id: Optional name or ID of the workspace.
63
+ project_name_or_id: Optional name or ID of the project.
66
64
  auth_context: Authentication context.
67
65
 
68
66
  Raises:
69
67
  RuntimeError: If the resource type is not supported.
70
68
  """
71
- if workspace_name_or_id:
72
- workspace = zen_store().get_workspace(workspace_name_or_id)
73
- run_metadata.workspace = workspace.id
69
+ if project_name_or_id:
70
+ project = zen_store().get_project(project_name_or_id)
71
+ run_metadata.project = project.id
74
72
 
75
73
  run_metadata.user = auth_context.user.id
76
74
 
@@ -41,9 +41,7 @@ from zenml.zen_server.rbac.endpoint_utils import (
41
41
  )
42
42
  from zenml.zen_server.rbac.models import Action, ResourceType
43
43
  from zenml.zen_server.rbac.utils import verify_permission
44
- from zenml.zen_server.routers.workspaces_endpoints import (
45
- router as workspace_router,
46
- )
44
+ from zenml.zen_server.routers.projects_endpoints import workspace_router
47
45
  from zenml.zen_server.utils import (
48
46
  handle_exceptions,
49
47
  make_dependable,
@@ -65,7 +63,7 @@ router = APIRouter(
65
63
  # TODO: the workspace scoped endpoint is only kept for dashboard compatibility
66
64
  # and can be removed after the migration
67
65
  @workspace_router.post(
68
- "/{workspace_name_or_id}" + RUN_TEMPLATES,
66
+ "/{project_name_or_id}" + RUN_TEMPLATES,
69
67
  responses={401: error_response, 409: error_response, 422: error_response},
70
68
  deprecated=True,
71
69
  tags=["run_templates"],
@@ -73,21 +71,21 @@ router = APIRouter(
73
71
  @handle_exceptions
74
72
  def create_run_template(
75
73
  run_template: RunTemplateRequest,
76
- workspace_name_or_id: Optional[Union[str, UUID]] = None,
74
+ project_name_or_id: Optional[Union[str, UUID]] = None,
77
75
  _: AuthContext = Security(authorize),
78
76
  ) -> RunTemplateResponse:
79
77
  """Create a run template.
80
78
 
81
79
  Args:
82
80
  run_template: Run template to create.
83
- workspace_name_or_id: Optional name or ID of the workspace.
81
+ project_name_or_id: Optional name or ID of the project.
84
82
 
85
83
  Returns:
86
84
  The created run template.
87
85
  """
88
- if workspace_name_or_id:
89
- workspace = zen_store().get_workspace(workspace_name_or_id)
90
- run_template.workspace = workspace.id
86
+ if project_name_or_id:
87
+ project = zen_store().get_project(project_name_or_id)
88
+ run_template.project = project.id
91
89
 
92
90
  return verify_permissions_and_create_entity(
93
91
  request_model=run_template,
@@ -102,7 +100,7 @@ def create_run_template(
102
100
  # TODO: the workspace scoped endpoint is only kept for dashboard compatibility
103
101
  # and can be removed after the migration
104
102
  @workspace_router.get(
105
- "/{workspace_name_or_id}" + RUN_TEMPLATES,
103
+ "/{project_name_or_id}" + RUN_TEMPLATES,
106
104
  responses={401: error_response, 404: error_response, 422: error_response},
107
105
  deprecated=True,
108
106
  tags=["run_templates"],
@@ -112,7 +110,7 @@ def list_run_templates(
112
110
  filter_model: RunTemplateFilter = Depends(
113
111
  make_dependable(RunTemplateFilter)
114
112
  ),
115
- workspace_name_or_id: Optional[Union[str, UUID]] = None,
113
+ project_name_or_id: Optional[Union[str, UUID]] = None,
116
114
  hydrate: bool = False,
117
115
  _: AuthContext = Security(authorize),
118
116
  ) -> Page[RunTemplateResponse]:
@@ -121,15 +119,15 @@ def list_run_templates(
121
119
  Args:
122
120
  filter_model: Filter model used for pagination, sorting,
123
121
  filtering.
124
- workspace_name_or_id: Optional name or ID of the workspace.
122
+ project_name_or_id: Optional name or ID of the project.
125
123
  hydrate: Flag deciding whether to hydrate the output model(s)
126
124
  by including metadata fields in the response.
127
125
 
128
126
  Returns:
129
127
  Page of run templates.
130
128
  """
131
- if workspace_name_or_id:
132
- filter_model.workspace = workspace_name_or_id
129
+ if project_name_or_id:
130
+ filter_model.project = project_name_or_id
133
131
 
134
132
  return verify_permissions_and_list_entities(
135
133
  filter_model=filter_model,
@@ -253,18 +251,18 @@ if server_config().workload_manager_enabled:
253
251
  hydrate=True,
254
252
  )
255
253
  analytics_handler.metadata = {
256
- "workspace_id": template.workspace.id,
254
+ "project_id": template.project.id,
257
255
  }
258
256
 
259
257
  verify_permission(
260
258
  resource_type=ResourceType.PIPELINE_DEPLOYMENT,
261
259
  action=Action.CREATE,
262
- workspace_id=template.workspace.id,
260
+ project_id=template.project.id,
263
261
  )
264
262
  verify_permission(
265
263
  resource_type=ResourceType.PIPELINE_RUN,
266
264
  action=Action.CREATE,
267
- workspace_id=template.workspace.id,
265
+ project_id=template.project.id,
268
266
  )
269
267
 
270
268
  return run_template(
@@ -51,9 +51,7 @@ from zenml.zen_server.rbac.models import Action, ResourceType
51
51
  from zenml.zen_server.rbac.utils import (
52
52
  verify_permission_for_model,
53
53
  )
54
- from zenml.zen_server.routers.workspaces_endpoints import (
55
- router as workspace_router,
56
- )
54
+ from zenml.zen_server.routers.projects_endpoints import workspace_router
57
55
  from zenml.zen_server.utils import (
58
56
  handle_exceptions,
59
57
  make_dependable,
@@ -77,7 +75,7 @@ logger = get_logger(__name__)
77
75
  # TODO: the workspace scoped endpoint is only kept for dashboard compatibility
78
76
  # and can be removed after the migration
79
77
  @workspace_router.post(
80
- "/{workspace_name_or_id}" + RUNS,
78
+ "/{project_name_or_id}" + RUNS,
81
79
  responses={401: error_response, 409: error_response, 422: error_response},
82
80
  deprecated=True,
83
81
  tags=["runs"],
@@ -85,22 +83,22 @@ logger = get_logger(__name__)
85
83
  @handle_exceptions
86
84
  def get_or_create_pipeline_run(
87
85
  pipeline_run: PipelineRunRequest,
88
- workspace_name_or_id: Optional[Union[str, UUID]] = None,
86
+ project_name_or_id: Optional[Union[str, UUID]] = None,
89
87
  _: AuthContext = Security(authorize),
90
88
  ) -> Tuple[PipelineRunResponse, bool]:
91
89
  """Get or create a pipeline run.
92
90
 
93
91
  Args:
94
92
  pipeline_run: Pipeline run to create.
95
- workspace_name_or_id: Optional name or ID of the workspace.
93
+ project_name_or_id: Optional name or ID of the project.
96
94
 
97
95
  Returns:
98
96
  The pipeline run and a boolean indicating whether the run was created
99
97
  or not.
100
98
  """
101
- if workspace_name_or_id:
102
- workspace = zen_store().get_workspace(workspace_name_or_id)
103
- pipeline_run.workspace = workspace.id
99
+ if project_name_or_id:
100
+ project = zen_store().get_project(project_name_or_id)
101
+ pipeline_run.project = project.id
104
102
 
105
103
  return verify_permissions_and_get_or_create_entity(
106
104
  request_model=pipeline_run,
@@ -115,7 +113,7 @@ def get_or_create_pipeline_run(
115
113
  # TODO: the workspace scoped endpoint is only kept for dashboard compatibility
116
114
  # and can be removed after the migration
117
115
  @workspace_router.get(
118
- "/{workspace_name_or_id}" + RUNS,
116
+ "/{project_name_or_id}" + RUNS,
119
117
  responses={401: error_response, 404: error_response, 422: error_response},
120
118
  deprecated=True,
121
119
  tags=["runs"],
@@ -125,7 +123,7 @@ def list_runs(
125
123
  runs_filter_model: PipelineRunFilter = Depends(
126
124
  make_dependable(PipelineRunFilter)
127
125
  ),
128
- workspace_name_or_id: Optional[Union[str, UUID]] = None,
126
+ project_name_or_id: Optional[Union[str, UUID]] = None,
129
127
  hydrate: bool = False,
130
128
  _: AuthContext = Security(authorize),
131
129
  ) -> Page[PipelineRunResponse]:
@@ -133,15 +131,15 @@ def list_runs(
133
131
 
134
132
  Args:
135
133
  runs_filter_model: Filter model used for pagination, sorting, filtering.
136
- workspace_name_or_id: Optional name or ID of the workspace.
134
+ project_name_or_id: Optional name or ID of the project.
137
135
  hydrate: Flag deciding whether to hydrate the output model(s)
138
136
  by including metadata fields in the response.
139
137
 
140
138
  Returns:
141
139
  The pipeline runs according to query filters.
142
140
  """
143
- if workspace_name_or_id:
144
- runs_filter_model.workspace = workspace_name_or_id
141
+ if project_name_or_id:
142
+ runs_filter_model.project = project_name_or_id
145
143
 
146
144
  return verify_permissions_and_list_entities(
147
145
  filter_model=runs_filter_model,
@@ -31,9 +31,7 @@ from zenml.zen_server.exceptions import error_response
31
31
  from zenml.zen_server.rbac.endpoint_utils import (
32
32
  verify_permissions_and_create_entity,
33
33
  )
34
- from zenml.zen_server.routers.workspaces_endpoints import (
35
- router as workspace_router,
36
- )
34
+ from zenml.zen_server.routers.projects_endpoints import workspace_router
37
35
  from zenml.zen_server.utils import (
38
36
  handle_exceptions,
39
37
  make_dependable,
@@ -54,7 +52,7 @@ router = APIRouter(
54
52
  # TODO: the workspace scoped endpoint is only kept for dashboard compatibility
55
53
  # and can be removed after the migration
56
54
  @workspace_router.post(
57
- "/{workspace_name_or_id}" + SCHEDULES,
55
+ "/{project_name_or_id}" + SCHEDULES,
58
56
  responses={401: error_response, 409: error_response, 422: error_response},
59
57
  deprecated=True,
60
58
  tags=["schedules"],
@@ -62,22 +60,22 @@ router = APIRouter(
62
60
  @handle_exceptions
63
61
  def create_schedule(
64
62
  schedule: ScheduleRequest,
65
- workspace_name_or_id: Optional[Union[str, UUID]] = None,
63
+ project_name_or_id: Optional[Union[str, UUID]] = None,
66
64
  auth_context: AuthContext = Security(authorize),
67
65
  ) -> ScheduleResponse:
68
66
  """Creates a schedule.
69
67
 
70
68
  Args:
71
69
  schedule: Schedule to create.
72
- workspace_name_or_id: Optional name or ID of the workspace.
70
+ project_name_or_id: Optional name or ID of the project.
73
71
  auth_context: Authentication context.
74
72
 
75
73
  Returns:
76
74
  The created schedule.
77
75
  """
78
- if workspace_name_or_id:
79
- workspace = zen_store().get_workspace(workspace_name_or_id)
80
- schedule.workspace = workspace.id
76
+ if project_name_or_id:
77
+ project = zen_store().get_project(project_name_or_id)
78
+ schedule.project = project.id
81
79
 
82
80
  # NOTE: no RBAC is enforced currently for schedules, but we're
83
81
  # keeping the RBAC checks here for consistency
@@ -94,7 +92,7 @@ def create_schedule(
94
92
  # TODO: the workspace scoped endpoint is only kept for dashboard compatibility
95
93
  # and can be removed after the migration
96
94
  @workspace_router.get(
97
- "/{workspace_name_or_id}" + SCHEDULES,
95
+ "/{project_name_or_id}" + SCHEDULES,
98
96
  responses={401: error_response, 404: error_response, 422: error_response},
99
97
  deprecated=True,
100
98
  tags=["schedules"],
@@ -104,7 +102,7 @@ def list_schedules(
104
102
  schedule_filter_model: ScheduleFilter = Depends(
105
103
  make_dependable(ScheduleFilter)
106
104
  ),
107
- workspace_name_or_id: Optional[Union[str, UUID]] = None,
105
+ project_name_or_id: Optional[Union[str, UUID]] = None,
108
106
  hydrate: bool = False,
109
107
  _: AuthContext = Security(authorize),
110
108
  ) -> Page[ScheduleResponse]:
@@ -113,15 +111,15 @@ def list_schedules(
113
111
  Args:
114
112
  schedule_filter_model: Filter model used for pagination, sorting,
115
113
  filtering
116
- workspace_name_or_id: Optional name or ID of the workspace.
114
+ project_name_or_id: Optional name or ID of the project.
117
115
  hydrate: Flag deciding whether to hydrate the output model(s)
118
116
  by including metadata fields in the response.
119
117
 
120
118
  Returns:
121
119
  List of schedule objects.
122
120
  """
123
- if workspace_name_or_id:
124
- schedule_filter_model.workspace = workspace_name_or_id
121
+ if project_name_or_id:
122
+ schedule_filter_model.project = project_name_or_id
125
123
 
126
124
  return zen_store().list_schedules(
127
125
  schedule_filter_model=schedule_filter_model,
@@ -49,9 +49,7 @@ from zenml.zen_server.rbac.utils import (
49
49
  is_owned_by_authenticated_user,
50
50
  verify_permission,
51
51
  )
52
- from zenml.zen_server.routers.workspaces_endpoints import (
53
- router as workspace_router,
54
- )
52
+ from zenml.zen_server.routers.projects_endpoints import workspace_router
55
53
  from zenml.zen_server.utils import (
56
54
  handle_exceptions,
57
55
  make_dependable,