Skip to content

Commit a423428

Browse files
committed
⚡️ Use UTC for all timestamps
1 parent f1c9820 commit a423428

File tree

14 files changed

+72
-35
lines changed

14 files changed

+72
-35
lines changed

simvue/api/objects/alert/base.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,11 @@ def created(self) -> datetime.datetime | None:
137137
"""Retrieve created datetime for the alert"""
138138
_created: str | None = self._get_attribute("created")
139139
return (
140-
datetime.datetime.strptime(_created, DATETIME_FORMAT) if _created else None
140+
datetime.datetime.strptime(_created, DATETIME_FORMAT).astimezone(
141+
datetime.timezone.utc
142+
)
143+
if _created
144+
else None
141145
)
142146

143147
@abort.setter

simvue/api/objects/artifact/base.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,11 @@ def created(self) -> datetime.datetime | None:
249249
"""
250250
_created: str | None = self._get_attribute("created")
251251
return (
252-
datetime.datetime.strptime(_created, DATETIME_FORMAT) if _created else None
252+
datetime.datetime.strptime(_created, DATETIME_FORMAT).astimezone(
253+
datetime.timezone.utc
254+
)
255+
if _created
256+
else None
253257
)
254258

255259
@property

simvue/api/objects/events.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,10 @@
1414
import pydantic
1515

1616
from simvue.api.url import URL
17+
from simvue.utilities import simvue_timestamp
1718

1819
from .base import SimvueObject
19-
from simvue.models import DATETIME_FORMAT, EventSet
20+
from simvue.models import EventSet
2021
from simvue.api.request import get as sv_get, get_json_from_response
2122

2223
try:
@@ -98,8 +99,8 @@ def histogram(
9899
"value difference must be greater than window"
99100
)
100101
_url: URL = self._base_url / "histogram"
101-
_time_begin: str = timestamp_begin.strftime(DATETIME_FORMAT)
102-
_time_end: str = timestamp_end.strftime(DATETIME_FORMAT)
102+
_time_begin: str = simvue_timestamp(timestamp_begin)
103+
_time_end: str = simvue_timestamp(timestamp_end)
103104
_response = sv_get(
104105
url=_url,
105106
headers=self._headers,

simvue/api/objects/folder.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,11 @@ def created(self) -> datetime.datetime | None:
226226
"""Retrieve created datetime for the run"""
227227
_created: str | None = self._get_attribute("created")
228228
return (
229-
datetime.datetime.strptime(_created, DATETIME_FORMAT) if _created else None
229+
datetime.datetime.strptime(_created, DATETIME_FORMAT).astimezone(
230+
datetime.timezone.utc
231+
)
232+
if _created
233+
else None
230234
)
231235

232236

simvue/api/objects/run.py

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,10 @@
1212
import typing
1313
import pydantic
1414
import datetime
15-
import time
1615
import json
1716

17+
from simvue.utilities import simvue_timestamp
18+
1819
try:
1920
from typing import Self
2021
except ImportError:
@@ -451,21 +452,29 @@ def created(self) -> datetime.datetime | None:
451452
"""
452453
_created: str | None = self._get_attribute("created")
453454
return (
454-
datetime.datetime.strptime(_created, DATETIME_FORMAT) if _created else None
455+
datetime.datetime.strptime(_created, DATETIME_FORMAT).astimezone(
456+
datetime.timezone.utc
457+
)
458+
if _created
459+
else None
455460
)
456461

457462
@created.setter
458463
@write_only
459464
@pydantic.validate_call
460465
def created(self, created: datetime.datetime) -> None:
461-
self._staging["created"] = created.strftime(DATETIME_FORMAT)
466+
self._staging["created"] = simvue_timestamp(created)
462467

463468
@property
464469
@staging_check
465470
def runtime(self) -> datetime.datetime | None:
466471
"""Retrieve execution time for the run"""
467472
_runtime: str | None = self._get_attribute("runtime")
468-
return time.strptime(_runtime, "%H:%M:%S.%f") if _runtime else None
473+
return (
474+
_runtime.strptime(_runtime, "%H:%M:%S.%f").astimezone(datetime.timezone.utc)
475+
if _runtime
476+
else None
477+
)
469478

