77import uuid
88from enum import Enum
99from typing import Optional , Dict , Any , List
10- from datetime import datetime
10+ from datetime import datetime , timezone
1111from pydantic import BaseModel , Field , field_validator
1212import socket
1313import ipaddress
@@ -177,7 +177,7 @@ def validate_webhook_url(cls, v: Optional[str]) -> Optional[str]:
177177 run_id : Optional [str ] = Field (None )
178178
179179 # Timestamps
180- created_at : datetime = Field (default_factory = datetime .utcnow )
180+ created_at : datetime = Field (default_factory = lambda : datetime .now ( timezone . utc ) )
181181 started_at : Optional [datetime ] = Field (None )
182182 completed_at : Optional [datetime ] = Field (None )
183183
@@ -194,7 +194,7 @@ def duration_seconds(self) -> Optional[float]:
194194 """Calculate job duration."""
195195 if self .started_at is None :
196196 return None
197- end_time = self .completed_at or datetime .utcnow ( )
197+ end_time = self .completed_at or datetime .now ( timezone . utc )
198198 return (end_time - self .started_at ).total_seconds ()
199199
200200 @property
@@ -247,26 +247,26 @@ def to_result_response(self) -> JobResultResponse:
247247 def start (self ):
248248 """Mark job as started."""
249249 self .status = JobStatus .RUNNING
250- self .started_at = datetime .utcnow ( )
250+ self .started_at = datetime .now ( timezone . utc )
251251
252252 def succeed (self , result : Any , metrics : Optional [Dict [str , Any ]] = None ):
253253 """Mark job as succeeded."""
254254 self .status = JobStatus .SUCCEEDED
255255 self .result = result
256256 self .metrics = metrics
257- self .completed_at = datetime .utcnow ( )
257+ self .completed_at = datetime .now ( timezone . utc )
258258 self .progress_percentage = 100.0
259259
260260 def fail (self , error : str ):
261261 """Mark job as failed."""
262262 self .status = JobStatus .FAILED
263263 self .error = error
264- self .completed_at = datetime .utcnow ( )
264+ self .completed_at = datetime .now ( timezone . utc )
265265
266266 def cancel (self ):
267267 """Mark job as cancelled."""
268268 self .status = JobStatus .CANCELLED
269- self .completed_at = datetime .utcnow ( )
269+ self .completed_at = datetime .now ( timezone . utc )
270270 self ._cancel_requested = True
271271
272272 def update_progress (
0 commit comments