mirror of
https://github.com/RichieCahill/dotfiles.git
synced 2026-04-17 13:08:19 -04:00
61 lines
1.5 KiB
Python
61 lines
1.5 KiB
Python
"""Richie database ORM base."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from datetime import datetime
|
|
|
|
from sqlalchemy import BigInteger, DateTime, MetaData, SmallInteger, func
|
|
from sqlalchemy.ext.declarative import AbstractConcreteBase
|
|
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
|
|
|
|
from python.orm.common import NAMING_CONVENTION
|
|
|
|
|
|
class RichieBase(DeclarativeBase):
|
|
"""Base class for richie database ORM models."""
|
|
|
|
schema_name = "main"
|
|
|
|
metadata = MetaData(
|
|
schema=schema_name,
|
|
naming_convention=NAMING_CONVENTION,
|
|
)
|
|
|
|
|
|
class _TableMixin:
|
|
"""Shared timestamp columns for all table bases."""
|
|
|
|
created: Mapped[datetime] = mapped_column(
|
|
DateTime(timezone=True),
|
|
server_default=func.now(),
|
|
)
|
|
updated: Mapped[datetime] = mapped_column(
|
|
DateTime(timezone=True),
|
|
server_default=func.now(),
|
|
onupdate=func.now(),
|
|
)
|
|
|
|
|
|
class TableBaseSmall(_TableMixin, AbstractConcreteBase, RichieBase):
|
|
"""Table with SmallInteger primary key."""
|
|
|
|
__abstract__ = True
|
|
|
|
id: Mapped[int] = mapped_column(SmallInteger, primary_key=True)
|
|
|
|
|
|
class TableBase(_TableMixin, AbstractConcreteBase, RichieBase):
|
|
"""Table with Integer primary key."""
|
|
|
|
__abstract__ = True
|
|
|
|
id: Mapped[int] = mapped_column(primary_key=True)
|
|
|
|
|
|
class TableBaseBig(_TableMixin, AbstractConcreteBase, RichieBase):
|
|
"""Table with BigInteger primary key."""
|
|
|
|
__abstract__ = True
|
|
|
|
id: Mapped[int] = mapped_column(BigInteger, primary_key=True)
|