zenml-nightly 0.73.0.dev20250124__py3-none-any.whl → 0.73.0.dev20250125__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. zenml/VERSION +1 -1
  2. zenml/analytics/context.py +2 -6
  3. zenml/cli/annotator.py +1 -1
  4. zenml/cli/login.py +15 -6
  5. zenml/cli/service_connectors.py +5 -5
  6. zenml/cli/stack.py +2 -2
  7. zenml/cli/utils.py +2 -54
  8. zenml/config/pipeline_configurations.py +3 -2
  9. zenml/config/schedule.py +0 -24
  10. zenml/event_hub/base_event_hub.py +3 -4
  11. zenml/integrations/airflow/orchestrators/airflow_orchestrator.py +3 -4
  12. zenml/integrations/aws/orchestrators/sagemaker_orchestrator.py +11 -9
  13. zenml/integrations/aws/service_connectors/aws_service_connector.py +8 -13
  14. zenml/integrations/azure/service_connectors/azure_service_connector.py +4 -10
  15. zenml/integrations/gcp/service_connectors/gcp_service_connector.py +3 -3
  16. zenml/integrations/kubernetes/orchestrators/kube_utils.py +3 -3
  17. zenml/integrations/kubernetes/service_connectors/kubernetes_service_connector.py +6 -2
  18. zenml/integrations/whylogs/data_validators/whylogs_data_validator.py +2 -3
  19. zenml/logging/step_logging.py +7 -7
  20. zenml/login/credentials.py +6 -5
  21. zenml/login/credentials_store.py +4 -3
  22. zenml/models/v2/core/api_key.py +5 -2
  23. zenml/models/v2/core/schedule.py +3 -2
  24. zenml/orchestrators/publish_utils.py +4 -4
  25. zenml/orchestrators/step_launcher.py +3 -3
  26. zenml/orchestrators/step_run_utils.py +2 -2
  27. zenml/pipelines/run_utils.py +2 -2
  28. zenml/service_connectors/service_connector.py +7 -4
  29. zenml/stack/stack.py +5 -4
  30. zenml/stack_deployments/stack_deployment.py +2 -3
  31. zenml/utils/string_utils.py +2 -2
  32. zenml/utils/time_utils.py +138 -0
  33. zenml/zen_server/auth.py +8 -9
  34. zenml/zen_server/cloud_utils.py +4 -6
  35. zenml/zen_server/routers/devices_endpoints.py +2 -4
  36. zenml/zen_server/zen_server_api.py +9 -8
  37. zenml/zen_stores/migrations/versions/25155145c545_separate_actions_and_triggers.py +3 -2
  38. zenml/zen_stores/migrations/versions/3dcc5d20e82f_add_last_user_activity.py +3 -3
  39. zenml/zen_stores/migrations/versions/46506f72f0ed_add_server_settings.py +3 -2
  40. zenml/zen_stores/migrations/versions/5994f9ad0489_introduce_role_permissions.py +10 -7
  41. zenml/zen_stores/migrations/versions/7500f434b71c_remove_shared_columns.py +3 -2
  42. zenml/zen_stores/migrations/versions/a91762e6be36_artifact_version_table.py +5 -3
  43. zenml/zen_stores/schemas/action_schemas.py +2 -2
  44. zenml/zen_stores/schemas/api_key_schemas.py +5 -4
  45. zenml/zen_stores/schemas/artifact_schemas.py +3 -3
  46. zenml/zen_stores/schemas/base_schemas.py +5 -7
  47. zenml/zen_stores/schemas/code_repository_schemas.py +2 -2
  48. zenml/zen_stores/schemas/component_schemas.py +2 -2
  49. zenml/zen_stores/schemas/device_schemas.py +5 -4
  50. zenml/zen_stores/schemas/event_source_schemas.py +2 -2
  51. zenml/zen_stores/schemas/flavor_schemas.py +2 -2
  52. zenml/zen_stores/schemas/model_schemas.py +3 -3
  53. zenml/zen_stores/schemas/pipeline_run_schemas.py +4 -3
  54. zenml/zen_stores/schemas/pipeline_schemas.py +2 -2
  55. zenml/zen_stores/schemas/run_template_schemas.py +2 -2
  56. zenml/zen_stores/schemas/schedule_schema.py +3 -2
  57. zenml/zen_stores/schemas/secret_schemas.py +2 -2
  58. zenml/zen_stores/schemas/server_settings_schemas.py +6 -9
  59. zenml/zen_stores/schemas/service_connector_schemas.py +3 -2
  60. zenml/zen_stores/schemas/service_schemas.py +2 -2
  61. zenml/zen_stores/schemas/stack_schemas.py +2 -2
  62. zenml/zen_stores/schemas/step_run_schemas.py +3 -2
  63. zenml/zen_stores/schemas/tag_schemas.py +2 -2
  64. zenml/zen_stores/schemas/trigger_schemas.py +2 -2
  65. zenml/zen_stores/schemas/user_schemas.py +3 -3
  66. zenml/zen_stores/schemas/workspace_schemas.py +2 -2
  67. zenml/zen_stores/sql_zen_store.py +6 -14
  68. {zenml_nightly-0.73.0.dev20250124.dist-info → zenml_nightly-0.73.0.dev20250125.dist-info}/METADATA +1 -1
  69. {zenml_nightly-0.73.0.dev20250124.dist-info → zenml_nightly-0.73.0.dev20250125.dist-info}/RECORD +72 -71
  70. {zenml_nightly-0.73.0.dev20250124.dist-info → zenml_nightly-0.73.0.dev20250125.dist-info}/LICENSE +0 -0
  71. {zenml_nightly-0.73.0.dev20250124.dist-info → zenml_nightly-0.73.0.dev20250125.dist-info}/WHEEL +0 -0
  72. {zenml_nightly-0.73.0.dev20250124.dist-info → zenml_nightly-0.73.0.dev20250125.dist-info}/entry_points.txt +0 -0
