|
5 | 5 |
|
6 | 6 | from __future__ import annotations |
7 | 7 |
|
8 | | -from datetime import datetime |
| 8 | +from datetime import datetime, UTC |
9 | 9 | from enum import StrEnum |
10 | 10 | from typing import Literal |
11 | 11 |
|
12 | | -from pydantic import BaseModel, Field |
13 | | -from typing_extensions import TypedDict |
| 12 | +from pydantic import AwareDatetime, BaseModel, AfterValidator, Field |
| 13 | +from typing_extensions import Annotated, TypedDict |
| 14 | + |
| 15 | + |
| 16 | +def good_utc_dt(v): |
| 17 | + """A validator that ensures that the aware datetime is in UTC timezone.""" |
| 18 | + return v.astimezone(UTC) |
| 19 | + |
| 20 | + |
| 21 | +DiracUTCDatetime = Annotated[AwareDatetime, AfterValidator(good_utc_dt)] |
14 | 22 |
|
15 | 23 |
|
16 | 24 | class ScalarSearchOperator(StrEnum): |
@@ -56,7 +64,7 @@ class InsertedJob(TypedDict): |
56 | 64 | JobID: int |
57 | 65 | Status: str |
58 | 66 | MinorStatus: str |
59 | | - TimeStamp: datetime |
| 67 | + TimeStamp: DiracUTCDatetime |
60 | 68 |
|
61 | 69 |
|
62 | 70 | class JobSummaryParams(BaseModel): |
@@ -101,7 +109,7 @@ class JobLoggingRecord(BaseModel): |
101 | 109 | status: JobStatus | Literal["idem"] |
102 | 110 | minor_status: str |
103 | 111 | application_status: str |
104 | | - date: datetime |
| 112 | + date: DiracUTCDatetime |
105 | 113 | source: str |
106 | 114 |
|
107 | 115 |
|
@@ -130,10 +138,10 @@ class SetJobStatusReturnSuccess(BaseModel): |
130 | 138 | Status: JobStatus | None = None |
131 | 139 | MinorStatus: str | None = None |
132 | 140 | ApplicationStatus: str | None = None |
133 | | - HeartBeatTime: datetime | None = None |
134 | | - StartExecTime: datetime | None = None |
135 | | - EndExecTime: datetime | None = None |
136 | | - LastUpdateTime: datetime | None = None |
| 141 | + HeartBeatTime: DiracUTCDatetime | None = None |
| 142 | + StartExecTime: DiracUTCDatetime | None = None |
| 143 | + EndExecTime: DiracUTCDatetime | None = None |
| 144 | + LastUpdateTime: DiracUTCDatetime | None = None |
137 | 145 |
|
138 | 146 | success: dict[int, SetJobStatusReturnSuccess] |
139 | 147 | failed: dict[int, dict[str, str]] |
|
0 commit comments