|
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