Source code for quackamollie.core.database.meta
# -*- coding: utf-8 -*-
""" Module for SQLAlchemy bases """
__all__ = ["Base", "TimeStampedModel"]
__author__ = "QuacktorAI"
__copyright__ = "Copyright 2024, Forge of Absurd Ducks"
__credits__ = ["QuacktorAI"]
from datetime import datetime
from sqlalchemy import MetaData, Column, DateTime
from sqlalchemy.orm import DeclarativeBase
from sqlalchemy.ext.asyncio import AsyncAttrs
NAMING_CONVENTION = {
"ix": "ix_%(column_0_label)s",
"uq": "uq_%(table_name)s_%(column_0_name)s",
"ck": "ck_%(table_name)s_%(constraint_name)s",
"fk": "fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s",
"pk": "pk_%(table_name)s",
}
[docs]
class Base(AsyncAttrs, DeclarativeBase):
""" Declarative base for SQLAlchemy Postgresql database with async access using `AsyncAttrs` """
metadata = MetaData(schema='quackamollie', naming_convention=NAMING_CONVENTION)
[docs]
class TimeStampedModel(Base):
""" Extension of the base model with creation and update dates columns """
__abstract__ = True
created_at = Column(DateTime, default=datetime.utcnow())
updated_at = Column(DateTime, onupdate=datetime.utcnow())