1- import datetime
1+ import datetime as dt
22from contextlib import suppress
33from typing import Annotated , Any
44
5+ from common_library .pydantic_validators import validate_legacy_datetime_str
56from dask_task_models_library .container_tasks .protocol import ContainerEnvsDict
67from models_library .api_schemas_directorv2 .services import NodeRequirements
78from models_library .basic_regex import SIMPLE_VERSION_RE
1617from models_library .services_resources import BootMode
1718from pydantic import (
1819 BaseModel ,
20+ BeforeValidator ,
1921 ByteSize ,
2022 ConfigDict ,
2123 Field ,
@@ -128,25 +130,25 @@ class CompTaskAtDB(BaseModel):
128130 description = "the hex digest of the resolved inputs +outputs hash at the time when the last outputs were generated" ,
129131 )
130132 image : Image
131- submit : datetime .datetime
132- start : datetime .datetime | None = Field ( default = None )
133- end : datetime .datetime | None = Field ( default = None )
133+ submit : dt .datetime
134+ start : dt .datetime | None = None
135+ end : dt .datetime | None = None
134136 state : RunningState
135- task_id : PositiveInt | None = Field ( default = None )
137+ task_id : PositiveInt | None = None
136138 internal_id : PositiveInt
137139 node_class : NodeClass
138- errors : list [ErrorDict ] | None = Field ( default = None )
140+ errors : list [ErrorDict ] | None = None
139141 progress : float | None = Field (
140142 default = None ,
141143 ge = 0.0 ,
142144 le = 1.0 ,
143145 description = "current progress of the task if available" ,
144146 )
145- last_heartbeat : datetime .datetime | None = Field (
147+ last_heartbeat : dt .datetime | None = Field (
146148 ..., description = "Last time the running task was checked by the backend"
147149 )
148- created : datetime .datetime
149- modified : datetime .datetime
150+ created : Annotated [ dt .datetime , BeforeValidator ( validate_legacy_datetime_str )]
151+ modified : Annotated [ dt .datetime , BeforeValidator ( validate_legacy_datetime_str )]
150152 # Additional information about price and hardware (ex. AWS EC2 instance type)
151153 pricing_info : dict | None
152154 hardware_info : HardwareInfo
@@ -165,9 +167,9 @@ def _convert_state_from_state_type_enum_if_needed(cls, v):
165167
166168 @field_validator ("start" , "end" , "submit" )
167169 @classmethod
168- def _ensure_utc (cls , v : datetime .datetime | None ) -> datetime .datetime | None :
170+ def _ensure_utc (cls , v : dt .datetime | None ) -> dt .datetime | None :
169171 if v is not None and v .tzinfo is None :
170- v = v .replace (tzinfo = datetime .UTC )
172+ v = v .replace (tzinfo = dt .UTC )
171173 return v
172174
173175 @field_validator ("hardware_info" , mode = "before" )
0 commit comments