from datetime import datetime from typing import Annotated from pydantic import BeforeValidator, Field, PlainSerializer from libs.datetime_utils import to_utc_timestamp def _require_datetime(value: object) -> datetime: if not isinstance(value, datetime): raise ValueError("Timestamp source must be a datetime") return value def _datetime_to_unix_seconds(value: datetime) -> int: return to_utc_timestamp(value) Timestamp = Annotated[ datetime, BeforeValidator(_require_datetime), PlainSerializer(_datetime_to_unix_seconds, return_type=int, when_used="json"), Field(..., description="Unix timestamp in seconds"), ]