@@ -15,7 +15,6 @@
15
15
 
16
16
  import base64
17
17
  import json
18
- from datetime import datetime, timezone
19
18
  from typing import Any, Dict, Optional, cast
20
19
  from uuid import UUID
21
20
 
@@ -35,6 +34,7 @@ from zenml.models import (
35
34
  SecretResponseMetadata,
36
35
  SecretUpdate,
37
36
  )
37
+ from zenml.utils.time_utils import utc_now
38
38
  from zenml.zen_stores.schemas.base_schemas import NamedSchema
39
39
  from zenml.zen_stores.schemas.schema_utils import build_foreign_key_field
40
40
  from zenml.zen_stores.schemas.user_schemas import UserSchema
@@ -209,7 +209,7 @@ class SecretSchema(NamedSchema, table=True):
209
209
  else:
210
210
  setattr(self, field, value)
211
211
 
212
- self.updated = datetime.now(timezone.utc)
212
+ self.updated = utc_now()
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, timezone
17
+ from datetime import datetime
18
18
  from typing import Any, Optional, Set
19
19
  from uuid import UUID
20
20
 
@@ -27,6 +27,7 @@ from zenml.models import (
27
27
  ServerSettingsResponseResources,
28
28
  ServerSettingsUpdate,
29
29
  )
30
+ from zenml.utils.time_utils import utc_now
30
31
 
31
32
 
32
33
  class ServerSettingsSchema(SQLModel, table=True):
@@ -42,12 +43,8 @@ class ServerSettingsSchema(SQLModel, table=True):
42
43
  display_announcements: Optional[bool] = Field(nullable=True)
43
44
  display_updates: Optional[bool] = Field(nullable=True)
44
45
  onboarding_state: Optional[str] = Field(nullable=True)
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
- )
46
+ last_user_activity: datetime = Field(default_factory=utc_now)
47
+ updated: datetime = Field(default_factory=utc_now)
51
48
 
