| from __future__ import annotations |
| import datetime |
| from typing import Annotated |
|
|
| from sqlalchemy import BigInteger, text |
| from sqlalchemy.orm import DeclarativeBase, mapped_column |
|
|
| int_pk = Annotated[int, mapped_column(primary_key=True, unique=True, autoincrement=False)] |
| big_int_pk = Annotated[int, mapped_column(primary_key=True, unique=True, autoincrement=False, type_=BigInteger)] |
| created_at = Annotated[datetime.datetime, mapped_column(server_default=text("TIMEZONE('utc', now())"))] |
|
|
|
|
| class Base(DeclarativeBase): |
| repr_cols_num = 3 |
| repr_cols: tuple[str, ...] = () |
|
|
| def __repr__(self) -> str: |
| cols = [ |
| f"{col}={getattr(self, col)}" |
| for idx, col in enumerate(self.__table__.columns.keys()) |
| if col in self.repr_cols or idx < self.repr_cols_num |
| ] |
| return f"<{self.__class__.__name__} {', '.join(cols)}>" |
|
|