470479
@property
471480
@staging_check
@@ -478,14 +487,18 @@ def started(self) -> datetime.datetime | None:
478487
"""
479488
_started: str | None = self._get_attribute("started")
480489
return (
481-
datetime.datetime.strptime(_started, DATETIME_FORMAT) if _started else None
490+
datetime.datetime.strptime(_started, DATETIME_FORMAT).astimezone(
491+
datetime.timezone.utc
492+
)
493+
if _started
494+
else None
482495
)
483496

484497
@started.setter
485498
@write_only
486499
@pydantic.validate_call
487500
def started(self, started: datetime.datetime) -> None:
488-
self._staging["started"] = started.strftime(DATETIME_FORMAT)
501+
self._staging["started"] = simvue_timestamp(started)
489502

490503
@property
491504
@staging_check
@@ -498,14 +511,18 @@ def endtime(self) -> datetime.datetime | None:
498511
"""
499512
_endtime: str | None = self._get_attribute("endtime")
500513
return (
501-
datetime.datetime.strptime(_endtime, DATETIME_FORMAT) if _endtime else None
514+
datetime.datetime.strptime(_endtime, DATETIME_FORMAT).astimezone(
515+
datetime.timezone.utc
516+
)
517+
if _endtime
518+
else None
502519
)
503520

504521
@endtime.setter
505522
@write_only
506523
@pydantic.validate_call
507524
def endtime(self, endtime: datetime.datetime) -> None:
508-
self._staging["endtime"] = endtime.strftime(DATETIME_FORMAT)
525+
self._staging["endtime"] = simvue_timestamp(endtime)
509526

510527
@property
511528
def metrics(

simvue/api/objects/storage/base.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,5 +101,9 @@ def created(self) -> datetime.datetime | None:
101101
"""Retrieve created datetime for the artifact"""
102102
_created: str | None = self._get_attribute("created")
103103
return (
104-
datetime.datetime.strptime(_created, DATETIME_FORMAT) if _created else None
104+
datetime.datetime.strptime(_created, DATETIME_FORMAT).astimezone(
105+
datetime.timezone.utc
106+
)
107+
if _created
108+
else None
105109
)

simvue/api/objects/tag.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,11 @@ def created(self) -> datetime.datetime | None:
100100
"""Retrieve created datetime for the run"""
101101
_created: str | None = self._get_attribute("created")
102102
return (
103-
datetime.datetime.strptime(_created, DATETIME_FORMAT) if _created else None
103+
datetime.datetime.strptime(_created, DATETIME_FORMAT).astimezone(
104+
datetime.timezone.utc
105+
)
106+
if _created
107+
else None
104108
)
105109

106110
@classmethod

simvue/eco/emissions_monitor.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ def outdated(self) -> bool:
6464
_now: datetime.datetime = datetime.datetime.now()
6565
_latest_time: datetime.datetime = datetime.datetime.strptime(
6666
self._local_data["last_updated"], TIME_FORMAT
67-
)
67+
).astimezone(datetime.timezone.utc)
6868
return (_now - _latest_time).seconds > self.intensity_refresh_interval
6969

7070
def _load_local_data(self) -> dict[str, str | dict[str, str | float]] | None:

simvue/models.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ class GridMetricSet(pydantic.BaseModel):
6262
@classmethod
6363
def timestamp_str(cls, value: str) -> str:
6464
try:
65-
datetime.datetime.strptime(value, DATETIME_FORMAT)
65+
_ = datetime.datetime.strptime(value, DATETIME_FORMAT)
6666
except ValueError as e:
6767
raise AssertionError(
6868
f"Invalid timestamp, expected form '{DATETIME_FORMAT}'"
@@ -85,7 +85,7 @@ class EventSet(pydantic.BaseModel):
8585
@classmethod
8686
def timestamp_str(cls, value: str) -> str:
8787
try:
88-
datetime.datetime.strptime(value, DATETIME_FORMAT)
88+
_ = datetime.datetime.strptime(value, DATETIME_FORMAT)
8989
except ValueError as e:
9090
raise AssertionError(
9191
f"Invalid timestamp, expected form '{DATETIME_FORMAT}'"

simvue/utilities.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -377,7 +377,7 @@ def validate_timestamp(timestamp):
377377
Validate a user-provided timestamp
378378
"""
379379
try:
380-
datetime.datetime.strptime(timestamp, DATETIME_FORMAT)
380+
_ = datetime.datetime.strptime(timestamp, DATETIME_FORMAT)
381381
except ValueError:
382382
return False
383383

@@ -399,7 +399,8 @@ def simvue_timestamp(date_time: datetime.datetime | None = None) -> str:
399399
"""
400400
if not date_time:
401401
date_time = datetime.datetime.now(timezone.utc)
402-
return date_time.strftime(DATETIME_FORMAT)
402+
_utc_datetime = date_time.astimezone(datetime.timezone.utc)
403+
return _utc_datetime.strftime(DATETIME_FORMAT)
403404

404405

405406
@functools.lru_cache

0 commit comments

Comments
 (0)