zenml-nightly 0.75.0.dev20250312__py3-none-any.whl → 0.75.0.dev20250314__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- zenml/VERSION +1 -1
- zenml/__init__.py +2 -0
- zenml/analytics/context.py +7 -0
- zenml/analytics/enums.py +2 -2
- zenml/artifacts/utils.py +2 -4
- zenml/cli/__init__.py +8 -9
- zenml/cli/base.py +2 -2
- zenml/cli/code_repository.py +1 -1
- zenml/cli/login.py +6 -0
- zenml/cli/model.py +7 -15
- zenml/cli/pipeline.py +3 -3
- zenml/cli/project.py +172 -0
- zenml/cli/secret.py +47 -44
- zenml/cli/service_accounts.py +0 -1
- zenml/cli/service_connectors.py +15 -17
- zenml/cli/stack.py +0 -3
- zenml/cli/stack_components.py +2 -2
- zenml/cli/tag.py +3 -5
- zenml/cli/utils.py +25 -23
- zenml/client.py +749 -475
- zenml/config/global_config.py +48 -37
- zenml/config/pipeline_configurations.py +3 -2
- zenml/config/pipeline_run_configuration.py +2 -1
- zenml/config/secret_reference_mixin.py +1 -1
- zenml/constants.py +6 -6
- zenml/enums.py +0 -7
- zenml/event_hub/event_hub.py +3 -1
- zenml/exceptions.py +0 -24
- zenml/integrations/aws/orchestrators/sagemaker_orchestrator.py +5 -3
- zenml/integrations/bitbucket/plugins/event_sources/bitbucket_webhook_event_source.py +1 -4
- zenml/integrations/gcp/service_connectors/gcp_service_connector.py +7 -6
- zenml/integrations/github/plugins/event_sources/github_webhook_event_source.py +1 -4
- zenml/integrations/mlflow/steps/mlflow_registry.py +3 -3
- zenml/integrations/seldon/model_deployers/seldon_model_deployer.py +1 -1
- 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 +5 -3
- zenml/model/model.py +10 -10
- zenml/model_registries/base_model_registry.py +1 -1
- zenml/models/__init__.py +45 -28
- zenml/models/v2/base/base.py +0 -5
- zenml/models/v2/base/filter.py +2 -2
- zenml/models/v2/base/scoped.py +135 -156
- zenml/models/v2/core/action.py +12 -12
- zenml/models/v2/core/api_key.py +1 -1
- zenml/models/v2/core/artifact.py +31 -18
- zenml/models/v2/core/artifact_version.py +57 -40
- zenml/models/v2/core/code_repository.py +12 -12
- zenml/models/v2/core/component.py +22 -33
- zenml/models/v2/core/device.py +3 -2
- zenml/models/v2/core/event_source.py +14 -14
- zenml/models/v2/core/flavor.py +19 -47
- zenml/models/v2/core/logs.py +1 -2
- zenml/models/v2/core/model.py +23 -20
- zenml/models/v2/core/model_version.py +51 -42
- zenml/models/v2/core/pipeline.py +16 -16
- 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 +21 -29
- zenml/models/v2/core/project.py +203 -0
- zenml/models/v2/core/run_metadata.py +2 -2
- zenml/models/v2/core/run_template.py +16 -17
- zenml/models/v2/core/schedule.py +12 -21
- zenml/models/v2/core/secret.py +94 -128
- zenml/models/v2/core/server_settings.py +2 -2
- zenml/models/v2/core/service.py +57 -26
- zenml/models/v2/core/service_connector.py +14 -16
- zenml/models/v2/core/stack.py +24 -26
- zenml/models/v2/core/step_run.py +16 -28
- zenml/models/v2/core/tag.py +41 -15
- zenml/models/v2/core/trigger.py +13 -13
- zenml/models/v2/core/trigger_execution.py +2 -2
- zenml/models/v2/core/user.py +2 -2
- zenml/models/v2/misc/statistics.py +45 -0
- zenml/models/v2/misc/tag.py +27 -0
- zenml/orchestrators/cache_utils.py +7 -7
- zenml/orchestrators/input_utils.py +1 -0
- zenml/orchestrators/step_launcher.py +1 -2
- zenml/orchestrators/step_run_utils.py +2 -4
- zenml/orchestrators/step_runner.py +10 -1
- zenml/orchestrators/utils.py +4 -4
- zenml/pipelines/build_utils.py +2 -4
- zenml/pipelines/pipeline_decorator.py +3 -2
- zenml/pipelines/pipeline_definition.py +8 -9
- zenml/pipelines/run_utils.py +4 -4
- zenml/service_connectors/service_connector.py +0 -10
- zenml/service_connectors/service_connector_utils.py +0 -2
- zenml/stack/authentication_mixin.py +1 -1
- zenml/stack/flavor.py +3 -14
- zenml/stack/stack.py +0 -1
- zenml/stack/stack_component.py +1 -5
- zenml/steps/base_step.py +10 -2
- zenml/steps/step_context.py +19 -0
- zenml/utils/string_utils.py +1 -1
- zenml/utils/tag_utils.py +642 -0
- zenml/zen_server/cloud_utils.py +21 -0
- zenml/zen_server/exceptions.py +0 -6
- zenml/zen_server/rbac/endpoint_utils.py +134 -46
- zenml/zen_server/rbac/models.py +65 -3
- zenml/zen_server/rbac/rbac_interface.py +9 -0
- zenml/zen_server/rbac/rbac_sql_zen_store.py +15 -7
- zenml/zen_server/rbac/utils.py +155 -30
- zenml/zen_server/rbac/zenml_cloud_rbac.py +39 -11
- zenml/zen_server/routers/actions_endpoints.py +3 -5
- zenml/zen_server/routers/artifact_endpoint.py +0 -5
- zenml/zen_server/routers/artifact_version_endpoints.py +15 -9
- zenml/zen_server/routers/auth_endpoints.py +22 -7
- zenml/zen_server/routers/code_repositories_endpoints.py +54 -3
- zenml/zen_server/routers/devices_endpoints.py +0 -4
- zenml/zen_server/routers/event_source_endpoints.py +0 -5
- zenml/zen_server/routers/flavors_endpoints.py +0 -5
- zenml/zen_server/routers/logs_endpoints.py +0 -1
- zenml/zen_server/routers/model_versions_endpoints.py +100 -23
- zenml/zen_server/routers/models_endpoints.py +50 -69
- zenml/zen_server/routers/pipeline_builds_endpoints.py +55 -3
- zenml/zen_server/routers/pipeline_deployments_endpoints.py +56 -4
- zenml/zen_server/routers/pipelines_endpoints.py +70 -3
- zenml/zen_server/routers/plugin_endpoints.py +0 -1
- zenml/zen_server/routers/projects_endpoints.py +283 -0
- zenml/zen_server/routers/run_metadata_endpoints.py +97 -0
- zenml/zen_server/routers/run_templates_endpoints.py +64 -3
- zenml/zen_server/routers/runs_endpoints.py +58 -8
- zenml/zen_server/routers/schedule_endpoints.py +67 -6
- zenml/zen_server/routers/secrets_endpoints.py +38 -4
- zenml/zen_server/routers/server_endpoints.py +53 -1
- zenml/zen_server/routers/service_accounts_endpoints.py +14 -15
- zenml/zen_server/routers/service_connectors_endpoints.py +94 -14
- zenml/zen_server/routers/service_endpoints.py +18 -7
- zenml/zen_server/routers/stack_components_endpoints.py +66 -7
- zenml/zen_server/routers/stacks_endpoints.py +95 -6
- zenml/zen_server/routers/steps_endpoints.py +17 -11
- zenml/zen_server/routers/tag_resource_endpoints.py +115 -0
- zenml/zen_server/routers/tags_endpoints.py +6 -17
- zenml/zen_server/routers/triggers_endpoints.py +5 -8
- zenml/zen_server/routers/users_endpoints.py +9 -12
- zenml/zen_server/template_execution/utils.py +8 -7
- zenml/zen_server/utils.py +21 -0
- zenml/zen_server/zen_server_api.py +7 -2
- zenml/zen_stores/base_zen_store.py +50 -69
- zenml/zen_stores/migrations/versions/12eff0206201_rename_workspace_to_project.py +768 -0
- zenml/zen_stores/migrations/versions/1cb6477f72d6_move_artifact_save_type.py +20 -10
- zenml/zen_stores/migrations/versions/1f9d1cd00b90_add_unique_name_constraints.py +231 -0
- zenml/zen_stores/migrations/versions/288f4fb6e112_make_tags_user_scoped.py +74 -0
- zenml/zen_stores/migrations/versions/2e695a26fe7a_add_user_default_workspace.py +45 -0
- zenml/zen_stores/migrations/versions/3b1776345020_remove_workspace_from_globals.py +81 -0
- zenml/zen_stores/migrations/versions/41b28cae31ce_make_artifacts_workspace_scoped.py +136 -0
- zenml/zen_stores/migrations/versions/9e7bf0970266_adding_exclusive_attribute_to_tags.py +47 -0
- zenml/zen_stores/migrations/versions/b557b2871693_update_step_run_input_types.py +8 -4
- zenml/zen_stores/migrations/versions/cbc6acd71f92_add_workspace_display_name.py +58 -0
- zenml/zen_stores/migrations/versions/cc269488e5a9_separate_run_metadata.py +12 -6
- zenml/zen_stores/migrations/versions/f1d723fd723b_add_secret_private_attr.py +61 -0
- zenml/zen_stores/migrations/versions/f76a368a25a5_add_stack_description.py +35 -0
- zenml/zen_stores/rest_zen_store.py +223 -230
- zenml/zen_stores/schemas/__init__.py +2 -2
- zenml/zen_stores/schemas/action_schemas.py +15 -8
- zenml/zen_stores/schemas/api_key_schemas.py +8 -1
- zenml/zen_stores/schemas/artifact_schemas.py +35 -10
- zenml/zen_stores/schemas/code_repository_schemas.py +22 -17
- zenml/zen_stores/schemas/component_schemas.py +9 -14
- zenml/zen_stores/schemas/event_source_schemas.py +15 -8
- zenml/zen_stores/schemas/flavor_schemas.py +14 -20
- zenml/zen_stores/schemas/model_schemas.py +18 -17
- zenml/zen_stores/schemas/pipeline_build_schemas.py +7 -7
- zenml/zen_stores/schemas/pipeline_deployment_schemas.py +10 -8
- zenml/zen_stores/schemas/pipeline_run_schemas.py +9 -12
- zenml/zen_stores/schemas/pipeline_schemas.py +9 -9
- zenml/zen_stores/schemas/{workspace_schemas.py → project_schemas.py} +53 -65
- zenml/zen_stores/schemas/run_metadata_schemas.py +5 -5
- zenml/zen_stores/schemas/run_template_schemas.py +17 -13
- zenml/zen_stores/schemas/schedule_schema.py +16 -21
- zenml/zen_stores/schemas/secret_schemas.py +15 -25
- zenml/zen_stores/schemas/service_connector_schemas.py +8 -17
- zenml/zen_stores/schemas/service_schemas.py +7 -8
- zenml/zen_stores/schemas/stack_schemas.py +12 -15
- zenml/zen_stores/schemas/step_run_schemas.py +14 -15
- zenml/zen_stores/schemas/tag_schemas.py +30 -2
- zenml/zen_stores/schemas/trigger_schemas.py +15 -8
- zenml/zen_stores/schemas/user_schemas.py +12 -2
- zenml/zen_stores/schemas/utils.py +16 -0
- zenml/zen_stores/secrets_stores/service_connector_secrets_store.py +0 -3
- zenml/zen_stores/sql_zen_store.py +2984 -2369
- zenml/zen_stores/template_utils.py +1 -1
- zenml/zen_stores/zen_store_interface.py +136 -126
- {zenml_nightly-0.75.0.dev20250312.dist-info → zenml_nightly-0.75.0.dev20250314.dist-info}/METADATA +1 -1
- {zenml_nightly-0.75.0.dev20250312.dist-info → zenml_nightly-0.75.0.dev20250314.dist-info}/RECORD +188 -173
- zenml/cli/workspace.py +0 -86
- zenml/models/v2/core/workspace.py +0 -131
- zenml/zen_server/routers/workspaces_endpoints.py +0 -1469
- {zenml_nightly-0.75.0.dev20250312.dist-info → zenml_nightly-0.75.0.dev20250314.dist-info}/LICENSE +0 -0
- {zenml_nightly-0.75.0.dev20250312.dist-info → zenml_nightly-0.75.0.dev20250314.dist-info}/WHEEL +0 -0
- {zenml_nightly-0.75.0.dev20250312.dist-info → zenml_nightly-0.75.0.dev20250314.dist-info}/entry_points.txt +0 -0
@@ -31,10 +31,10 @@ from zenml.models import (
|
|
31
31
|
from zenml.utils.json_utils import pydantic_encoder
|
32
32
|
from zenml.zen_stores.schemas.base_schemas import BaseSchema
|
33
33
|
from zenml.zen_stores.schemas.pipeline_schemas import PipelineSchema
|
34
|
+
from zenml.zen_stores.schemas.project_schemas import ProjectSchema
|
34
35
|
from zenml.zen_stores.schemas.schema_utils import build_foreign_key_field
|
35
36
|
from zenml.zen_stores.schemas.stack_schemas import StackSchema
|
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
|
|
40
40
|
class PipelineBuildSchema(BaseSchema, table=True):
|
@@ -52,15 +52,15 @@ class PipelineBuildSchema(BaseSchema, table=True):
|
|
52
52
|
)
|
53
53
|
user: Optional["UserSchema"] = Relationship(back_populates="builds")
|
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="builds")
|
64
64
|
|
65
65
|
stack_id: Optional[UUID] = build_foreign_key_field(
|
66
66
|
source=__tablename__,
|
@@ -117,7 +117,7 @@ class PipelineBuildSchema(BaseSchema, table=True):
|
|
117
117
|
"""
|
118
118
|
return cls(
|
119
119
|
stack_id=request.stack,
|
120
|
-
|
120
|
+
project_id=request.project,
|
121
121
|
user_id=request.user,
|
122
122
|
pipeline_id=request.pipeline,
|
123
123
|
images=json.dumps(request.images, default=pydantic_encoder),
|
@@ -155,7 +155,7 @@ class PipelineBuildSchema(BaseSchema, table=True):
|
|
155
155
|
metadata = None
|
156
156
|
if include_metadata:
|
157
157
|
metadata = PipelineBuildResponseMetadata(
|
158
|
-
|
158
|
+
project=self.project.to_model(),
|
159
159
|
pipeline=self.pipeline.to_model() if self.pipeline else None,
|
160
160
|
stack=self.stack.to_model() if self.stack else None,
|
161
161
|
images=json.loads(self.images),
|
@@ -38,11 +38,11 @@ from zenml.zen_stores.schemas.code_repository_schemas import (
|
|
38
38
|
)
|
39
39
|
from zenml.zen_stores.schemas.pipeline_build_schemas import PipelineBuildSchema
|
40
40
|
from zenml.zen_stores.schemas.pipeline_schemas import PipelineSchema
|
41
|
+
from zenml.zen_stores.schemas.project_schemas import ProjectSchema
|
41
42
|
from zenml.zen_stores.schemas.schedule_schema import ScheduleSchema
|
42
43
|
from zenml.zen_stores.schemas.schema_utils import build_foreign_key_field
|
43
44
|
from zenml.zen_stores.schemas.stack_schemas import StackSchema
|
44
45
|
from zenml.zen_stores.schemas.user_schemas import UserSchema
|
45
|
-
from zenml.zen_stores.schemas.workspace_schemas import WorkspaceSchema
|
46
46
|
|
47
47
|
if TYPE_CHECKING:
|
48
48
|
from zenml.zen_stores.schemas.pipeline_run_schemas import PipelineRunSchema
|
@@ -95,10 +95,10 @@ class PipelineDeploymentSchema(BaseSchema, table=True):
|
|
95
95
|
ondelete="SET NULL",
|
96
96
|
nullable=True,
|
97
97
|
)
|
98
|
-
|
98
|
+
project_id: UUID = build_foreign_key_field(
|
99
99
|
source=__tablename__,
|
100
|
-
target=
|
101
|
-
source_column="
|
100
|
+
target=ProjectSchema.__tablename__,
|
101
|
+
source_column="project_id",
|
102
102
|
target_column="id",
|
103
103
|
ondelete="CASCADE",
|
104
104
|
nullable=False,
|
@@ -148,8 +148,10 @@ class PipelineDeploymentSchema(BaseSchema, table=True):
|
|
148
148
|
template_id: Optional[UUID] = None
|
149
149
|
|
150
150
|
# SQLModel Relationships
|
151
|
-
user: Optional["UserSchema"] = Relationship(
|
152
|
-
|
151
|
+
user: Optional["UserSchema"] = Relationship(
|
152
|
+
back_populates="deployments",
|
153
|
+
)
|
154
|
+
project: "ProjectSchema" = Relationship()
|
153
155
|
stack: Optional["StackSchema"] = Relationship()
|
154
156
|
pipeline: Optional["PipelineSchema"] = Relationship()
|
155
157
|
schedule: Optional["ScheduleSchema"] = Relationship()
|
@@ -185,7 +187,7 @@ class PipelineDeploymentSchema(BaseSchema, table=True):
|
|
185
187
|
"""
|
186
188
|
return cls(
|
187
189
|
stack_id=request.stack,
|
188
|
-
|
190
|
+
project_id=request.project,
|
189
191
|
pipeline_id=request.pipeline,
|
190
192
|
build_id=request.build,
|
191
193
|
user_id=request.user,
|
@@ -243,7 +245,7 @@ class PipelineDeploymentSchema(BaseSchema, table=True):
|
|
243
245
|
step_configurations[s] = Step.model_validate(c)
|
244
246
|
|
245
247
|
metadata = PipelineDeploymentResponseMetadata(
|
246
|
-
|
248
|
+
project=self.project.to_model(),
|
247
249
|
run_name_template=self.run_name_template,
|
248
250
|
pipeline_configuration=pipeline_configuration,
|
249
251
|
step_configurations=step_configurations,
|
@@ -45,13 +45,13 @@ from zenml.zen_stores.schemas.pipeline_deployment_schemas import (
|
|
45
45
|
PipelineDeploymentSchema,
|
46
46
|
)
|
47
47
|
from zenml.zen_stores.schemas.pipeline_schemas import PipelineSchema
|
48
|
+
from zenml.zen_stores.schemas.project_schemas import ProjectSchema
|
48
49
|
from zenml.zen_stores.schemas.schedule_schema import ScheduleSchema
|
49
50
|
from zenml.zen_stores.schemas.schema_utils import build_foreign_key_field
|
50
51
|
from zenml.zen_stores.schemas.stack_schemas import StackSchema
|
51
52
|
from zenml.zen_stores.schemas.trigger_schemas import TriggerExecutionSchema
|
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.logs_schemas import LogsSchema
|
@@ -77,8 +77,8 @@ class PipelineRunSchema(NamedSchema, RunMetadataInterface, table=True):
|
|
77
77
|
),
|
78
78
|
UniqueConstraint(
|
79
79
|
"name",
|
80
|
-
"
|
81
|
-
name="
|
80
|
+
"project_id",
|
81
|
+
name="unique_run_name_in_project",
|
82
82
|
),
|
83
83
|
)
|
84
84
|
|
@@ -108,10 +108,10 @@ class PipelineRunSchema(NamedSchema, RunMetadataInterface, table=True):
|
|
108
108
|
ondelete="SET NULL",
|
109
109
|
nullable=True,
|
110
110
|
)
|
111
|
-
|
111
|
+
project_id: UUID = build_foreign_key_field(
|
112
112
|
source=__tablename__,
|
113
|
-
target=
|
114
|
-
source_column="
|
113
|
+
target=ProjectSchema.__tablename__,
|
114
|
+
source_column="project_id",
|
115
115
|
target_column="id",
|
116
116
|
ondelete="CASCADE",
|
117
117
|
nullable=False,
|
@@ -137,7 +137,7 @@ class PipelineRunSchema(NamedSchema, RunMetadataInterface, table=True):
|
|
137
137
|
deployment: Optional["PipelineDeploymentSchema"] = Relationship(
|
138
138
|
back_populates="pipeline_runs"
|
139
139
|
)
|
140
|
-
|
140
|
+
project: "ProjectSchema" = Relationship(back_populates="runs")
|
141
141
|
user: Optional["UserSchema"] = Relationship(back_populates="runs")
|
142
142
|
run_metadata: List["RunMetadataSchema"] = Relationship(
|
143
143
|
sa_relationship_kwargs=dict(
|
@@ -241,7 +241,7 @@ class PipelineRunSchema(NamedSchema, RunMetadataInterface, table=True):
|
|
241
241
|
orchestrator_environment = json.dumps(request.orchestrator_environment)
|
242
242
|
|
243
243
|
return cls(
|
244
|
-
|
244
|
+
project_id=request.project,
|
245
245
|
user_id=request.user,
|
246
246
|
name=request.name,
|
247
247
|
orchestrator_run_id=request.orchestrator_run_id,
|
@@ -251,7 +251,6 @@ class PipelineRunSchema(NamedSchema, RunMetadataInterface, table=True):
|
|
251
251
|
pipeline_id=request.pipeline,
|
252
252
|
deployment_id=request.deployment,
|
253
253
|
trigger_execution_id=request.trigger_execution_id,
|
254
|
-
model_version_id=request.model_version_id,
|
255
254
|
)
|
256
255
|
|
257
256
|
def fetch_metadata_collection(self) -> Dict[str, List[RunMetadataEntry]]:
|
@@ -385,7 +384,7 @@ class PipelineRunSchema(NamedSchema, RunMetadataInterface, table=True):
|
|
385
384
|
else {}
|
386
385
|
)
|
387
386
|
metadata = PipelineRunResponseMetadata(
|
388
|
-
|
387
|
+
project=self.project.to_model(),
|
389
388
|
run_metadata=self.fetch_metadata(),
|
390
389
|
config=config,
|
391
390
|
steps=steps,
|
@@ -435,8 +434,6 @@ class PipelineRunSchema(NamedSchema, RunMetadataInterface, table=True):
|
|
435
434
|
if run_update.status:
|
436
435
|
self.status = run_update.status.value
|
437
436
|
self.end_time = run_update.end_time
|
438
|
-
if run_update.model_version_id and self.model_version_id is None:
|
439
|
-
self.model_version_id = run_update.model_version_id
|
440
437
|
|
441
438
|
self.updated = utc_now()
|
442
439
|
return self
|
@@ -31,9 +31,9 @@ from zenml.models import (
|
|
31
31
|
)
|
32
32
|
from zenml.utils.time_utils import utc_now
|
33
33
|
from zenml.zen_stores.schemas.base_schemas import NamedSchema
|
34
|
+
from zenml.zen_stores.schemas.project_schemas import ProjectSchema
|
34
35
|
from zenml.zen_stores.schemas.schema_utils import build_foreign_key_field
|
35
36
|
from zenml.zen_stores.schemas.user_schemas import UserSchema
|
36
|
-
from zenml.zen_stores.schemas.workspace_schemas import WorkspaceSchema
|
37
37
|
|
38
38
|
if TYPE_CHECKING:
|
39
39
|
from zenml.zen_stores.schemas.pipeline_build_schemas import (
|
@@ -54,18 +54,18 @@ class PipelineSchema(NamedSchema, table=True):
|
|
54
54
|
__table_args__ = (
|
55
55
|
UniqueConstraint(
|
56
56
|
"name",
|
57
|
-
"
|
58
|
-
name="
|
57
|
+
"project_id",
|
58
|
+
name="unique_pipeline_name_in_project",
|
59
59
|
),
|
60
60
|
)
|
61
61
|
# Fields
|
62
62
|
description: Optional[str] = Field(sa_column=Column(TEXT, nullable=True))
|
63
63
|
|
64
64
|
# Foreign keys
|
65
|
-
|
65
|
+
project_id: UUID = build_foreign_key_field(
|
66
66
|
source=__tablename__,
|
67
|
-
target=
|
68
|
-
source_column="
|
67
|
+
target=ProjectSchema.__tablename__,
|
68
|
+
source_column="project_id",
|
69
69
|
target_column="id",
|
70
70
|
ondelete="CASCADE",
|
71
71
|
nullable=False,
|
@@ -81,7 +81,7 @@ class PipelineSchema(NamedSchema, table=True):
|
|
81
81
|
|
82
82
|
# Relationships
|
83
83
|
user: Optional["UserSchema"] = Relationship(back_populates="pipelines")
|
84
|
-
|
84
|
+
project: "ProjectSchema" = Relationship(back_populates="pipelines")
|
85
85
|
|
86
86
|
schedules: List["ScheduleSchema"] = Relationship(
|
87
87
|
back_populates="pipeline",
|
@@ -146,7 +146,7 @@ class PipelineSchema(NamedSchema, table=True):
|
|
146
146
|
return cls(
|
147
147
|
name=pipeline_request.name,
|
148
148
|
description=pipeline_request.description,
|
149
|
-
|
149
|
+
project_id=pipeline_request.project,
|
150
150
|
user_id=pipeline_request.user,
|
151
151
|
)
|
152
152
|
|
@@ -179,7 +179,7 @@ class PipelineSchema(NamedSchema, table=True):
|
|
179
179
|
metadata = None
|
180
180
|
if include_metadata:
|
181
181
|
metadata = PipelineResponseMetadata(
|
182
|
-
|
182
|
+
project=self.project.to_model(),
|
183
183
|
description=self.description,
|
184
184
|
)
|
185
185
|
|
@@ -11,18 +11,19 @@
|
|
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
|
-
"""SQL Model Implementations for
|
14
|
+
"""SQL Model Implementations for projects."""
|
15
15
|
|
16
16
|
from typing import TYPE_CHECKING, Any, List
|
17
17
|
|
18
|
+
from sqlalchemy import UniqueConstraint
|
18
19
|
from sqlmodel import Relationship
|
19
20
|
|
20
21
|
from zenml.models import (
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
22
|
+
ProjectRequest,
|
23
|
+
ProjectResponse,
|
24
|
+
ProjectResponseBody,
|
25
|
+
ProjectResponseMetadata,
|
26
|
+
ProjectUpdate,
|
26
27
|
)
|
27
28
|
from zenml.utils.time_utils import utc_now
|
28
29
|
from zenml.zen_stores.schemas.base_schemas import NamedSchema
|
@@ -33,7 +34,6 @@ if TYPE_CHECKING:
|
|
33
34
|
ArtifactVersionSchema,
|
34
35
|
CodeRepositorySchema,
|
35
36
|
EventSourceSchema,
|
36
|
-
FlavorSchema,
|
37
37
|
ModelSchema,
|
38
38
|
ModelVersionSchema,
|
39
39
|
PipelineBuildSchema,
|
@@ -42,128 +42,115 @@ if TYPE_CHECKING:
|
|
42
42
|
PipelineSchema,
|
43
43
|
RunMetadataSchema,
|
44
44
|
ScheduleSchema,
|
45
|
-
SecretSchema,
|
46
|
-
ServiceConnectorSchema,
|
47
45
|
ServiceSchema,
|
48
|
-
StackComponentSchema,
|
49
|
-
StackSchema,
|
50
46
|
StepRunSchema,
|
51
47
|
TriggerSchema,
|
52
48
|
)
|
53
49
|
|
54
50
|
|
55
|
-
class
|
56
|
-
"""SQL Model for
|
51
|
+
class ProjectSchema(NamedSchema, table=True):
|
52
|
+
"""SQL Model for projects."""
|
57
53
|
|
58
|
-
__tablename__ = "
|
54
|
+
__tablename__ = "project"
|
55
|
+
__table_args__ = (
|
56
|
+
UniqueConstraint(
|
57
|
+
"name",
|
58
|
+
name="unique_project_name",
|
59
|
+
),
|
60
|
+
)
|
59
61
|
|
62
|
+
display_name: str
|
60
63
|
description: str
|
61
64
|
|
62
|
-
stacks: List["StackSchema"] = Relationship(
|
63
|
-
back_populates="workspace",
|
64
|
-
sa_relationship_kwargs={"cascade": "delete"},
|
65
|
-
)
|
66
|
-
components: List["StackComponentSchema"] = Relationship(
|
67
|
-
back_populates="workspace",
|
68
|
-
sa_relationship_kwargs={"cascade": "delete"},
|
69
|
-
)
|
70
|
-
flavors: List["FlavorSchema"] = Relationship(
|
71
|
-
back_populates="workspace",
|
72
|
-
sa_relationship_kwargs={"cascade": "delete"},
|
73
|
-
)
|
74
65
|
pipelines: List["PipelineSchema"] = Relationship(
|
75
|
-
back_populates="
|
66
|
+
back_populates="project",
|
76
67
|
sa_relationship_kwargs={"cascade": "delete"},
|
77
68
|
)
|
78
69
|
schedules: List["ScheduleSchema"] = Relationship(
|
79
|
-
back_populates="
|
70
|
+
back_populates="project",
|
80
71
|
sa_relationship_kwargs={"cascade": "delete"},
|
81
72
|
)
|
82
73
|
runs: List["PipelineRunSchema"] = Relationship(
|
83
|
-
back_populates="
|
74
|
+
back_populates="project",
|
84
75
|
sa_relationship_kwargs={"cascade": "delete"},
|
85
76
|
)
|
86
77
|
step_runs: List["StepRunSchema"] = Relationship(
|
87
|
-
back_populates="
|
78
|
+
back_populates="project",
|
88
79
|
sa_relationship_kwargs={"cascade": "delete"},
|
89
80
|
)
|
90
81
|
builds: List["PipelineBuildSchema"] = Relationship(
|
91
|
-
back_populates="
|
82
|
+
back_populates="project",
|
92
83
|
sa_relationship_kwargs={"cascade": "delete"},
|
93
84
|
)
|
94
85
|
artifact_versions: List["ArtifactVersionSchema"] = Relationship(
|
95
|
-
back_populates="
|
86
|
+
back_populates="project",
|
96
87
|
sa_relationship_kwargs={"cascade": "delete"},
|
97
88
|
)
|
98
89
|
run_metadata: List["RunMetadataSchema"] = Relationship(
|
99
|
-
back_populates="
|
100
|
-
sa_relationship_kwargs={"cascade": "delete"},
|
101
|
-
)
|
102
|
-
secrets: List["SecretSchema"] = Relationship(
|
103
|
-
back_populates="workspace",
|
90
|
+
back_populates="project",
|
104
91
|
sa_relationship_kwargs={"cascade": "delete"},
|
105
92
|
)
|
106
93
|
actions: List["ActionSchema"] = Relationship(
|
107
|
-
back_populates="
|
94
|
+
back_populates="project",
|
108
95
|
sa_relationship_kwargs={"cascade": "delete"},
|
109
96
|
)
|
110
97
|
triggers: List["TriggerSchema"] = Relationship(
|
111
|
-
back_populates="
|
98
|
+
back_populates="project",
|
112
99
|
sa_relationship_kwargs={"cascade": "delete"},
|
113
100
|
)
|
114
101
|
event_sources: List["EventSourceSchema"] = Relationship(
|
115
|
-
back_populates="
|
102
|
+
back_populates="project",
|
116
103
|
sa_relationship_kwargs={"cascade": "delete"},
|
117
104
|
)
|
118
105
|
|
119
106
|
deployments: List["PipelineDeploymentSchema"] = Relationship(
|
120
|
-
back_populates="
|
107
|
+
back_populates="project",
|
121
108
|
sa_relationship_kwargs={"cascade": "delete"},
|
122
109
|
)
|
123
110
|
code_repositories: List["CodeRepositorySchema"] = Relationship(
|
124
|
-
back_populates="
|
111
|
+
back_populates="project",
|
125
112
|
sa_relationship_kwargs={"cascade": "delete"},
|
126
113
|
)
|
127
114
|
services: List["ServiceSchema"] = Relationship(
|
128
|
-
back_populates="
|
129
|
-
sa_relationship_kwargs={"cascade": "delete"},
|
130
|
-
)
|
131
|
-
service_connectors: List["ServiceConnectorSchema"] = Relationship(
|
132
|
-
back_populates="workspace",
|
115
|
+
back_populates="project",
|
133
116
|
sa_relationship_kwargs={"cascade": "delete"},
|
134
117
|
)
|
135
118
|
models: List["ModelSchema"] = Relationship(
|
136
|
-
back_populates="
|
119
|
+
back_populates="project",
|
137
120
|
sa_relationship_kwargs={"cascade": "delete"},
|
138
121
|
)
|
139
122
|
model_versions: List["ModelVersionSchema"] = Relationship(
|
140
|
-
back_populates="
|
123
|
+
back_populates="project",
|
141
124
|
sa_relationship_kwargs={"cascade": "delete"},
|
142
125
|
)
|
143
126
|
|
144
127
|
@classmethod
|
145
|
-
def from_request(cls,
|
146
|
-
"""Create a `
|
128
|
+
def from_request(cls, project: ProjectRequest) -> "ProjectSchema":
|
129
|
+
"""Create a `ProjectSchema` from a `ProjectResponse`.
|
147
130
|
|
148
131
|
Args:
|
149
|
-
|
132
|
+
project: The `ProjectResponse` from which to create the schema.
|
150
133
|
|
151
134
|
Returns:
|
152
|
-
The created `
|
135
|
+
The created `ProjectSchema`.
|
153
136
|
"""
|
154
|
-
return cls(
|
137
|
+
return cls(
|
138
|
+
name=project.name,
|
139
|
+
description=project.description,
|
140
|
+
display_name=project.display_name,
|
141
|
+
)
|
155
142
|
|
156
|
-
def update(self,
|
157
|
-
"""Update a `
|
143
|
+
def update(self, project_update: ProjectUpdate) -> "ProjectSchema":
|
144
|
+
"""Update a `ProjectSchema` from a `ProjectUpdate`.
|
158
145
|
|
159
146
|
Args:
|
160
|
-
|
147
|
+
project_update: The `ProjectUpdate` from which to update the
|
161
148
|
schema.
|
162
149
|
|
163
150
|
Returns:
|
164
|
-
The updated `
|
151
|
+
The updated `ProjectSchema`.
|
165
152
|
"""
|
166
|
-
for field, value in
|
153
|
+
for field, value in project_update.model_dump(
|
167
154
|
exclude_unset=True
|
168
155
|
).items():
|
169
156
|
setattr(self, field, value)
|
@@ -176,8 +163,8 @@ class WorkspaceSchema(NamedSchema, table=True):
|
|
176
163
|
include_metadata: bool = False,
|
177
164
|
include_resources: bool = False,
|
178
165
|
**kwargs: Any,
|
179
|
-
) ->
|
180
|
-
"""Convert a `
|
166
|
+
) -> ProjectResponse:
|
167
|
+
"""Convert a `ProjectSchema` to a `ProjectResponse`.
|
181
168
|
|
182
169
|
Args:
|
183
170
|
include_metadata: Whether the metadata will be filled.
|
@@ -186,17 +173,18 @@ class WorkspaceSchema(NamedSchema, table=True):
|
|
186
173
|
|
187
174
|
|
188
175
|
Returns:
|
189
|
-
The converted `
|
176
|
+
The converted `ProjectResponseModel`.
|
190
177
|
"""
|
191
178
|
metadata = None
|
192
179
|
if include_metadata:
|
193
|
-
metadata =
|
180
|
+
metadata = ProjectResponseMetadata(
|
194
181
|
description=self.description,
|
195
182
|
)
|
196
|
-
return
|
183
|
+
return ProjectResponse(
|
197
184
|
id=self.id,
|
198
185
|
name=self.name,
|
199
|
-
body=
|
186
|
+
body=ProjectResponseBody(
|
187
|
+
display_name=self.display_name,
|
200
188
|
created=self.created,
|
201
189
|
updated=self.updated,
|
202
190
|
),
|
@@ -21,13 +21,13 @@ from sqlmodel import Field, Relationship, SQLModel
|
|
21
21
|
|
22
22
|
from zenml.zen_stores.schemas.base_schemas import BaseSchema
|
23
23
|
from zenml.zen_stores.schemas.component_schemas import StackComponentSchema
|
24
|
+
from zenml.zen_stores.schemas.project_schemas import ProjectSchema
|
24
25
|
from zenml.zen_stores.schemas.schema_utils import (
|
25
26
|
build_foreign_key_field,
|
26
27
|
build_index,
|
27
28
|
)
|
28
29
|
from zenml.zen_stores.schemas.step_run_schemas import StepRunSchema
|
29
30
|
from zenml.zen_stores.schemas.user_schemas import UserSchema
|
30
|
-
from zenml.zen_stores.schemas.workspace_schemas import WorkspaceSchema
|
31
31
|
|
32
32
|
|
33
33
|
class RunMetadataSchema(BaseSchema, table=True):
|
@@ -57,15 +57,15 @@ class RunMetadataSchema(BaseSchema, table=True):
|
|
57
57
|
)
|
58
58
|
user: Optional["UserSchema"] = Relationship(back_populates="run_metadata")
|
59
59
|
|
60
|
-
|
60
|
+
project_id: UUID = build_foreign_key_field(
|
61
61
|
source=__tablename__,
|
62
|
-
target=
|
63
|
-
source_column="
|
62
|
+
target=ProjectSchema.__tablename__,
|
63
|
+
source_column="project_id",
|
64
64
|
target_column="id",
|
65
65
|
ondelete="CASCADE",
|
66
66
|
nullable=False,
|
67
67
|
)
|
68
|
-
|
68
|
+
project: "ProjectSchema" = Relationship(back_populates="run_metadata")
|
69
69
|
|
70
70
|
key: str
|
71
71
|
value: str = Field(sa_column=Column(TEXT, nullable=False))
|
@@ -32,10 +32,10 @@ from zenml.models import (
|
|
32
32
|
RunTemplateUpdate,
|
33
33
|
)
|
34
34
|
from zenml.utils.time_utils import utc_now
|
35
|
-
from zenml.zen_stores.schemas.base_schemas import
|
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
|
-
from zenml.zen_stores.schemas.workspace_schemas import WorkspaceSchema
|
39
39
|
|
40
40
|
if TYPE_CHECKING:
|
41
41
|
from zenml.zen_stores.schemas.pipeline_deployment_schemas import (
|
@@ -45,19 +45,18 @@ if TYPE_CHECKING:
|
|
45
45
|
from zenml.zen_stores.schemas.tag_schemas import TagSchema
|
46
46
|
|
47
47
|
|
48
|
-
class RunTemplateSchema(
|
48
|
+
class RunTemplateSchema(NamedSchema, table=True):
|
49
49
|
"""SQL Model for run templates."""
|
50
50
|
|
51
51
|
__tablename__ = "run_template"
|
52
52
|
__table_args__ = (
|
53
53
|
UniqueConstraint(
|
54
54
|
"name",
|
55
|
-
"
|
56
|
-
name="
|
55
|
+
"project_id",
|
56
|
+
name="unique_template_name_in_project",
|
57
57
|
),
|
58
58
|
)
|
59
59
|
|
60
|
-
name: str = Field(nullable=False)
|
61
60
|
description: Optional[str] = Field(
|
62
61
|
sa_column=Column(
|
63
62
|
String(length=MEDIUMTEXT_MAX_LENGTH).with_variant(
|
@@ -75,10 +74,10 @@ class RunTemplateSchema(BaseSchema, table=True):
|
|
75
74
|
ondelete="SET NULL",
|
76
75
|
nullable=True,
|
77
76
|
)
|
78
|
-
|
77
|
+
project_id: UUID = build_foreign_key_field(
|
79
78
|
source=__tablename__,
|
80
|
-
target=
|
81
|
-
source_column="
|
79
|
+
target=ProjectSchema.__tablename__,
|
80
|
+
source_column="project_id",
|
82
81
|
target_column="id",
|
83
82
|
ondelete="CASCADE",
|
84
83
|
nullable=False,
|
@@ -92,8 +91,10 @@ class RunTemplateSchema(BaseSchema, table=True):
|
|
92
91
|
nullable=True,
|
93
92
|
)
|
94
93
|
|
95
|
-
user: Optional["UserSchema"] = Relationship(
|
96
|
-
|
94
|
+
user: Optional["UserSchema"] = Relationship(
|
95
|
+
back_populates="run_templates",
|
96
|
+
)
|
97
|
+
project: "ProjectSchema" = Relationship()
|
97
98
|
source_deployment: Optional["PipelineDeploymentSchema"] = Relationship(
|
98
99
|
sa_relationship_kwargs={
|
99
100
|
"foreign_keys": "RunTemplateSchema.source_deployment_id",
|
@@ -162,7 +163,7 @@ class RunTemplateSchema(BaseSchema, table=True):
|
|
162
163
|
"""
|
163
164
|
return cls(
|
164
165
|
user_id=request.user,
|
165
|
-
|
166
|
+
project_id=request.project,
|
166
167
|
name=request.name,
|
167
168
|
description=request.description,
|
168
169
|
source_deployment_id=request.source_deployment_id,
|
@@ -180,6 +181,9 @@ class RunTemplateSchema(BaseSchema, table=True):
|
|
180
181
|
for field, value in update.model_dump(
|
181
182
|
exclude_unset=True, exclude_none=True
|
182
183
|
).items():
|
184
|
+
if field in ["add_tags", "remove_tags"]:
|
185
|
+
# Tags are handled separately
|
186
|
+
continue
|
183
187
|
setattr(self, field, value)
|
184
188
|
|
185
189
|
self.updated = utc_now()
|
@@ -246,7 +250,7 @@ class RunTemplateSchema(BaseSchema, table=True):
|
|
246
250
|
)
|
247
251
|
|
248
252
|
metadata = RunTemplateResponseMetadata(
|
249
|
-
|
253
|
+
project=self.project.to_model(),
|
250
254
|
description=self.description,
|
251
255
|
pipeline_spec=pipeline_spec,
|
252
256
|
config_template=config_template,
|