eventcally/project/models/trackable_mixin.py
2023-04-16 13:47:49 +02:00

65 lines
1.6 KiB
Python

import datetime
from sqlalchemy import Column, DateTime, ForeignKey
from sqlalchemy.orm import declared_attr, deferred, relationship
from project.models.functions import _current_user_id_or_none
class TrackableMixin(object):
@declared_attr
def created_at(cls):
return deferred(
Column(DateTime, default=datetime.datetime.utcnow), group="trackable"
)
@declared_attr
def updated_at(cls):
return deferred(
Column(
DateTime,
default=datetime.datetime.utcnow,
onupdate=datetime.datetime.utcnow,
),
group="trackable",
)
@declared_attr
def created_by_id(cls):
return deferred(
Column(
"created_by_id",
ForeignKey("user.id"),
default=_current_user_id_or_none,
),
group="trackable",
)
@declared_attr
def created_by(cls):
return relationship(
"User",
primaryjoin="User.id == %s.created_by_id" % cls.__name__,
remote_side="User.id",
)
@declared_attr
def updated_by_id(cls):
return deferred(
Column(
"updated_by_id",
ForeignKey("user.id"),
default=_current_user_id_or_none,
onupdate=_current_user_id_or_none,
),
group="trackable",
)
@declared_attr
def updated_by(cls):
return relationship(
"User",
primaryjoin="User.id == %s.updated_by_id" % cls.__name__,
remote_side="User.id",
)