Source code for aws_session_recorder.lib.schema.base

from sqlalchemy.ext.declarative import DeclarativeMeta, declarative_base  # type: ignore
from datetime import datetime, timezone
import sqlalchemy as sa

Base: DeclarativeMeta = declarative_base()


# Running on sqlite we'll hit timezone issues, utc not being used by the db.
# See https://mike.depalatis.net/blog/sqlalchemy-timestamps.html for more info.
[docs]class TimeStamp(sa.types.TypeDecorator): impl = sa.types.DateTime LOCAL_TIMEZONE = datetime.utcnow().astimezone().tzinfo
[docs] def process_bind_param(self, value: datetime, dialect): if value is None: return None if value.tzinfo is None: value = value.astimezone(self.LOCAL_TIMEZONE) return value.astimezone(timezone.utc)
[docs] def process_result_value(self, value, dialect): if value is None: return None if value.tzinfo is None: return value.replace(tzinfo=timezone.utc) return value.astimezone(timezone.utc)