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.
- zenml/VERSION +1 -1
- zenml/analytics/context.py +4 -4
- zenml/analytics/enums.py +2 -2
- zenml/artifacts/utils.py +2 -2
- zenml/cli/__init__.py +8 -9
- zenml/cli/base.py +2 -2
- zenml/cli/code_repository.py +1 -1
- zenml/cli/login.py +21 -18
- zenml/cli/pipeline.py +3 -3
- zenml/cli/project.py +172 -0
- zenml/cli/server.py +5 -5
- zenml/cli/service_accounts.py +0 -1
- zenml/cli/service_connectors.py +15 -16
- zenml/cli/stack.py +0 -2
- zenml/cli/stack_components.py +2 -2
- zenml/cli/utils.py +3 -3
- zenml/client.py +352 -341
- zenml/config/global_config.py +41 -43
- zenml/config/server_config.py +9 -9
- zenml/constants.py +5 -3
- zenml/event_hub/event_hub.py +1 -1
- zenml/integrations/gcp/__init__.py +1 -0
- zenml/integrations/gcp/flavors/vertex_orchestrator_flavor.py +5 -0
- zenml/integrations/gcp/flavors/vertex_step_operator_flavor.py +5 -28
- zenml/integrations/gcp/orchestrators/vertex_orchestrator.py +125 -78
- zenml/integrations/gcp/service_connectors/gcp_service_connector.py +7 -6
- zenml/integrations/gcp/vertex_custom_job_parameters.py +50 -0
- zenml/integrations/mlflow/steps/mlflow_registry.py +3 -3
- zenml/integrations/wandb/__init__.py +1 -1
- zenml/integrations/wandb/experiment_trackers/wandb_experiment_tracker.py +29 -9
- zenml/integrations/wandb/flavors/wandb_experiment_tracker_flavor.py +2 -0
- zenml/login/credentials.py +26 -27
- zenml/login/credentials_store.py +5 -5
- zenml/login/pro/client.py +9 -9
- zenml/login/pro/utils.py +8 -8
- zenml/login/pro/{tenant → workspace}/__init__.py +1 -1
- zenml/login/pro/{tenant → workspace}/client.py +25 -25
- zenml/login/pro/{tenant → workspace}/models.py +27 -28
- zenml/model/model.py +2 -2
- zenml/model_registries/base_model_registry.py +1 -1
- zenml/models/__init__.py +29 -29
- zenml/models/v2/base/filter.py +1 -1
- zenml/models/v2/base/scoped.py +49 -53
- zenml/models/v2/core/action.py +12 -12
- zenml/models/v2/core/artifact.py +15 -15
- zenml/models/v2/core/artifact_version.py +15 -15
- zenml/models/v2/core/code_repository.py +12 -12
- zenml/models/v2/core/event_source.py +12 -12
- zenml/models/v2/core/model.py +26 -18
- zenml/models/v2/core/model_version.py +15 -15
- zenml/models/v2/core/pipeline.py +15 -15
- zenml/models/v2/core/pipeline_build.py +14 -14
- zenml/models/v2/core/pipeline_deployment.py +12 -14
- zenml/models/v2/core/pipeline_run.py +16 -16
- zenml/models/v2/core/project.py +203 -0
- zenml/models/v2/core/run_metadata.py +2 -2
- zenml/models/v2/core/run_template.py +15 -15
- zenml/models/v2/core/schedule.py +12 -12
- zenml/models/v2/core/secret.py +1 -1
- zenml/models/v2/core/service.py +14 -14
- zenml/models/v2/core/step_run.py +13 -13
- zenml/models/v2/core/tag.py +96 -3
- zenml/models/v2/core/trigger.py +13 -13
- zenml/models/v2/core/trigger_execution.py +2 -2
- zenml/models/v2/core/user.py +0 -17
- zenml/models/v2/misc/server_models.py +6 -6
- zenml/models/v2/misc/statistics.py +4 -4
- zenml/orchestrators/cache_utils.py +7 -7
- zenml/orchestrators/input_utils.py +1 -1
- zenml/orchestrators/step_launcher.py +1 -1
- zenml/orchestrators/step_run_utils.py +3 -3
- zenml/orchestrators/utils.py +4 -4
- zenml/pipelines/build_utils.py +2 -2
- zenml/pipelines/pipeline_definition.py +5 -5
- zenml/pipelines/run_utils.py +1 -1
- zenml/service_connectors/service_connector.py +0 -3
- zenml/service_connectors/service_connector_utils.py +0 -1
- zenml/stack/stack.py +0 -1
- zenml/steps/base_step.py +10 -2
- zenml/utils/dashboard_utils.py +1 -1
- zenml/utils/tag_utils.py +0 -12
- zenml/zen_server/cloud_utils.py +3 -3
- zenml/zen_server/feature_gate/endpoint_utils.py +1 -1
- zenml/zen_server/feature_gate/zenml_cloud_feature_gate.py +1 -1
- zenml/zen_server/rbac/endpoint_utils.py +17 -17
- zenml/zen_server/rbac/models.py +47 -22
- zenml/zen_server/rbac/rbac_sql_zen_store.py +3 -3
- zenml/zen_server/rbac/utils.py +23 -25
- zenml/zen_server/rbac/zenml_cloud_rbac.py +7 -74
- zenml/zen_server/routers/artifact_version_endpoints.py +10 -10
- zenml/zen_server/routers/auth_endpoints.py +6 -6
- zenml/zen_server/routers/code_repositories_endpoints.py +12 -14
- zenml/zen_server/routers/model_versions_endpoints.py +13 -15
- zenml/zen_server/routers/models_endpoints.py +7 -9
- zenml/zen_server/routers/pipeline_builds_endpoints.py +14 -16
- zenml/zen_server/routers/pipeline_deployments_endpoints.py +13 -15
- zenml/zen_server/routers/pipelines_endpoints.py +16 -18
- zenml/zen_server/routers/{workspaces_endpoints.py → projects_endpoints.py} +111 -68
- zenml/zen_server/routers/run_metadata_endpoints.py +7 -9
- zenml/zen_server/routers/run_templates_endpoints.py +15 -17
- zenml/zen_server/routers/runs_endpoints.py +12 -14
- zenml/zen_server/routers/schedule_endpoints.py +12 -14
- zenml/zen_server/routers/secrets_endpoints.py +1 -3
- zenml/zen_server/routers/server_endpoints.py +7 -7
- zenml/zen_server/routers/service_connectors_endpoints.py +11 -13
- zenml/zen_server/routers/service_endpoints.py +7 -9
- zenml/zen_server/routers/stack_components_endpoints.py +9 -11
- zenml/zen_server/routers/stacks_endpoints.py +9 -11
- zenml/zen_server/routers/steps_endpoints.py +6 -6
- zenml/zen_server/routers/users_endpoints.py +5 -43
- zenml/zen_server/template_execution/utils.py +4 -4
- zenml/zen_server/utils.py +10 -10
- zenml/zen_server/zen_server_api.py +6 -5
- zenml/zen_stores/base_zen_store.py +38 -42
- zenml/zen_stores/migrations/versions/12eff0206201_rename_workspace_to_project.py +768 -0
- zenml/zen_stores/migrations/versions/41b28cae31ce_make_artifacts_workspace_scoped.py +3 -3
- zenml/zen_stores/migrations/versions/cbc6acd71f92_add_workspace_display_name.py +58 -0
- zenml/zen_stores/rest_zen_store.py +55 -63
- zenml/zen_stores/schemas/__init__.py +2 -2
- zenml/zen_stores/schemas/action_schemas.py +9 -9
- zenml/zen_stores/schemas/artifact_schemas.py +15 -17
- zenml/zen_stores/schemas/code_repository_schemas.py +16 -18
- zenml/zen_stores/schemas/event_source_schemas.py +9 -9
- zenml/zen_stores/schemas/model_schemas.py +15 -17
- zenml/zen_stores/schemas/pipeline_build_schemas.py +7 -7
- zenml/zen_stores/schemas/pipeline_deployment_schemas.py +7 -7
- zenml/zen_stores/schemas/pipeline_run_schemas.py +9 -9
- zenml/zen_stores/schemas/pipeline_schemas.py +9 -9
- zenml/zen_stores/schemas/{workspace_schemas.py → project_schemas.py} +47 -41
- zenml/zen_stores/schemas/run_metadata_schemas.py +5 -5
- zenml/zen_stores/schemas/run_template_schemas.py +9 -9
- zenml/zen_stores/schemas/schedule_schema.py +9 -9
- zenml/zen_stores/schemas/service_schemas.py +7 -7
- zenml/zen_stores/schemas/step_run_schemas.py +7 -7
- zenml/zen_stores/schemas/trigger_schemas.py +9 -9
- zenml/zen_stores/schemas/user_schemas.py +0 -12
- zenml/zen_stores/sql_zen_store.py +318 -275
- zenml/zen_stores/zen_store_interface.py +56 -70
- {zenml_nightly-0.75.0.dev20250313.dist-info → zenml_nightly-0.75.0.dev20250315.dist-info}/METADATA +1 -1
- {zenml_nightly-0.75.0.dev20250313.dist-info → zenml_nightly-0.75.0.dev20250315.dist-info}/RECORD +143 -140
- zenml/cli/workspace.py +0 -160
- zenml/models/v2/core/workspace.py +0 -131
- {zenml_nightly-0.75.0.dev20250313.dist-info → zenml_nightly-0.75.0.dev20250315.dist-info}/LICENSE +0 -0
- {zenml_nightly-0.75.0.dev20250313.dist-info → zenml_nightly-0.75.0.dev20250315.dist-info}/WHEEL +0 -0
- {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
|
-
|
19
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
"
|
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
|
2116
|
-
|
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
|
2194
|
-
|
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
|
-
# -----------------------------
|
3338
|
+
# ----------------------------- Projects -----------------------------
|
3343
3339
|
|
3344
|
-
def
|
3345
|
-
|
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
|
-
|
3344
|
+
project: The project to create.
|
3351
3345
|
|
3352
3346
|
Returns:
|
3353
|
-
The newly created
|
3347
|
+
The newly created project.
|
3354
3348
|
"""
|
3355
3349
|
return self._create_resource(
|
3356
|
-
resource=
|
3357
|
-
route=
|
3358
|
-
response_model=
|
3350
|
+
resource=project,
|
3351
|
+
route=PROJECTS,
|
3352
|
+
response_model=ProjectResponse,
|
3359
3353
|
)
|
3360
3354
|
|
3361
|
-
def
|
3362
|
-
self,
|
3363
|
-
) ->
|
3364
|
-
"""Get an existing
|
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
|
-
|
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
|
3366
|
+
The requested project.
|
3373
3367
|
"""
|
3374
3368
|
return self._get_resource(
|
3375
|
-
resource_id=
|
3376
|
-
route=
|
3377
|
-
response_model=
|
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
|
3375
|
+
def list_projects(
|
3382
3376
|
self,
|
3383
|
-
|
3377
|
+
project_filter_model: ProjectFilter,
|
3384
3378
|
hydrate: bool = False,
|
3385
|
-
) -> Page[
|
3386
|
-
"""List all
|
3379
|
+
) -> Page[ProjectResponse]:
|
3380
|
+
"""List all projects matching the given filter criteria.
|
3387
3381
|
|
3388
3382
|
Args:
|
3389
|
-
|
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
|
3389
|
+
A list of all projects matching the filter criteria.
|
3396
3390
|
"""
|
3397
3391
|
return self._list_paginated_resources(
|
3398
|
-
route=
|
3399
|
-
response_model=
|
3400
|
-
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
|
3405
|
-
self,
|
3406
|
-
) ->
|
3407
|
-
"""Update an existing
|
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
|
-
|
3411
|
-
|
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
|
3408
|
+
The updated project.
|
3415
3409
|
"""
|
3416
3410
|
return self._update_resource(
|
3417
|
-
resource_id=
|
3418
|
-
resource_update=
|
3419
|
-
route=
|
3420
|
-
response_model=
|
3411
|
+
resource_id=project_id,
|
3412
|
+
resource_update=project_update,
|
3413
|
+
route=PROJECTS,
|
3414
|
+
response_model=ProjectResponse,
|
3421
3415
|
)
|
3422
3416
|
|
3423
|
-
def
|
3424
|
-
"""Deletes a
|
3417
|
+
def delete_project(self, project_name_or_id: Union[str, UUID]) -> None:
|
3418
|
+
"""Deletes a project.
|
3425
3419
|
|
3426
3420
|
Args:
|
3427
|
-
|
3421
|
+
project_name_or_id: Name or ID of the project to delete.
|
3428
3422
|
"""
|
3429
3423
|
self._delete_resource(
|
3430
|
-
resource_id=
|
3431
|
-
route=
|
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
|
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.
|
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
|
-
"
|
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
|
-
"
|
51
|
-
name="
|
50
|
+
"project_id",
|
51
|
+
name="unique_action_name_in_project",
|
52
52
|
),
|
53
53
|
)
|
54
54
|
|
55
|
-
|
55
|
+
project_id: UUID = build_foreign_key_field(
|
56
56
|
source=__tablename__,
|
57
|
-
target=
|
58
|
-
source_column="
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
"
|
75
|
-
name="
|
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
|
-
|
95
|
+
project_id: UUID = build_foreign_key_field(
|
96
96
|
source=__tablename__,
|
97
|
-
target=
|
98
|
-
source_column="
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
284
|
+
project_id: UUID = build_foreign_key_field(
|
285
285
|
source=__tablename__,
|
286
|
-
target=
|
287
|
-
source_column="
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
"
|
49
|
-
name="
|
48
|
+
"project_id",
|
49
|
+
name="unique_code_repository_name_in_project",
|
50
50
|
),
|
51
51
|
)
|
52
52
|
|
53
|
-
|
53
|
+
project_id: UUID = build_foreign_key_field(
|
54
54
|
source=__tablename__,
|
55
|
-
target=
|
56
|
-
source_column="
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
171
|
+
project_id: UUID = build_foreign_key_field(
|
174
172
|
source=__tablename__,
|
175
|
-
target=
|
176
|
-
source_column="
|
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
|
-
|
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",
|
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
|
-
|
202
|
+
project_id: The project ID.
|
205
203
|
|
206
204
|
Returns:
|
207
205
|
The converted schema.
|
208
206
|
"""
|
209
207
|
return cls(
|
210
|
-
|
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
|
-
"
|
53
|
-
name="
|
52
|
+
"project_id",
|
53
|
+
name="unique_event_source_name_in_project",
|
54
54
|
),
|
55
55
|
)
|
56
56
|
|
57
|
-
|
57
|
+
project_id: UUID = build_foreign_key_field(
|
58
58
|
source=__tablename__,
|
59
|
-
target=
|
60
|
-
source_column="
|
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
|
-
|
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
|
-
|
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
|
-
|
160
|
+
project=self.project.to_model(),
|
161
161
|
description=self.description,
|
162
162
|
configuration=json.loads(
|
163
163
|
base64.b64decode(self.configuration).decode()
|