24 lines
759 B
Python
24 lines
759 B
Python
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
|