zenml-nightly 0.72.0.dev20250121__py3-none-any.whl → 0.73.0.dev20250124__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/cli/login.py +2 -0
- zenml/cli/server.py +1 -0
- zenml/cli/service_connectors.py +8 -4
- zenml/cli/stack.py +2 -2
- zenml/config/pipeline_configurations.py +2 -2
- zenml/config/server_config.py +20 -0
- zenml/enums.py +1 -0
- zenml/event_hub/base_event_hub.py +2 -2
- zenml/integrations/airflow/orchestrators/airflow_orchestrator.py +4 -2
- zenml/integrations/aws/__init__.py +2 -1
- zenml/integrations/aws/flavors/sagemaker_orchestrator_flavor.py +15 -0
- zenml/integrations/aws/orchestrators/sagemaker_orchestrator.py +308 -70
- zenml/integrations/gcp/__init__.py +3 -0
- zenml/integrations/gcp/experiment_trackers/__init__.py +18 -0
- zenml/integrations/gcp/experiment_trackers/vertex_experiment_tracker.py +214 -0
- zenml/integrations/gcp/flavors/__init__.py +6 -0
- zenml/integrations/gcp/flavors/vertex_experiment_tracker_flavor.py +199 -0
- zenml/integrations/huggingface/__init__.py +1 -6
- zenml/integrations/kubernetes/orchestrators/kube_utils.py +2 -2
- zenml/integrations/mlflow/experiment_trackers/mlflow_experiment_tracker.py +0 -1
- zenml/integrations/whylogs/data_validators/whylogs_data_validator.py +3 -1
- zenml/models/v2/core/api_key.py +2 -2
- zenml/models/v2/core/schedule.py +16 -1
- zenml/orchestrators/publish_utils.py +4 -4
- zenml/orchestrators/step_launcher.py +3 -3
- zenml/orchestrators/step_run_utils.py +2 -2
- zenml/pipelines/run_utils.py +2 -2
- zenml/service_connectors/service_connector.py +2 -2
- zenml/stack/stack.py +3 -3
- zenml/stack/stack_component.py +10 -2
- zenml/stack_deployments/stack_deployment.py +5 -0
- zenml/utils/git_utils.py +1 -1
- zenml/utils/string_utils.py +2 -2
- zenml/zen_server/auth.py +13 -6
- zenml/zen_server/dashboard/assets/{404-Dfq64Boz.js → 404-c8OuXDAT.js} +1 -1
- zenml/zen_server/dashboard/assets/{@reactflow-BUNIMFeC.js → @reactflow-6JPoencd.js} +1 -1
- zenml/zen_server/dashboard/assets/{AlertDialogDropdownItem-B73Vs10T.js → AlertDialogDropdownItem-8yPFDxEI.js} +1 -1
- zenml/zen_server/dashboard/assets/{CodeSnippet-DIJRT2NT.js → CodeSnippet-Qh1ae_DJ.js} +1 -1
- zenml/zen_server/dashboard/assets/{CollapsibleCard-BzUHGZOU.js → CollapsibleCard-TiI4lId1.js} +1 -1
- zenml/zen_server/dashboard/assets/{Commands-BEGyld4c.js → Commands-BcR2Arie.js} +1 -1
- zenml/zen_server/dashboard/assets/{ComponentBadge-xyKiek1s.js → ComponentBadge-BqQNUZgb.js} +1 -1
- zenml/zen_server/dashboard/assets/{CopyButton-DhW-mapu.js → CopyButton-DCiXO3JC.js} +1 -1
- zenml/zen_server/dashboard/assets/{CsvVizualization-D8oazBiE.js → CsvVizualization-O9cVIaL8.js} +1 -1
- zenml/zen_server/dashboard/assets/{DeleteAlertDialog-WkSIIgfy.js → DeleteAlertDialog-DrPjHtXX.js} +1 -1
- zenml/zen_server/dashboard/assets/{DialogItem-Bgroeg29.js → DialogItem-BYG7d_M2.js} +1 -1
- zenml/zen_server/dashboard/assets/{Error-CY5tlu17.js → Error-C1zbWr19.js} +1 -1
- zenml/zen_server/dashboard/assets/{ExecutionStatus-G8mjIaeA.js → ExecutionStatus-Ct9srgHC.js} +1 -1
- zenml/zen_server/dashboard/assets/{Helpbox-Bb1ed--O.js → Helpbox-Bm_1Zx9f.js} +1 -1
- zenml/zen_server/dashboard/assets/{Infobox-Da6-76M2.js → Infobox-OQdkCLSP.js} +1 -1
- zenml/zen_server/dashboard/assets/{InlineAvatar-DqnZaBNq.js → InlineAvatar-CQNjKoEQ.js} +1 -1
- zenml/zen_server/dashboard/assets/{NestedCollapsible-aK5ojKoF.js → NestedCollapsible-DDgd2SGb.js} +1 -1
- zenml/zen_server/dashboard/assets/Partials-MD3e95Dk.js +1 -0
- zenml/zen_server/dashboard/assets/{ProBadge-B4tRUYve.js → ProBadge-D784iVNC.js} +1 -1
- zenml/zen_server/dashboard/assets/{ProCta-CZuP29Qz.js → ProCta-W2PEvNow.js} +1 -1
- zenml/zen_server/dashboard/assets/{ProviderIcon-Bd7GUQ1_.js → ProviderIcon-DfDUOeAy.js} +1 -1
- zenml/zen_server/dashboard/assets/{ProviderRadio-mstdqzsS.js → ProviderRadio-B81Elxrc.js} +1 -1
- zenml/zen_server/dashboard/assets/{RunSelector-CsruSB4i.js → RunSelector-DOXgdry5.js} +1 -1
- zenml/zen_server/dashboard/assets/{RunsBody-DxxtWVYz.js → RunsBody-Bnx2fxub.js} +1 -1
- zenml/zen_server/dashboard/assets/SearchField-Yjv-KRW4.js +1 -0
- zenml/zen_server/dashboard/assets/{SecretTooltip-CLzJIYW_.js → SecretTooltip-EKpMlG2f.js} +1 -1
- zenml/zen_server/dashboard/assets/{SetPassword-Yn50ooBC.js → SetPassword-CDLy57PZ.js} +1 -1
- zenml/zen_server/dashboard/assets/StackList-DKQaLDo4.js +1 -0
- zenml/zen_server/dashboard/assets/{Tabs-CNv-eTYM.js → Tabs-B5E-o_h6.js} +1 -1
- zenml/zen_server/dashboard/assets/{Tick-jEIevzVf.js → Tick-DSYBiuXU.js} +1 -1
- zenml/zen_server/dashboard/assets/{UpdatePasswordSchemas-C16GW-kX.js → UpdatePasswordSchemas-HBNOeyoP.js} +1 -1
- zenml/zen_server/dashboard/assets/{UsageReason-Bf2tzhv1.js → UsageReason-DXtPS5nE.js} +1 -1
- zenml/zen_server/dashboard/assets/{WizardFooter-D6i-AP1K.js → WizardFooter-_1VSMZ_c.js} +1 -1
- zenml/zen_server/dashboard/assets/{all-pipeline-runs-query-DUti43aF.js → all-pipeline-runs-query-D0qDLdKB.js} +1 -1
- zenml/zen_server/dashboard/assets/{create-stack-Ch2WPs9U.js → create-stack-7JzgAYAm.js} +1 -1
- zenml/zen_server/dashboard/assets/{delete-run-Byf9hTjA.js → delete-run-CUdtYFLl.js} +1 -1
- zenml/zen_server/dashboard/assets/{form-schemas-BZqKBPBF.js → form-schemas-B6PCV3Y4.js} +1 -1
- zenml/zen_server/dashboard/assets/index-B6U0OkEN.css +1 -0
- zenml/zen_server/dashboard/assets/{index-CyBKZcpO.js → index-CJ5IfeAl.js} +1 -1
- zenml/zen_server/dashboard/assets/{index-CtdYkjUi.js → index-Ceyzb1yI.js} +1 -1
- zenml/zen_server/dashboard/assets/{index-CE0aQlv8.js → index-CxO6541P.js} +3 -3
- zenml/zen_server/dashboard/assets/{index-v6gQjDEo.js → index-D4yoZ_gH.js} +1 -1
- zenml/zen_server/dashboard/assets/{login-mutation-DNDVp_2H.js → login-mutation-BaeJ7MAg.js} +1 -1
- zenml/zen_server/dashboard/assets/{not-found-Bmup4ctE.js → not-found-MGptrNBk.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-DGlm1RVc.js → page-Aeu3v0MQ.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-CltCNL0T.js → page-BCgEdmhP.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-Hn8q9iJZ.js → page-BKwwfTNy.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-BNxYrN0q.js → page-BUjw8Tp1.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-BYJfqgLN.js → page-BXgXP-Qj.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-DN4BVIOL.js → page-BXrtxEbw.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-CHRn1fQm.js → page-BaUDR9Ri.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-DlIi5ThM.js → page-BbljjC-k.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-BrmJp1Wt.js → page-BhOXn-s9.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-Cc8ZEuj4.js → page-C37IDa-Q.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-Dif8CWyZ.js → page-C4JpDeUM.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-BC27C_OI.js → page-CB2_GdBA.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-B5Sr8pib.js → page-CBiT2Ox9.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-IhckKFnD.js → page-CXPc-HN1.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-Dth9X1Ih.js → page-CbwI6emp.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-DweqqCkF.js → page-CeNL9JWi.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-LyZ_l8vR.js → page-CkPwPmLZ.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-C70wZtV2.js → page-CmJU3Gqo.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-D9Oh05fl.js → page-CoFVtzhG.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-PamGpk0j.js → page-D-KPzeQb.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-DoW7YxTu.js → page-DKQ3wZgr.js} +1 -1
- zenml/zen_server/dashboard/assets/page-DWWhxCoF.js +1 -0
- zenml/zen_server/dashboard/assets/{page-CmlYj7Nl.js → page-DbW8MfQ4.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-CWr96ZKN.js → page-Dv5lN2w7.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-ANYGfEUL.js → page-Dvbq1BoF.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-D6Ev5P8V.js → page-DyAuja95.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-DyOJ_pq3.js → page-DzrdL2v1.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-CXAbSyp9.js → page-I2B4Ocv8.js} +1 -1
- zenml/zen_server/dashboard/assets/page-OdjGauvw.js +2 -0
- zenml/zen_server/dashboard/assets/{page-CaeI9ptC.js → page-Ox-eC1ik.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-B_0XkV48.js → page-khp8QJ6b.js} +1 -1
- zenml/zen_server/dashboard/assets/{page--XLMzHrn.js → page-yNh6PQKt.js} +1 -1
- zenml/zen_server/dashboard/assets/{persist-vP0-Xl4f.js → persist-DBTFy--v.js} +1 -1
- zenml/zen_server/dashboard/assets/{persist-DeXRG61d.js → persist-K7AY0ju4.js} +1 -1
- zenml/zen_server/dashboard/assets/{service-DH_oUqQj.js → service-BvOYLH5b.js} +1 -1
- zenml/zen_server/dashboard/assets/{sharedSchema-Bw1_Wa7l.js → sharedSchema-xJDsJNgJ.js} +1 -1
- zenml/zen_server/dashboard/assets/{stack-detail-query-B_0R_fd6.js → stack-detail-query-DMJoxwgv.js} +1 -1
- zenml/zen_server/dashboard/assets/{update-server-settings-mutation-D9qYhfaN.js → update-server-settings-mutation-ATZDNNZk.js} +1 -1
- zenml/zen_server/dashboard/assets/{url-Dh93fvh0.js → url-BWJXzuI4.js} +1 -1
- zenml/zen_server/dashboard/index.html +4 -4
- zenml/zen_server/deploy/helm/Chart.yaml +1 -1
- zenml/zen_server/deploy/helm/README.md +2 -2
- zenml/zen_server/deploy/helm/templates/server-db-job.yaml +5 -3
- zenml/zen_server/deploy/helm/values.yaml +4 -0
- zenml/zen_server/routers/devices_endpoints.py +4 -2
- zenml/zen_server/routers/workspaces_endpoints.py +2 -0
- zenml/zen_stores/migrations/versions/0.73.0_release.py +23 -0
- zenml/zen_stores/migrations/versions/25155145c545_separate_actions_and_triggers.py +2 -2
- zenml/zen_stores/migrations/versions/46506f72f0ed_add_server_settings.py +2 -2
- zenml/zen_stores/migrations/versions/5994f9ad0489_introduce_role_permissions.py +6 -6
- zenml/zen_stores/migrations/versions/7500f434b71c_remove_shared_columns.py +2 -2
- zenml/zen_stores/migrations/versions/a91762e6be36_artifact_version_table.py +3 -3
- zenml/zen_stores/schemas/action_schemas.py +2 -2
- zenml/zen_stores/schemas/api_key_schemas.py +4 -4
- zenml/zen_stores/schemas/artifact_schemas.py +3 -3
- zenml/zen_stores/schemas/base_schemas.py +7 -3
- zenml/zen_stores/schemas/code_repository_schemas.py +2 -2
- zenml/zen_stores/schemas/component_schemas.py +2 -2
- zenml/zen_stores/schemas/device_schemas.py +4 -4
- zenml/zen_stores/schemas/event_source_schemas.py +2 -2
- zenml/zen_stores/schemas/flavor_schemas.py +2 -2
- zenml/zen_stores/schemas/model_schemas.py +3 -3
- zenml/zen_stores/schemas/pipeline_run_schemas.py +10 -3
- zenml/zen_stores/schemas/pipeline_schemas.py +2 -2
- zenml/zen_stores/schemas/run_template_schemas.py +2 -2
- zenml/zen_stores/schemas/schedule_schema.py +19 -4
- zenml/zen_stores/schemas/secret_schemas.py +2 -2
- zenml/zen_stores/schemas/server_settings_schemas.py +9 -5
- zenml/zen_stores/schemas/service_connector_schemas.py +2 -2
- zenml/zen_stores/schemas/service_schemas.py +2 -2
- zenml/zen_stores/schemas/stack_schemas.py +2 -2
- zenml/zen_stores/schemas/step_run_schemas.py +2 -2
- zenml/zen_stores/schemas/tag_schemas.py +2 -2
- zenml/zen_stores/schemas/trigger_schemas.py +2 -2
- zenml/zen_stores/schemas/user_schemas.py +3 -3
- zenml/zen_stores/schemas/workspace_schemas.py +2 -2
- zenml/zen_stores/sql_zen_store.py +10 -1
- {zenml_nightly-0.72.0.dev20250121.dist-info → zenml_nightly-0.73.0.dev20250124.dist-info}/METADATA +3 -3
- {zenml_nightly-0.72.0.dev20250121.dist-info → zenml_nightly-0.73.0.dev20250124.dist-info}/RECORD +161 -157
- zenml/zen_server/dashboard/assets/Partials-CqZp5NMX.js +0 -1
- zenml/zen_server/dashboard/assets/SearchField-D6tPxyqw.js +0 -1
- zenml/zen_server/dashboard/assets/StackList-U537qoYd.js +0 -1
- zenml/zen_server/dashboard/assets/index-DXvT1_Um.css +0 -1
- zenml/zen_server/dashboard/assets/page-C2nU3Gxn.js +0 -1
- zenml/zen_server/dashboard/assets/page-PxOWfKgF.js +0 -2
- {zenml_nightly-0.72.0.dev20250121.dist-info → zenml_nightly-0.73.0.dev20250124.dist-info}/LICENSE +0 -0
- {zenml_nightly-0.72.0.dev20250121.dist-info → zenml_nightly-0.73.0.dev20250124.dist-info}/WHEEL +0 -0
- {zenml_nightly-0.72.0.dev20250121.dist-info → zenml_nightly-0.73.0.dev20250124.dist-info}/entry_points.txt +0 -0
@@ -13,7 +13,7 @@
|
|
13
13
|
# permissions and limitations under the License.
|
14
14
|
"""SQLModel implementation for authorized OAuth2 devices."""
|
15
15
|
|
16
|
-
from datetime import datetime, timedelta
|
16
|
+
from datetime import datetime, timedelta, timezone
|
17
17
|
from secrets import token_hex
|
18
18
|
from typing import Any, Optional, Tuple
|
19
19
|
from uuid import UUID
|
@@ -115,7 +115,7 @@ class OAuthDeviceSchema(BaseSchema, table=True):
|
|
115
115
|
device_code = cls._generate_device_code()
|
116
116
|
hashed_user_code = cls._get_hashed_code(user_code)
|
117
117
|
hashed_device_code = cls._get_hashed_code(device_code)
|
118
|
-
now = datetime.
|
118
|
+
now = datetime.now(timezone.utc)
|
119
119
|
return (
|
120
120
|
cls(
|
121
121
|
client_id=request.client_id,
|
@@ -159,7 +159,7 @@ class OAuthDeviceSchema(BaseSchema, table=True):
|
|
159
159
|
elif device_update.locked is False:
|
160
160
|
self.status = OAuthDeviceStatus.ACTIVE.value
|
161
161
|
|
162
|
-
self.updated = datetime.
|
162
|
+
self.updated = datetime.now(timezone.utc)
|
163
163
|
return self
|
164
164
|
|
165
165
|
def internal_update(
|
@@ -174,7 +174,7 @@ class OAuthDeviceSchema(BaseSchema, table=True):
|
|
174
174
|
The updated `OAuthDeviceSchema` and the new user code and device
|
175
175
|
code, if they were generated.
|
176
176
|
"""
|
177
|
-
now = datetime.
|
177
|
+
now = datetime.now(timezone.utc)
|
178
178
|
user_code: Optional[str] = None
|
179
179
|
device_code: Optional[str] = None
|
180
180
|
|
@@ -15,7 +15,7 @@
|
|
15
15
|
|
16
16
|
import base64
|
17
17
|
import json
|
18
|
-
from datetime import datetime
|
18
|
+
from datetime import datetime, timezone
|
19
19
|
from typing import TYPE_CHECKING, Any, List, Optional, cast
|
20
20
|
from uuid import UUID
|
21
21
|
|
@@ -184,5 +184,5 @@ class EventSourceSchema(NamedSchema, table=True):
|
|
184
184
|
)
|
185
185
|
else:
|
186
186
|
setattr(self, field, value)
|
187
|
-
self.updated = datetime.
|
187
|
+
self.updated = datetime.now(timezone.utc)
|
188
188
|
return self
|
@@ -14,7 +14,7 @@
|
|
14
14
|
"""SQL Model Implementations for Flavors."""
|
15
15
|
|
16
16
|
import json
|
17
|
-
from datetime import datetime
|
17
|
+
from datetime import datetime, timezone
|
18
18
|
from typing import Any, Optional
|
19
19
|
from uuid import UUID
|
20
20
|
|
@@ -103,7 +103,7 @@ class FlavorSchema(NamedSchema, table=True):
|
|
103
103
|
else:
|
104
104
|
setattr(self, field, value)
|
105
105
|
|
106
|
-
self.updated = datetime.
|
106
|
+
self.updated = datetime.now(timezone.utc)
|
107
107
|
return self
|
108
108
|
|
109
109
|
def to_model(
|
@@ -13,7 +13,7 @@
|
|
13
13
|
# permissions and limitations under the License.
|
14
14
|
"""SQLModel implementation of model tables."""
|
15
15
|
|
16
|
-
from datetime import datetime
|
16
|
+
from datetime import datetime, timezone
|
17
17
|
from typing import TYPE_CHECKING, Any, Dict, List, Optional, cast
|
18
18
|
from uuid import UUID, uuid4
|
19
19
|
|
@@ -224,7 +224,7 @@ class ModelSchema(NamedSchema, table=True):
|
|
224
224
|
exclude_unset=True, exclude_none=True
|
225
225
|
).items():
|
226
226
|
setattr(self, field, value)
|
227
|
-
self.updated = datetime.
|
227
|
+
self.updated = datetime.now(timezone.utc)
|
228
228
|
return self
|
229
229
|
|
230
230
|
|
@@ -504,7 +504,7 @@ class ModelVersionSchema(NamedSchema, RunMetadataInterface, table=True):
|
|
504
504
|
self.name = target_name
|
505
505
|
if target_description is not None:
|
506
506
|
self.description = target_description
|
507
|
-
self.updated = datetime.
|
507
|
+
self.updated = datetime.now(timezone.utc)
|
508
508
|
return self
|
509
509
|
|
510
510
|
|
@@ -14,7 +14,7 @@
|
|
14
14
|
"""SQLModel implementation of pipeline run tables."""
|
15
15
|
|
16
16
|
import json
|
17
|
-
from datetime import datetime
|
17
|
+
from datetime import datetime, timezone
|
18
18
|
from typing import TYPE_CHECKING, Any, Dict, List, Optional
|
19
19
|
from uuid import UUID
|
20
20
|
|
@@ -269,6 +269,13 @@ class PipelineRunSchema(NamedSchema, RunMetadataInterface, table=True):
|
|
269
269
|
for k, v in step_metadata.items():
|
270
270
|
metadata_collection[f"{s.name}::{k}"] = v
|
271
271
|
|
272
|
+
# Fetch the metadata related to the schedule of this run
|
273
|
+
if self.deployment is not None:
|
274
|
+
if schedule := self.deployment.schedule:
|
275
|
+
schedule_metadata = schedule.fetch_metadata_collection()
|
276
|
+
for k, v in schedule_metadata.items():
|
277
|
+
metadata_collection[f"schedule:{k}"] = v
|
278
|
+
|
272
279
|
return metadata_collection
|
273
280
|
|
274
281
|
def to_model(
|
@@ -430,7 +437,7 @@ class PipelineRunSchema(NamedSchema, RunMetadataInterface, table=True):
|
|
430
437
|
if run_update.model_version_id and self.model_version_id is None:
|
431
438
|
self.model_version_id = run_update.model_version_id
|
432
439
|
|
433
|
-
self.updated = datetime.
|
440
|
+
self.updated = datetime.now(timezone.utc)
|
434
441
|
return self
|
435
442
|
|
436
443
|
def update_placeholder(
|
@@ -471,7 +478,7 @@ class PipelineRunSchema(NamedSchema, RunMetadataInterface, table=True):
|
|
471
478
|
self.orchestrator_environment = orchestrator_environment
|
472
479
|
self.status = request.status.value
|
473
480
|
|
474
|
-
self.updated = datetime.
|
481
|
+
self.updated = datetime.now(timezone.utc)
|
475
482
|
|
476
483
|
return self
|
477
484
|
|
@@ -13,7 +13,7 @@
|
|
13
13
|
# permissions and limitations under the License.
|
14
14
|
"""SQL Model Implementations for Pipelines and Pipeline Runs."""
|
15
15
|
|
16
|
-
from datetime import datetime
|
16
|
+
from datetime import datetime, timezone
|
17
17
|
from typing import TYPE_CHECKING, Any, List, Optional
|
18
18
|
from uuid import UUID
|
19
19
|
|
@@ -185,5 +185,5 @@ class PipelineSchema(NamedSchema, table=True):
|
|
185
185
|
The updated `PipelineSchema`.
|
186
186
|
"""
|
187
187
|
self.description = pipeline_update.description
|
188
|
-
self.updated = datetime.
|
188
|
+
self.updated = datetime.now(timezone.utc)
|
189
189
|
return self
|
@@ -13,7 +13,7 @@
|
|
13
13
|
# permissions and limitations under the License.
|
14
14
|
"""SQLModel implementation of run template tables."""
|
15
15
|
|
16
|
-
from datetime import datetime
|
16
|
+
from datetime import datetime, timezone
|
17
17
|
from typing import TYPE_CHECKING, Any, List, Optional
|
18
18
|
from uuid import UUID
|
19
19
|
|
@@ -156,7 +156,7 @@ class RunTemplateSchema(BaseSchema, table=True):
|
|
156
156
|
).items():
|
157
157
|
setattr(self, field, value)
|
158
158
|
|
159
|
-
self.updated = datetime.
|
159
|
+
self.updated = datetime.now(timezone.utc)
|
160
160
|
return self
|
161
161
|
|
162
162
|
def to_model(
|
@@ -13,12 +13,13 @@
|
|
13
13
|
# permissions and limitations under the License.
|
14
14
|
"""SQL Model Implementations for Pipeline Schedules."""
|
15
15
|
|
16
|
-
from datetime import datetime, timedelta
|
17
|
-
from typing import TYPE_CHECKING, Any, Optional
|
16
|
+
from datetime import datetime, timedelta, timezone
|
17
|
+
from typing import TYPE_CHECKING, Any, List, Optional
|
18
18
|
from uuid import UUID
|
19
19
|
|
20
20
|
from sqlmodel import Field, Relationship
|
21
21
|
|
22
|
+
from zenml.enums import MetadataResourceTypes
|
22
23
|
from zenml.models import (
|
23
24
|
ScheduleRequest,
|
24
25
|
ScheduleResponse,
|
@@ -31,15 +32,19 @@ from zenml.zen_stores.schemas.component_schemas import StackComponentSchema
|
|
31
32
|
from zenml.zen_stores.schemas.pipeline_schemas import PipelineSchema
|
32
33
|
from zenml.zen_stores.schemas.schema_utils import build_foreign_key_field
|
33
34
|
from zenml.zen_stores.schemas.user_schemas import UserSchema
|
35
|
+
from zenml.zen_stores.schemas.utils import RunMetadataInterface
|
34
36
|
from zenml.zen_stores.schemas.workspace_schemas import WorkspaceSchema
|
35
37
|
|
36
38
|
if TYPE_CHECKING:
|
37
39
|
from zenml.zen_stores.schemas.pipeline_deployment_schemas import (
|
38
40
|
PipelineDeploymentSchema,
|
39
41
|
)
|
42
|
+
from zenml.zen_stores.schemas.run_metadata_schemas import (
|
43
|
+
RunMetadataSchema,
|
44
|
+
)
|
40
45
|
|
41
46
|
|
42
|
-
class ScheduleSchema(NamedSchema, table=True):
|
47
|
+
class ScheduleSchema(NamedSchema, RunMetadataInterface, table=True):
|
43
48
|
"""SQL Model for schedules."""
|
44
49
|
|
45
50
|
__tablename__ = "schedule"
|
@@ -89,6 +94,15 @@ class ScheduleSchema(NamedSchema, table=True):
|
|
89
94
|
back_populates="schedules"
|
90
95
|
)
|
91
96
|
|
97
|
+
run_metadata: List["RunMetadataSchema"] = Relationship(
|
98
|
+
sa_relationship_kwargs=dict(
|
99
|
+
secondary="run_metadata_resource",
|
100
|
+
primaryjoin=f"and_(foreign(RunMetadataResourceSchema.resource_type)=='{MetadataResourceTypes.SCHEDULE.value}', foreign(RunMetadataResourceSchema.resource_id)==ScheduleSchema.id)",
|
101
|
+
secondaryjoin="RunMetadataSchema.id==foreign(RunMetadataResourceSchema.run_metadata_id)",
|
102
|
+
overlaps="run_metadata",
|
103
|
+
),
|
104
|
+
)
|
105
|
+
|
92
106
|
active: bool
|
93
107
|
cron_expression: Optional[str] = Field(nullable=True)
|
94
108
|
start_time: Optional[datetime] = Field(nullable=True)
|
@@ -153,7 +167,7 @@ class ScheduleSchema(NamedSchema, table=True):
|
|
153
167
|
)
|
154
168
|
if schedule_update.catchup is not None:
|
155
169
|
self.catchup = schedule_update.catchup
|
156
|
-
self.updated = datetime.
|
170
|
+
self.updated = datetime.now(timezone.utc)
|
157
171
|
return self
|
158
172
|
|
159
173
|
def to_model(
|
@@ -196,6 +210,7 @@ class ScheduleSchema(NamedSchema, table=True):
|
|
196
210
|
workspace=self.workspace.to_model(),
|
197
211
|
pipeline_id=self.pipeline_id,
|
198
212
|
orchestrator_id=self.orchestrator_id,
|
213
|
+
run_metadata=self.fetch_metadata(),
|
199
214
|
)
|
200
215
|
|
201
216
|
return ScheduleResponse(
|
@@ -15,7 +15,7 @@
|
|
15
15
|
|
16
16
|
import base64
|
17
17
|
import json
|
18
|
-
from datetime import datetime
|
18
|
+
from datetime import datetime, timezone
|
19
19
|
from typing import Any, Dict, Optional, cast
|
20
20
|
from uuid import UUID
|
21
21
|
|
@@ -209,7 +209,7 @@ class SecretSchema(NamedSchema, table=True):
|
|
209
209
|
else:
|
210
210
|
setattr(self, field, value)
|
211
211
|
|
212
|
-
self.updated = datetime.
|
212
|
+
self.updated = datetime.now(timezone.utc)
|
213
213
|
return self
|
214
214
|
|
215
215
|
def to_model(
|
@@ -14,7 +14,7 @@
|
|
14
14
|
"""SQLModel implementation for the server settings table."""
|
15
15
|
|
16
16
|
import json
|
17
|
-
from datetime import datetime
|
17
|
+
from datetime import datetime, timezone
|
18
18
|
from typing import Any, Optional, Set
|
19
19
|
from uuid import UUID
|
20
20
|
|
@@ -42,8 +42,12 @@ class ServerSettingsSchema(SQLModel, table=True):
|
|
42
42
|
display_announcements: Optional[bool] = Field(nullable=True)
|
43
43
|
display_updates: Optional[bool] = Field(nullable=True)
|
44
44
|
onboarding_state: Optional[str] = Field(nullable=True)
|
45
|
-
last_user_activity: datetime = Field(
|
46
|
-
|
45
|
+
last_user_activity: datetime = Field(
|
46
|
+
default_factory=lambda: datetime.now(timezone.utc)
|
47
|
+
)
|
48
|
+
updated: datetime = Field(
|
49
|
+
default_factory=lambda: datetime.now(timezone.utc)
|
50
|
+
)
|
47
51
|
|
48
52
|
def update(
|
49
53
|
self, settings_update: ServerSettingsUpdate
|
@@ -63,7 +67,7 @@ class ServerSettingsSchema(SQLModel, table=True):
|
|
63
67
|
if hasattr(self, field):
|
64
68
|
setattr(self, field, value)
|
65
69
|
|
66
|
-
self.updated = datetime.
|
70
|
+
self.updated = datetime.now(timezone.utc)
|
67
71
|
|
68
72
|
return self
|
69
73
|
|
@@ -83,7 +87,7 @@ class ServerSettingsSchema(SQLModel, table=True):
|
|
83
87
|
)
|
84
88
|
new_state = old_state.union(completed_steps)
|
85
89
|
self.onboarding_state = json.dumps(list(new_state))
|
86
|
-
self.updated = datetime.
|
90
|
+
self.updated = datetime.now(timezone.utc)
|
87
91
|
|
88
92
|
return self
|
89
93
|
|
@@ -15,7 +15,7 @@
|
|
15
15
|
|
16
16
|
import base64
|
17
17
|
import json
|
18
|
-
from datetime import datetime
|
18
|
+
from datetime import datetime, timezone
|
19
19
|
from typing import TYPE_CHECKING, Any, Dict, List, Optional, cast
|
20
20
|
from uuid import UUID
|
21
21
|
|
@@ -227,7 +227,7 @@ class ServiceConnectorSchema(NamedSchema, table=True):
|
|
227
227
|
else:
|
228
228
|
setattr(self, field, value)
|
229
229
|
self.secret_id = secret_id
|
230
|
-
self.updated = datetime.
|
230
|
+
self.updated = datetime.now(timezone.utc)
|
231
231
|
return self
|
232
232
|
|
233
233
|
def to_model(
|
@@ -15,7 +15,7 @@
|
|
15
15
|
|
16
16
|
import base64
|
17
17
|
import json
|
18
|
-
from datetime import datetime
|
18
|
+
from datetime import datetime, timezone
|
19
19
|
from typing import Any, Optional
|
20
20
|
from uuid import UUID
|
21
21
|
|
@@ -210,7 +210,7 @@ class ServiceSchema(NamedSchema, table=True):
|
|
210
210
|
)
|
211
211
|
else:
|
212
212
|
setattr(self, field, value)
|
213
|
-
self.updated = datetime.
|
213
|
+
self.updated = datetime.now(timezone.utc)
|
214
214
|
return self
|
215
215
|
|
216
216
|
@classmethod
|
@@ -15,7 +15,7 @@
|
|
15
15
|
|
16
16
|
import base64
|
17
17
|
import json
|
18
|
-
from datetime import datetime
|
18
|
+
from datetime import datetime, timezone
|
19
19
|
from typing import TYPE_CHECKING, Any, List, Optional
|
20
20
|
from uuid import UUID
|
21
21
|
|
@@ -134,7 +134,7 @@ class StackSchema(NamedSchema, table=True):
|
|
134
134
|
else:
|
135
135
|
setattr(self, field, value)
|
136
136
|
|
137
|
-
self.updated = datetime.
|
137
|
+
self.updated = datetime.now(timezone.utc)
|
138
138
|
return self
|
139
139
|
|
140
140
|
def to_model(
|
@@ -14,7 +14,7 @@
|
|
14
14
|
"""SQLModel implementation of step run tables."""
|
15
15
|
|
16
16
|
import json
|
17
|
-
from datetime import datetime
|
17
|
+
from datetime import datetime, timezone
|
18
18
|
from typing import TYPE_CHECKING, Any, Dict, List, Optional
|
19
19
|
from uuid import UUID
|
20
20
|
|
@@ -358,7 +358,7 @@ class StepRunSchema(NamedSchema, RunMetadataInterface, table=True):
|
|
358
358
|
if value and self.model_version_id is None:
|
359
359
|
self.model_version_id = value
|
360
360
|
|
361
|
-
self.updated = datetime.
|
361
|
+
self.updated = datetime.now(timezone.utc)
|
362
362
|
|
363
363
|
return self
|
364
364
|
|
@@ -13,7 +13,7 @@
|
|
13
13
|
# permissions and limitations under the License.
|
14
14
|
"""SQLModel implementation of tag tables."""
|
15
15
|
|
16
|
-
from datetime import datetime
|
16
|
+
from datetime import datetime, timezone
|
17
17
|
from typing import Any, List
|
18
18
|
from uuid import UUID
|
19
19
|
|
@@ -103,7 +103,7 @@ class TagSchema(NamedSchema, table=True):
|
|
103
103
|
else:
|
104
104
|
setattr(self, field, value)
|
105
105
|
|
106
|
-
self.updated = datetime.
|
106
|
+
self.updated = datetime.now(timezone.utc)
|
107
107
|
return self
|
108
108
|
|
109
109
|
|
@@ -15,7 +15,7 @@
|
|
15
15
|
|
16
16
|
import base64
|
17
17
|
import json
|
18
|
-
from datetime import datetime
|
18
|
+
from datetime import datetime, timezone
|
19
19
|
from typing import Any, List, Optional, cast
|
20
20
|
from uuid import UUID
|
21
21
|
|
@@ -133,7 +133,7 @@ class TriggerSchema(NamedSchema, table=True):
|
|
133
133
|
else:
|
134
134
|
setattr(self, field, value)
|
135
135
|
|
136
|
-
self.updated = datetime.
|
136
|
+
self.updated = datetime.now(timezone.utc)
|
137
137
|
return self
|
138
138
|
|
139
139
|
@classmethod
|
@@ -14,7 +14,7 @@
|
|
14
14
|
"""SQLModel implementation of user tables."""
|
15
15
|
|
16
16
|
import json
|
17
|
-
from datetime import datetime
|
17
|
+
from datetime import datetime, timezone
|
18
18
|
from typing import TYPE_CHECKING, Any, List, Optional
|
19
19
|
from uuid import UUID
|
20
20
|
|
@@ -225,7 +225,7 @@ class UserSchema(NamedSchema, table=True):
|
|
225
225
|
else:
|
226
226
|
setattr(self, field, value)
|
227
227
|
|
228
|
-
self.updated = datetime.
|
228
|
+
self.updated = datetime.now(timezone.utc)
|
229
229
|
return self
|
230
230
|
|
231
231
|
def update_service_account(
|
@@ -245,7 +245,7 @@ class UserSchema(NamedSchema, table=True):
|
|
245
245
|
).items():
|
246
246
|
setattr(self, field, value)
|
247
247
|
|
248
|
-
self.updated = datetime.
|
248
|
+
self.updated = datetime.now(timezone.utc)
|
249
249
|
return self
|
250
250
|
|
251
251
|
def to_model(
|
@@ -13,7 +13,7 @@
|
|
13
13
|
# permissions and limitations under the License.
|
14
14
|
"""SQL Model Implementations for Workspaces."""
|
15
15
|
|
16
|
-
from datetime import datetime
|
16
|
+
from datetime import datetime, timezone
|
17
17
|
from typing import TYPE_CHECKING, Any, List
|
18
18
|
|
19
19
|
from sqlmodel import Relationship
|
@@ -168,7 +168,7 @@ class WorkspaceSchema(NamedSchema, table=True):
|
|
168
168
|
).items():
|
169
169
|
setattr(self, field, value)
|
170
170
|
|
171
|
-
self.updated = datetime.
|
171
|
+
self.updated = datetime.now(timezone.utc)
|
172
172
|
return self
|
173
173
|
|
174
174
|
def to_model(
|
@@ -8634,10 +8634,19 @@ class SqlZenStore(BaseZenStore):
|
|
8634
8634
|
ExecutionStatus.COMPLETED,
|
8635
8635
|
ExecutionStatus.FAILED,
|
8636
8636
|
}:
|
8637
|
-
run_update.end_time = datetime.
|
8637
|
+
run_update.end_time = datetime.now(timezone.utc)
|
8638
8638
|
if pipeline_run.start_time and isinstance(
|
8639
8639
|
pipeline_run.start_time, datetime
|
8640
8640
|
):
|
8641
|
+
# We need to ensure both datetimes are timezone-aware to avoid TypeError when subtracting
|
8642
|
+
# Now calculate the duration time
|
8643
|
+
if pipeline_run.start_time.tzinfo is None:
|
8644
|
+
pipeline_run.start_time = (
|
8645
|
+
pipeline_run.start_time.replace(
|
8646
|
+
tzinfo=timezone.utc
|
8647
|
+
)
|
8648
|
+
)
|
8649
|
+
|
8641
8650
|
duration_time = (
|
8642
8651
|
run_update.end_time - pipeline_run.start_time
|
8643
8652
|
)
|
{zenml_nightly-0.72.0.dev20250121.dist-info → zenml_nightly-0.73.0.dev20250124.dist-info}/METADATA
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.3
|
2
2
|
Name: zenml-nightly
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.73.0.dev20250124
|
4
4
|
Summary: ZenML: Write production-ready ML code.
|
5
5
|
License: Apache-2.0
|
6
6
|
Keywords: machine learning,production,pipeline,mlops,devops
|
@@ -107,7 +107,7 @@ Requires-Dist: pyyaml-include (<2.0) ; extra == "templates"
|
|
107
107
|
Requires-Dist: rich[jupyter] (>=12.0.0)
|
108
108
|
Requires-Dist: ruff (>=0.1.7) ; extra == "templates" or extra == "dev"
|
109
109
|
Requires-Dist: s3fs (>=2022.11.0) ; extra == "s3fs"
|
110
|
-
Requires-Dist: sagemaker (>=2.
|
110
|
+
Requires-Dist: sagemaker (>=2.199.0) ; extra == "sagemaker"
|
111
111
|
Requires-Dist: secure (>=0.3.0,<0.4.0) ; extra == "server"
|
112
112
|
Requires-Dist: setuptools
|
113
113
|
Requires-Dist: sqlalchemy (>=2.0.0,<3.0.0)
|
@@ -476,7 +476,7 @@ the Apache License Version 2.0.
|
|
476
476
|
<a href="https://github.com/zenml-io/zenml-projects">Projects Showcase</a>
|
477
477
|
<br />
|
478
478
|
<br />
|
479
|
-
🎉 Version 0.
|
479
|
+
🎉 Version 0.73.0 is out. Check out the release notes
|
480
480
|
<a href="https://github.com/zenml-io/zenml/releases">here</a>.
|
481
481
|
<br />
|
482
482
|
🖥️ Download our VS Code Extension <a href="https://marketplace.visualstudio.com/items?itemName=ZenML.zenml-vscode">here</a>.
|