zenml-nightly 0.72.0.dev20250120__py3-none-any.whl → 0.73.0.dev20250123__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/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/constants.py +5 -0
- zenml/event_hub/base_event_hub.py +2 -2
- zenml/integrations/airflow/orchestrators/airflow_orchestrator.py +4 -2
- zenml/integrations/airflow/orchestrators/dag_generator.py +16 -0
- 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/kubernetes/orchestrators/kube_utils.py +2 -2
- zenml/integrations/mlflow/experiment_trackers/mlflow_experiment_tracker.py +0 -1
- zenml/integrations/slack/__init__.py +1 -2
- zenml/integrations/slack/alerters/slack_alerter.py +119 -61
- zenml/integrations/slack/flavors/slack_alerter_flavor.py +18 -8
- zenml/integrations/whylogs/data_validators/whylogs_data_validator.py +3 -1
- zenml/materializers/built_in_materializer.py +17 -2
- zenml/models/v2/core/api_key.py +2 -2
- zenml/orchestrators/publish_utils.py +4 -4
- zenml/orchestrators/step_launcher.py +3 -3
- zenml/orchestrators/step_run_utils.py +2 -2
- zenml/pipelines/pipeline_definition.py +1 -1
- zenml/pipelines/run_utils.py +2 -2
- zenml/service_connectors/service_connector.py +2 -2
- zenml/stack/stack.py +3 -3
- zenml/stack_deployments/stack_deployment.py +5 -0
- zenml/utils/git_utils.py +1 -1
- zenml/utils/string_utils.py +2 -2
- zenml/utils/yaml_utils.py +3 -4
- 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_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 +3 -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 +2 -2
- 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.dev20250120.dist-info → zenml_nightly-0.73.0.dev20250123.dist-info}/METADATA +2 -2
- {zenml_nightly-0.72.0.dev20250120.dist-info → zenml_nightly-0.73.0.dev20250123.dist-info}/RECORD +159 -155
- 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.dev20250120.dist-info → zenml_nightly-0.73.0.dev20250123.dist-info}/LICENSE +0 -0
- {zenml_nightly-0.72.0.dev20250120.dist-info → zenml_nightly-0.73.0.dev20250123.dist-info}/WHEEL +0 -0
- {zenml_nightly-0.72.0.dev20250120.dist-info → zenml_nightly-0.73.0.dev20250123.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
|
|
@@ -430,7 +430,7 @@ class PipelineRunSchema(NamedSchema, RunMetadataInterface, table=True):
|
|
430
430
|
if run_update.model_version_id and self.model_version_id is None:
|
431
431
|
self.model_version_id = run_update.model_version_id
|
432
432
|
|
433
|
-
self.updated = datetime.
|
433
|
+
self.updated = datetime.now(timezone.utc)
|
434
434
|
return self
|
435
435
|
|
436
436
|
def update_placeholder(
|
@@ -471,7 +471,7 @@ class PipelineRunSchema(NamedSchema, RunMetadataInterface, table=True):
|
|
471
471
|
self.orchestrator_environment = orchestrator_environment
|
472
472
|
self.status = request.status.value
|
473
473
|
|
474
|
-
self.updated = datetime.
|
474
|
+
self.updated = datetime.now(timezone.utc)
|
475
475
|
|
476
476
|
return self
|
477
477
|
|
@@ -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,7 +13,7 @@
|
|
13
13
|
# permissions and limitations under the License.
|
14
14
|
"""SQL Model Implementations for Pipeline Schedules."""
|
15
15
|
|
16
|
-
from datetime import datetime, timedelta
|
16
|
+
from datetime import datetime, timedelta, timezone
|
17
17
|
from typing import TYPE_CHECKING, Any, Optional
|
18
18
|
from uuid import UUID
|
19
19
|
|
@@ -153,7 +153,7 @@ class ScheduleSchema(NamedSchema, table=True):
|
|
153
153
|
)
|
154
154
|
if schedule_update.catchup is not None:
|
155
155
|
self.catchup = schedule_update.catchup
|
156
|
-
self.updated = datetime.
|
156
|
+
self.updated = datetime.now(timezone.utc)
|
157
157
|
return self
|
158
158
|
|
159
159
|
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, 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.dev20250120.dist-info → zenml_nightly-0.73.0.dev20250123.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.dev20250123
|
4
4
|
Summary: ZenML: Write production-ready ML code.
|
5
5
|
License: Apache-2.0
|
6
6
|
Keywords: machine learning,production,pipeline,mlops,devops
|
@@ -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>.
|