"""Trackable mixin.""" from db import db from sqlalchemy.ext.declarative import declared_attr from sqlalchemy.sql import func class TrackableMixin: """Track create/edit dates/users for tables.""" created_at = db.Column(db.TIMESTAMP(timezone=True), nullable=False, server_default=func.current_timestamp()) updated_at = db.Column(db.TIMESTAMP(timezone=True), nullable=False, server_default=func.current_timestamp()) @declared_attr def create_user_id(cls): return db.Column(db.Integer, db.ForeignKey("User.id"), nullable=False) @declared_attr def edit_user_id(cls): return db.Column(db.Integer, db.ForeignKey("User.id"), nullable=False) @declared_attr def create_user(cls): return db.relationship("User", foreign_keys=[cls.create_user_id]) @declared_attr def edit_user(cls): return db.relationship("User", foreign_keys=[cls.edit_user_id])