28 lines
872 B
Python
28 lines
872 B
Python
from __future__ import annotations
|
|
|
|
from datetime import datetime
|
|
|
|
from sqlalchemy import event
|
|
from sqlalchemy.orm import DeclarativeBase
|
|
|
|
|
|
class Base(DeclarativeBase):
|
|
pass
|
|
|
|
|
|
@event.listens_for(Base, "before_insert", propagate=True)
|
|
def set_audit_fields_before_insert(mapper, connection, target) -> None:
|
|
_ = mapper, connection
|
|
now = datetime.now()
|
|
if hasattr(target, "created_at") and getattr(target, "created_at", None) is None:
|
|
setattr(target, "created_at", now)
|
|
if hasattr(target, "updated_at") and getattr(target, "updated_at", None) is None:
|
|
setattr(target, "updated_at", now)
|
|
|
|
|
|
@event.listens_for(Base, "before_update", propagate=True)
|
|
def set_audit_fields_before_update(mapper, connection, target) -> None:
|
|
_ = mapper, connection
|
|
if hasattr(target, "updated_at"):
|
|
setattr(target, "updated_at", datetime.now())
|