majuna/app/models/types.py

25 lines
759 B
Python
Raw Normal View History

from datetime import datetime, timezone
from typing import Optional
from sqlalchemy.engine import Dialect
from sqlalchemy.types import TypeDecorator, DateTime
class AwareDateTime(TypeDecorator[datetime]):
impl = DateTime(timezone=True)
cache_ok = True
def process_bind_param(
self, value: Optional[datetime], dialect: Dialect
) -> Optional[datetime]:
if value is not None and value.tzinfo is None:
value = value.replace(tzinfo=timezone.utc)
return value
def process_result_value(
self, value: Optional[datetime], dialect: Dialect
) -> Optional[datetime]:
if value is not None and value.tzinfo is None:
value = value.replace(tzinfo=timezone.utc)
return value