52
49
  def update(
53
50
  self, settings_update: ServerSettingsUpdate
@@ -67,7 +64,7 @@ class ServerSettingsSchema(SQLModel, table=True):
67
64
  if hasattr(self, field):
68
65
  setattr(self, field, value)
69
66
 
70
- self.updated = datetime.now(timezone.utc)
67
+ self.updated = utc_now()
71
68
 
72
69
  return self
73
70
 
@@ -87,7 +84,7 @@ class ServerSettingsSchema(SQLModel, table=True):
87
84
  )
88
85
  new_state = old_state.union(completed_steps)
89
86
  self.onboarding_state = json.dumps(list(new_state))
90
- self.updated = datetime.now(timezone.utc)
87
+ self.updated = utc_now()
91
88
 
92
89
  return self
93
90
 
@@ -15,7 +15,7 @@
15
15
 
16
16
  import base64
17
17
  import json
18
- from datetime import datetime, timezone
18
+ from datetime import datetime
19
19
  from typing import TYPE_CHECKING, Any, Dict, List, Optional, cast
20
20
  from uuid import UUID
21
21
 
@@ -29,6 +29,7 @@ from zenml.models import (
29
29
  ServiceConnectorResponseMetadata,
30
30
  ServiceConnectorUpdate,
31
31
  )
32
+ from zenml.utils.time_utils import utc_now
32
33
  from zenml.zen_stores.schemas.base_schemas import NamedSchema
33
34
  from zenml.zen_stores.schemas.schema_utils import build_foreign_key_field
34
35
  from zenml.zen_stores.schemas.user_schemas import UserSchema
@@ -227,7 +228,7 @@ class ServiceConnectorSchema(NamedSchema, table=True):
227
228
  else:
228
229
  setattr(self, field, value)
229
230
  self.secret_id = secret_id
230
- self.updated = datetime.now(timezone.utc)
231
+ self.updated = utc_now()
231
232
  return self
232
233
 
233
234
  def to_model(
@@ -15,7 +15,6 @@
15
15
 
16
16
  import base64
17
17
  import json
18
- from datetime import datetime, timezone
19
18
  from typing import Any, Optional
20
19
  from uuid import UUID
21
20
 
@@ -32,6 +31,7 @@ from zenml.models.v2.core.service import (
32
31
  ServiceUpdate,
33
32
  )
34
33
  from zenml.utils.dict_utils import dict_to_bytes
34
+ from zenml.utils.time_utils import utc_now
35
35
  from zenml.zen_stores.schemas.base_schemas import NamedSchema
36
36
  from zenml.zen_stores.schemas.model_schemas import ModelVersionSchema
37
37
  from zenml.zen_stores.schemas.pipeline_run_schemas import PipelineRunSchema
@@ -210,7 +210,7 @@ class ServiceSchema(NamedSchema, table=True):
210
210
  )
211
211
  else:
212
212
  setattr(self, field, value)
213
- self.updated = datetime.now(timezone.utc)
213
+ self.updated = utc_now()
214
214
  return self
215
215
 
216
216
  @classmethod
@@ -15,7 +15,6 @@
15
15
 
16
16
  import base64
17
17
  import json
18
- from datetime import datetime, timezone
19
18
  from typing import TYPE_CHECKING, Any, List, Optional
20
19
  from uuid import UUID
21
20
 
@@ -27,6 +26,7 @@ from zenml.models import (
27
26
  StackResponseMetadata,
28
27
  StackUpdate,
29
28
  )
29
+ from zenml.utils.time_utils import utc_now
30
30
  from zenml.zen_stores.schemas.base_schemas import NamedSchema
31
31
  from zenml.zen_stores.schemas.schema_utils import build_foreign_key_field
32
32
  from zenml.zen_stores.schemas.user_schemas import UserSchema
@@ -134,7 +134,7 @@ class StackSchema(NamedSchema, table=True):
134
134
  else:
135
135
  setattr(self, field, value)
136
136
 
137
- self.updated = datetime.now(timezone.utc)
137
+ self.updated = utc_now()
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, timezone
17
+ from datetime import datetime
18
18
  from typing import TYPE_CHECKING, Any, Dict, List, Optional
