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
@@ -36,9 +36,7 @@ from zenml.zen_server.rbac.endpoint_utils import (
36
36
  verify_permissions_and_update_entity,
37
37
  )
38
38
  from zenml.zen_server.rbac.models import ResourceType
39
- from zenml.zen_server.routers.workspaces_endpoints import (
40
- router as workspace_router,
41
- )
39
+ from zenml.zen_server.routers.projects_endpoints import workspace_router
42
40
  from zenml.zen_server.utils import (
43
41
  handle_exceptions,
44
42
  make_dependable,
@@ -59,7 +57,7 @@ router = APIRouter(
59
57
  # TODO: the workspace scoped endpoint is only kept for dashboard compatibility
60
58
  # and can be removed after the migration
61
59
  @workspace_router.post(
62
- "/{workspace_name_or_id}" + CODE_REPOSITORIES,
60
+ "/{project_name_or_id}" + CODE_REPOSITORIES,
63
61
  responses={401: error_response, 409: error_response, 422: error_response},
64
62
  deprecated=True,
65
63
  tags=["code_repositories"],
@@ -67,21 +65,21 @@ router = APIRouter(
67
65
  @handle_exceptions
68
66
  def create_code_repository(
69
67
  code_repository: CodeRepositoryRequest,
70
- workspace_name_or_id: Optional[Union[str, UUID]] = None,
68
+ project_name_or_id: Optional[Union[str, UUID]] = None,
71
69
  _: AuthContext = Security(authorize),
72
70
  ) -> CodeRepositoryResponse:
73
71
  """Creates a code repository.
74
72
 
75
73
  Args:
76
74
  code_repository: Code repository to create.
77
- workspace_name_or_id: Optional name or ID of the workspace.
75
+ project_name_or_id: Optional name or ID of the project.
78
76
 
79
77
  Returns:
80
78
  The created code repository.
81
79
  """
82
- if workspace_name_or_id:
83
- workspace = zen_store().get_workspace(workspace_name_or_id)
84
- code_repository.workspace = workspace.id
80
+ if project_name_or_id:
81
+ project = zen_store().get_project(project_name_or_id)
82
+ code_repository.project = project.id
85
83
 
86
84
  return verify_permissions_and_create_entity(
87
85
  request_model=code_repository,
@@ -96,7 +94,7 @@ def create_code_repository(
96
94
  # TODO: the workspace scoped endpoint is only kept for dashboard compatibility
97
95
  # and can be removed after the migration
98
96
  @workspace_router.get(
99
- "/{workspace_name_or_id}" + CODE_REPOSITORIES,
97
+ "/{project_name_or_id}" + CODE_REPOSITORIES,
100
98
  responses={401: error_response, 404: error_response, 422: error_response},
101
99
  deprecated=True,
102
100
  tags=["code_repositories"],
@@ -106,7 +104,7 @@ def list_code_repositories(
106
104
  filter_model: CodeRepositoryFilter = Depends(
107
105
  make_dependable(CodeRepositoryFilter)
108
106
  ),
109
- workspace_name_or_id: Optional[Union[str, UUID]] = None,
107
+ project_name_or_id: Optional[Union[str, UUID]] = None,
110
108
  hydrate: bool = False,
111
109
  _: AuthContext = Security(authorize),
112
110
  ) -> Page[CodeRepositoryResponse]:
@@ -115,15 +113,15 @@ def list_code_repositories(
115
113
  Args:
116
114
  filter_model: Filter model used for pagination, sorting,
117
115
  filtering.
118
- workspace_name_or_id: Optional name or ID of the workspace.
116
+ project_name_or_id: Optional name or ID of the project.
119
117
  hydrate: Flag deciding whether to hydrate the output model(s)
120
118
  by including metadata fields in the response.
121
119
 
122
120
  Returns:
123
121
  Page of code repository objects.
124
122
  """
125
- if workspace_name_or_id:
126
- filter_model.workspace = workspace_name_or_id
123
+ if project_name_or_id:
124
+ filter_model.project = project_name_or_id
127
125
 
128
126
  return verify_permissions_and_list_entities(
129
127
  filter_model=filter_model,
@@ -56,13 +56,11 @@ from zenml.zen_server.rbac.utils import (
56
56
  from zenml.zen_server.routers.models_endpoints import (
57
57
  router as model_router,
58
58
  )
59
- from zenml.zen_server.routers.workspaces_endpoints import (
60
- router as workspace_router,
61
- )
59
+ from zenml.zen_server.routers.projects_endpoints import workspace_router
62
60
  from zenml.zen_server.utils import (
63
61
  handle_exceptions,
64
62
  make_dependable,
65
- set_filter_workspace_scope,
63
+ set_filter_project_scope,
66
64
  zen_store,
67
65
  )
68
66
 
@@ -85,7 +83,7 @@ router = APIRouter(
85
83
  # TODO: the workspace scoped endpoint is only kept for dashboard compatibility
86
84
  # and can be removed after the migration
87
85
  @workspace_router.post(
88
- "/{workspace_name_or_id}" + MODELS + "/{model_id}" + MODEL_VERSIONS,
86
+ "/{project_name_or_id}" + MODELS + "/{model_id}" + MODEL_VERSIONS,
89
87
  responses={401: error_response, 409: error_response, 422: error_response},
90
88
  deprecated=True,
91
89
  tags=["model_versions"],
@@ -94,7 +92,7 @@ router = APIRouter(
94
92
  def create_model_version(
95
93
  model_version: ModelVersionRequest,
96
94
  model_id: Optional[UUID] = None,
97
- workspace_name_or_id: Optional[Union[str, UUID]] = None,
95
+ project_name_or_id: Optional[Union[str, UUID]] = None,
98
96
  _: AuthContext = Security(authorize),
99
97
  ) -> ModelVersionResponse:
100
98
  """Creates a model version.
@@ -102,14 +100,14 @@ def create_model_version(
102
100
  Args:
103
101
  model_version: Model version to create.
104
102
  model_id: Optional ID of the model.
105
- workspace_name_or_id: Optional name or ID of the workspace.
103
+ project_name_or_id: Optional name or ID of the project.
106
104
 
107
105
  Returns:
108
106
  The created model version.
109
107
  """
110
- if workspace_name_or_id:
111
- workspace = zen_store().get_workspace(workspace_name_or_id)
112
- model_version.workspace = workspace.id
108
+ if project_name_or_id:
109
+ project = zen_store().get_project(project_name_or_id)
110
+ model_version.project = project.id
113
111
 
114
112
  if model_id:
115
113
  model_version.model = model_id
@@ -159,14 +157,14 @@ def list_model_versions(
159
157
  if not model_version_filter_model.model:
160
158
  raise ValueError("Model missing from the filter")
161
159
 
162
- # A workspace scoped request must always be scoped to a specific
163
- # workspace. This is required for the RBAC check to work.
164
- set_filter_workspace_scope(model_version_filter_model)
165
- assert isinstance(model_version_filter_model.workspace, UUID)
160
+ # A project scoped request must always be scoped to a specific
161
+ # project. This is required for the RBAC check to work.
162
+ set_filter_project_scope(model_version_filter_model)
163
+ assert isinstance(model_version_filter_model.project, UUID)
166
164
 
167
165
  model = zen_store().get_model_by_name_or_id(
168
166
  model_version_filter_model.model,
169
- workspace=model_version_filter_model.workspace,
167
+ project=model_version_filter_model.project,
170
168
  )
171
169
 
172
170
  # Check read permissions on the model
@@ -41,9 +41,7 @@ from zenml.zen_server.rbac.endpoint_utils import (
41
41
  verify_permissions_and_update_entity,
42
42
  )
43
43
  from zenml.zen_server.rbac.models import ResourceType
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,
@@ -69,7 +67,7 @@ router = APIRouter(
69
67
  # TODO: the workspace scoped endpoint is only kept for dashboard compatibility
70
68
  # and can be removed after the migration
71
69
  @workspace_router.post(
72
- "/{workspace_name_or_id}" + MODELS,
70
+ "/{project_name_or_id}" + MODELS,
73
71
  responses={401: error_response, 409: error_response, 422: error_response},
74
72
  deprecated=True,
75
73
  tags=["models"],
@@ -77,21 +75,21 @@ router = APIRouter(
77
75
  @handle_exceptions
78
76
  def create_model(
79
77
  model: ModelRequest,
80
- workspace_name_or_id: Optional[Union[str, UUID]] = None,
78
+ project_name_or_id: Optional[Union[str, UUID]] = None,
81
79
  _: AuthContext = Security(authorize),
82
80
  ) -> ModelResponse:
83
81
  """Creates a model.
84
82
 
85
83
  Args:
86
84
  model: Model to create.
87
- workspace_name_or_id: Optional name or ID of the workspace.
85
+ project_name_or_id: Optional name or ID of the project.
88
86
 
89
87
  Returns:
90
88
  The created model.
91
89
  """
92
- if workspace_name_or_id:
93
- workspace = zen_store().get_workspace(workspace_name_or_id)
94
- model.workspace = workspace.id
90
+ if project_name_or_id:
91
+ project = zen_store().get_project(project_name_or_id)
92
+ model.project = project.id
95
93
 
96
94
  return verify_permissions_and_create_entity(
97
95
  request_model=model,
@@ -34,9 +34,7 @@ from zenml.zen_server.rbac.endpoint_utils import (
34
34
  verify_permissions_and_list_entities,
35
35
  )
36
36
  from zenml.zen_server.rbac.models import ResourceType
37
- from zenml.zen_server.routers.workspaces_endpoints import (
38
- router as workspace_router,
39
- )
37
+ from zenml.zen_server.routers.projects_endpoints import workspace_router
40
38
  from zenml.zen_server.utils import (
41
39
  handle_exceptions,
42
40
  make_dependable,
@@ -57,7 +55,7 @@ router = APIRouter(
57
55
  # TODO: the workspace scoped endpoint is only kept for dashboard compatibility
58
56
  # and can be removed after the migration
59
57
  @workspace_router.post(
60
- "/{workspace_name_or_id}" + PIPELINE_BUILDS,
58
+ "/{project_name_or_id}" + PIPELINE_BUILDS,
61
59
  responses={401: error_response, 409: error_response, 422: error_response},
62
60
  deprecated=True,
63
61
  tags=["builds"],
@@ -65,21 +63,21 @@ router = APIRouter(
65
63
  @handle_exceptions
66
64
  def create_build(
67
65
  build: PipelineBuildRequest,
68
- workspace_name_or_id: Optional[Union[str, UUID]] = None,
66
+ project_name_or_id: Optional[Union[str, UUID]] = None,
69
67
  _: AuthContext = Security(authorize),
70
68
  ) -> PipelineBuildResponse:
71
- """Creates a build, optionally in a specific workspace.
69
+ """Creates a build, optionally in a specific project.
72
70
 
73
71
  Args:
74
72
  build: Build to create.
75
- workspace_name_or_id: Optional name or ID of the workspace.
73
+ project_name_or_id: Optional name or ID of the project.
76
74
 
77
75
  Returns:
78
76
  The created build.
79
77
  """
80
- if workspace_name_or_id:
81
- workspace = zen_store().get_workspace(workspace_name_or_id)
82
- build.workspace = workspace.id
78
+ if project_name_or_id:
79
+ project = zen_store().get_project(project_name_or_id)
80
+ build.project = project.id
83
81
 
84
82
  return verify_permissions_and_create_entity(
85
83
  request_model=build,
@@ -94,7 +92,7 @@ def create_build(
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}" + PIPELINE_BUILDS,
95
+ "/{project_name_or_id}" + PIPELINE_BUILDS,
98
96
  responses={401: error_response, 404: error_response, 422: error_response},
99
97
  deprecated=True,
100
98
  tags=["builds"],
@@ -104,24 +102,24 @@ def list_builds(
104
102
  build_filter_model: PipelineBuildFilter = Depends(
105
103
  make_dependable(PipelineBuildFilter)
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[PipelineBuildResponse]:
111
- """Gets a list of builds, optionally filtered by workspace.
109
+ """Gets a list of builds.
112
110
 
113
111
  Args:
114
112
  build_filter_model: Filter model used for pagination, sorting,
115
113
  filtering.
116
- workspace_name_or_id: Optional name or ID of the workspace to filter by.
114
+ project_name_or_id: Optional name or ID of the project to filter by.
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 build objects matching the filter criteria.
122
120
  """
123
- if workspace_name_or_id:
124
- build_filter_model.workspace = workspace_name_or_id
121
+ if project_name_or_id:
122
+ build_filter_model.project = project_name_or_id
125
123
 
126
124
  return verify_permissions_and_list_entities(
127
125
  filter_model=build_filter_model,
@@ -34,9 +34,7 @@ from zenml.zen_server.rbac.endpoint_utils import (
34
34
  verify_permissions_and_list_entities,
35
35
  )
36
36
  from zenml.zen_server.rbac.models import ResourceType
37
- from zenml.zen_server.routers.workspaces_endpoints import (
38
- router as workspace_router,
39
- )
37
+ from zenml.zen_server.routers.projects_endpoints import workspace_router
40
38
  from zenml.zen_server.utils import (
41
39
  handle_exceptions,
42
40
  make_dependable,
@@ -59,7 +57,7 @@ router = APIRouter(
59
57
  # TODO: the workspace scoped endpoint is only kept for dashboard compatibility
60
58
  # and can be removed after the migration
61
59
  @workspace_router.post(
62
- "/{workspace_name_or_id}" + PIPELINE_DEPLOYMENTS,
60
+ "/{project_name_or_id}" + PIPELINE_DEPLOYMENTS,
63
61
  responses={401: error_response, 409: error_response, 422: error_response},
64
62
  deprecated=True,
65
63
  tags=["deployments"],
@@ -67,21 +65,21 @@ router = APIRouter(
67
65
  @handle_exceptions
68
66
  def create_deployment(
69
67
  deployment: PipelineDeploymentRequest,
70
- workspace_name_or_id: Optional[Union[str, UUID]] = None,
68
+ project_name_or_id: Optional[Union[str, UUID]] = None,
71
69
  _: AuthContext = Security(authorize),
72
70
  ) -> PipelineDeploymentResponse:
73
71
  """Creates a deployment.
74
72
 
75
73
  Args:
76
74
  deployment: Deployment to create.
77
- workspace_name_or_id: Optional name or ID of the workspace.
75
+ project_name_or_id: Optional name or ID of the project.
78
76
 
79
77
  Returns:
80
78
  The created deployment.
81
79
  """
82
- if workspace_name_or_id:
83
- workspace = zen_store().get_workspace(workspace_name_or_id)
84
- deployment.workspace = workspace.id
80
+ if project_name_or_id:
81
+ project = zen_store().get_project(project_name_or_id)
82
+ deployment.project = project.id
85
83
 
86
84
  return verify_permissions_and_create_entity(
87
85
  request_model=deployment,
@@ -96,7 +94,7 @@ def create_deployment(
96
94
  # TODO: the workspace scoped endpoint is only kept for dashboard compatibility
97
95
  # and can be removed after the migration
98
96
  @workspace_router.get(
99
- "/{workspace_name_or_id}" + PIPELINE_DEPLOYMENTS,
97
+ "/{project_name_or_id}" + PIPELINE_DEPLOYMENTS,
100
98
  responses={401: error_response, 404: error_response, 422: error_response},
101
99
  deprecated=True,
102
100
  tags=["deployments"],
@@ -106,24 +104,24 @@ def list_deployments(
106
104
  deployment_filter_model: PipelineDeploymentFilter = Depends(
107
105
  make_dependable(PipelineDeploymentFilter)
108
106
  ),
109
- workspace_name_or_id: Optional[Union[str, UUID]] = None,
107
+ project_name_or_id: Optional[Union[str, UUID]] = None,
110
108
  hydrate: bool = False,
111
109
  _: AuthContext = Security(authorize),
112
110
  ) -> Page[PipelineDeploymentResponse]:
113
- """Gets a list of deployments, optionally filtered by workspace.
111
+ """Gets a list of deployments.
114
112
 
115
113
  Args:
116
114
  deployment_filter_model: Filter model used for pagination, sorting,
117
115
  filtering.
118
- workspace_name_or_id: Optional name or ID of the workspace to filter by.
116
+ project_name_or_id: Optional name or ID of the project to filter by.
119
117
  hydrate: Flag deciding whether to hydrate the output model(s)
120
118
  by including metadata fields in the response.
121
119
 
122
120
  Returns:
123
121
  List of deployment objects matching the filter criteria.
124
122
  """
125
- if workspace_name_or_id:
126
- deployment_filter_model.workspace = workspace_name_or_id
123
+ if project_name_or_id:
124
+ deployment_filter_model.project = project_name_or_id
127
125
 
128
126
  return verify_permissions_and_list_entities(
129
127
  filter_model=deployment_filter_model,
@@ -46,9 +46,7 @@ from zenml.zen_server.rbac.endpoint_utils import (
46
46
  verify_permissions_and_update_entity,
47
47
  )
48
48
  from zenml.zen_server.rbac.models import ResourceType
49
- from zenml.zen_server.routers.workspaces_endpoints import (
50
- router as workspace_router,
51
- )
49
+ from zenml.zen_server.routers.projects_endpoints import workspace_router
52
50
  from zenml.zen_server.utils import (
53
51
  handle_exceptions,
54
52
  make_dependable,
@@ -70,7 +68,7 @@ router = APIRouter(
70
68
  # TODO: the workspace scoped endpoint is only kept for dashboard compatibility
71
69
  # and can be removed after the migration
72
70
  @workspace_router.post(
73
- "/{workspace_name_or_id}" + PIPELINES,
71
+ "/{project_name_or_id}" + PIPELINES,
74
72
  responses={401: error_response, 409: error_response, 422: error_response},
75
73
  deprecated=True,
76
74
  tags=["pipelines"],
@@ -78,26 +76,26 @@ router = APIRouter(
78
76
  @handle_exceptions
79
77
  def create_pipeline(
80
78
  pipeline: PipelineRequest,
81
- workspace_name_or_id: Optional[Union[str, UUID]] = None,
79
+ project_name_or_id: Optional[Union[str, UUID]] = None,
82
80
  _: AuthContext = Security(authorize),
83
81
  ) -> PipelineResponse:
84
- """Creates a pipeline, optionally in a specific workspace.
82
+ """Creates a pipeline.
85
83
 
86
84
  Args:
87
85
  pipeline: Pipeline to create.
88
- workspace_name_or_id: Optional name or ID of the workspace.
86
+ project_name_or_id: Optional name or ID of the project.
89
87
 
90
88
  Returns:
91
89
  The created pipeline.
92
90
  """
93
- if workspace_name_or_id:
94
- workspace = zen_store().get_workspace(workspace_name_or_id)
95
- pipeline.workspace = workspace.id
91
+ if project_name_or_id:
92
+ project = zen_store().get_project(project_name_or_id)
93
+ pipeline.project = project.id
96
94
 
97
95
  # We limit pipeline namespaces, not pipeline versions
98
96
  skip_entitlements = (
99
97
  zen_store().count_pipelines(
100
- PipelineFilter(name=pipeline.name, workspace=pipeline.workspace)
98
+ PipelineFilter(name=pipeline.name, project=pipeline.project)
101
99
  )
102
100
  > 0
103
101
  )
@@ -116,7 +114,7 @@ def create_pipeline(
116
114
  # TODO: the workspace scoped endpoint is only kept for dashboard compatibility
117
115
  # and can be removed after the migration
118
116
  @workspace_router.get(
119
- "/{workspace_name_or_id}" + PIPELINES,
117
+ "/{project_name_or_id}" + PIPELINES,
120
118
  responses={401: error_response, 404: error_response, 422: error_response},
121
119
  deprecated=True,
122
120
  tags=["pipelines"],
@@ -126,24 +124,24 @@ def list_pipelines(
126
124
  pipeline_filter_model: PipelineFilter = Depends(
127
125
  make_dependable(PipelineFilter)
128
126
  ),
129
- workspace_name_or_id: Optional[Union[str, UUID]] = None,
127
+ project_name_or_id: Optional[Union[str, UUID]] = None,
130
128
  hydrate: bool = False,
131
129
  _: AuthContext = Security(authorize),
132
130
  ) -> Page[PipelineResponse]:
133
- """Gets a list of pipelines, optionally filtered by workspace.
131
+ """Gets a list of pipelines.
134
132
 
135
133
  Args:
136
134
  pipeline_filter_model: Filter model used for pagination, sorting,
137
135
  filtering.
138
- workspace_name_or_id: Optional name or ID of the workspace to filter by.
136
+ project_name_or_id: Optional name or ID of the project to filter by.
139
137
  hydrate: Flag deciding whether to hydrate the output model(s)
140
138
  by including metadata fields in the response.
141
139
 
142
140
  Returns:
143
141
  List of pipeline objects matching the filter criteria.
144
142
  """
145
- if workspace_name_or_id:
146
- pipeline_filter_model.workspace = workspace_name_or_id
143
+ if project_name_or_id:
144
+ pipeline_filter_model.project = project_name_or_id
147
145
 
148
146
  return verify_permissions_and_list_entities(
149
147
  filter_model=pipeline_filter_model,
@@ -228,7 +226,7 @@ def delete_pipeline(
228
226
  should_decrement = (
229
227
  ResourceType.PIPELINE in server_config().reportable_resources
230
228
  and zen_store().count_pipelines(
231
- PipelineFilter(name=pipeline.name, workspace=pipeline.workspace.id)
229
+ PipelineFilter(name=pipeline.name, project=pipeline.project.id)
232
230
  )
233
231
  == 0
234
232
  )