felicity-lims/backend/felicity_lims/felicity/apps/__init__.py

53 lines
1.5 KiB
Python
Raw Normal View History

2021-04-04 15:57:22 +08:00
from datetime import datetime
2023-03-19 23:21:32 +08:00
from sqlalchemy import Column, DateTime, ForeignKey, Integer, func
2021-04-04 15:57:22 +08:00
from sqlalchemy.ext.declarative import declared_attr
from sqlalchemy.orm import relationship
2023-03-19 23:21:32 +08:00
from felicity.core.uid_gen import FelicitySAID
from felicity.apps.audit.mixin import AuditableMixin
from felicity.apps.common.hooks import EventHookMixin
2021-04-04 15:57:22 +08:00
from felicity.database.base_class import DBModel
class TrailMixin(object):
2021-12-13 00:20:48 +08:00
@declared_attr
def created_at(self):
return Column(DateTime, default=datetime.utcnow)
2021-04-04 15:57:22 +08:00
@declared_attr
def created_by_uid(self):
2023-03-19 23:21:32 +08:00
return Column(FelicitySAID, ForeignKey("user.uid"), nullable=True)
2021-04-04 15:57:22 +08:00
@declared_attr
def created_by(self):
return relationship("User", foreign_keys=[self.created_by_uid], lazy="selectin")
2021-12-13 00:20:48 +08:00
@declared_attr
def updated_at(self):
return Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
2021-04-04 15:57:22 +08:00
@declared_attr
def updated_by_uid(self):
2023-03-19 23:21:32 +08:00
return Column(FelicitySAID, ForeignKey("user.uid"), nullable=True)
2021-04-04 15:57:22 +08:00
@declared_attr
def updated_by(self):
return relationship("User", foreign_keys=[self.updated_by_uid], lazy="selectin")
2021-04-04 15:57:22 +08:00
class BaseAuditDBModel(DBModel, TrailMixin):
2021-05-06 21:48:09 +08:00
"""With creator and updater"""
2021-04-04 15:57:22 +08:00
__abstract__ = True
2021-05-06 21:48:09 +08:00
class Auditable(BaseAuditDBModel, AuditableMixin):
"""With Audit Log"""
2021-05-06 21:48:09 +08:00
__abstract__ = True
2021-12-13 00:20:48 +08:00
# class EventHooked(BaseAuditDBModel, EventHookMixin):
# """Listens for All events: Not working"""
# __abstract__ = True