19
19
  from uuid import UUID
20
20
 
@@ -43,6 +43,7 @@ from zenml.models.v2.core.step_run import (
43
43
  StepRunInputResponse,
44
44
  StepRunResponseResources,
45
45
  )
46
+ from zenml.utils.time_utils import utc_now
46
47
  from zenml.zen_stores.schemas.base_schemas import NamedSchema
47
48
  from zenml.zen_stores.schemas.constants import MODEL_VERSION_TABLENAME
48
49
  from zenml.zen_stores.schemas.pipeline_deployment_schemas import (
@@ -358,7 +359,7 @@ class StepRunSchema(NamedSchema, RunMetadataInterface, table=True):
358
359
  if value and self.model_version_id is None:
359
360
  self.model_version_id = value
360
361
 
361
- self.updated = datetime.now(timezone.utc)
362
+ self.updated = utc_now()
362
363
 
363
364
  return self
364
365
 
@@ -13,7 +13,6 @@
13
13
  # permissions and limitations under the License.
14
14
  """SQLModel implementation of tag tables."""
15
15
 
16
- from datetime import datetime, timezone
17
16
  from typing import Any, List
18
17
  from uuid import UUID
19
18
 
@@ -30,6 +29,7 @@ from zenml.models import (
30
29
  TagResponseBody,
31
30
  TagUpdate,
32
31
  )
32
+ from zenml.utils.time_utils import utc_now
33
33
  from zenml.zen_stores.schemas.base_schemas import BaseSchema, NamedSchema
34
34
  from zenml.zen_stores.schemas.schema_utils import build_foreign_key_field
35
35
 
@@ -103,7 +103,7 @@ class TagSchema(NamedSchema, table=True):
103
103
  else:
104
104
  setattr(self, field, value)
105
105
 
106
- self.updated = datetime.now(timezone.utc)
106
+ self.updated = utc_now()
107
107
  return self
108
108
 
109
109
 
@@ -15,7 +15,6 @@
15
15
 
16
16
  import base64
17
17
  import json
18
- from datetime import datetime, timezone
19
18
  from typing import Any, List, Optional, cast
20
19
  from uuid import UUID
21
20
 
@@ -38,6 +37,7 @@ from zenml.models import (
38
37
  TriggerUpdate,
39
38
  )
40
39
  from zenml.utils.json_utils import pydantic_encoder
40
+ from zenml.utils.time_utils import utc_now
41
41
  from zenml.zen_stores.schemas.action_schemas import ActionSchema
42
42
  from zenml.zen_stores.schemas.base_schemas import BaseSchema, NamedSchema
43
43
  from zenml.zen_stores.schemas.event_source_schemas import EventSourceSchema
@@ -133,7 +133,7 @@ class TriggerSchema(NamedSchema, table=True):
133
133
  else:
134
134
  setattr(self, field, value)
135
135
 
136
- self.updated = datetime.now(timezone.utc)
136
+ self.updated = utc_now()
137
137
  return self
138
138
 
139
139
  @classmethod
@@ -14,7 +14,6 @@
14
14
  """SQLModel implementation of user tables."""
15
15
 
16
16
  import json
17
- from datetime import datetime, timezone
18
17
  from typing import TYPE_CHECKING, Any, List, Optional
19
18
  from uuid import UUID
20
19
 
@@ -33,6 +32,7 @@ from zenml.models import (
33
32
  UserResponseMetadata,
34
33
  UserUpdate,
35
34
  )
35
+ from zenml.utils.time_utils import utc_now
36
36
  from zenml.zen_stores.schemas.base_schemas import NamedSchema
37
37
 
38
38
  if TYPE_CHECKING:
@@ -225,7 +225,7 @@ class UserSchema(NamedSchema, table=True):
225
225
  else:
226
226
  setattr(self, field, value)
227
227
 
228
- self.updated = datetime.now(timezone.utc)
228
+ self.updated = utc_now()
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.now(timezone.utc)
248
+ self.updated = utc_now()
249
249
  return self
250
250
 
251
251
  def to_model(
@@ -13,7 +13,6 @@
13
13
  # permissions and limitations under the License.
14
14
  """SQL Model Implementations for Workspaces."""
15
15
 
16
- from datetime import datetime, timezone
17
16
  from typing import TYPE_CHECKING, Any, List
18
17
 
19
18
  from sqlmodel import Relationship
@@ -25,6 +24,7 @@ from zenml.models import (
25
24
  WorkspaceResponseMetadata,
26
25
  WorkspaceUpdate,
27
26
  )
27
+ from zenml.utils.time_utils import utc_now
28
28
  from zenml.zen_stores.schemas.base_schemas import NamedSchema
29
29
 
30
30
  if TYPE_CHECKING:
@@ -168,7 +168,7 @@ class WorkspaceSchema(NamedSchema, table=True):
168
168
  ).items():
169
169
  setattr(self, field, value)
170
170
 
171
- self.updated = datetime.now(timezone.utc)
171
+ self.updated = utc_now()
172
172
  return self
173
173
 
174
174
  def to_model(
@@ -22,7 +22,7 @@ import random
22
22
  import re
23
23
  import sys
24
24
  import time
25
- from datetime import datetime, timezone
25
+ from datetime import datetime
26
26
  from functools import lru_cache
27
27
  from pathlib import Path
28
28
  from typing import (
@@ -309,6 +309,7 @@ from zenml.utils.string_utils import (
309
309
  random_str,
310
310
  validate_name,
311
311
  )
312
+ from zenml.utils.time_utils import utc_now
312
313
  from zenml.zen_stores import template_utils
313
314
  from zenml.zen_stores.base_zen_store import (
314
315
  BaseZenStore,
@@ -795,7 +796,7 @@ class SqlZenStoreConfiguration(StoreConfiguration):
795
796
  logger.warning(
796
797
  f"Database SSL setting `{key}` is not a file. "
797
798
  )
798
- sqlalchemy_ssl_args[key.lstrip("ssl_")] = ssl_setting
799
+ sqlalchemy_ssl_args[key.removeprefix("ssl_")] = ssl_setting
799
800
  if len(sqlalchemy_ssl_args) > 0:
800
801
  sqlalchemy_ssl_args["check_hostname"] = (
801
802
  self.ssl_verify_server_cert
@@ -1743,7 +1744,7 @@ class SqlZenStore(BaseZenStore):
1743
1744
  settings = self._get_server_settings(session=session)
1744
1745
 
1745
1746
  if last_user_activity < settings.last_user_activity.replace(
1746
- tzinfo=timezone.utc
1747
+ tzinfo=None
1747
1748
  ):
1748
1749
  return
1749
1750
 
@@ -4048,7 +4049,7 @@ class SqlZenStore(BaseZenStore):
4048
4049
  # Delete devices that have expired
4049
4050
  if (
4050
4051
  device.expires is not None
4051
- and device.expires < datetime.now()
4052
+ and device.expires < utc_now()
4052
4053
  and device.user_id is None
4053
4054
  ):
4054
4055
  session.delete(device)
@@ -8634,19 +8635,10 @@ class SqlZenStore(BaseZenStore):
8634
8635
  ExecutionStatus.COMPLETED,
8635
8636
  ExecutionStatus.FAILED,
8636
8637
  }:
8637
- run_update.end_time = datetime.now(timezone.utc)
8638
+ run_update.end_time = utc_now()
8638
8639
  if pipeline_run.start_time and isinstance(
8639
8640
  pipeline_run.start_time, datetime
8640
8641
  ):
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
-
8650
8642
  duration_time = (
8651
8643
  run_update.end_time - pipeline_run.start_time
8652
8644
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: zenml-nightly
3
- Version: 0.73.0.dev20250124
3
+ Version: 0.73.0.dev20250125
4
4
  Summary: ZenML: Write production-ready ML code.
5
5
  License: Apache-2.0
6
6
  Keywords: machine learning,production,pipeline,mlops,devops