indexstore/AppIndicators/Models.py

61 lines
1.9 KiB
Python
Raw Permalink Normal View History

2022-11-08 09:43:43 +08:00
from sqlalchemy import Column, String, Enum, ForeignKey
from sqlalchemy.orm import relationship
from sqlalchemy.dialects.mysql import LONGTEXT
2022-11-20 17:25:40 +08:00
from AppIndicators.Schemas import NatureEnum
2022-11-08 09:43:43 +08:00
2022-11-20 17:23:28 +08:00
from Utils.DataBase.SqlAlchemyUtils import Base, engine
2022-11-08 09:43:43 +08:00
class Indicator(Base):
__tablename__ = "indicator"
2022-11-08 23:48:57 +08:00
iid = Column(String(32), primary_key=True)
2022-11-08 09:43:43 +08:00
ename = Column(String(255), index=True)
cname = Column(String(255), index=True)
description = Column(LONGTEXT)
nature = Column(Enum(NatureEnum, values_callable=lambda obj: [e.value for e in obj]))
2022-11-08 23:48:57 +08:00
category_id = Column(String(12), ForeignKey("indicator_category.id"))
2022-11-08 09:43:43 +08:00
2022-11-08 23:48:57 +08:00
category = relationship("IndicatorCategory", backref="indicator")
parameters = relationship("Parameters", backref="indicator", cascade="all, delete-orphan")
def to_dict(self):
_dict = {c.name: getattr(self, c.name, None) for c in self.__table__.columns}
_dict.update({"category": self.category.__str__()})
2022-11-20 17:23:28 +08:00
_dict.update({"parameters": [param.to_dict() for param in list(self.parameters)]})
2022-11-08 23:48:57 +08:00
return _dict
2022-11-08 09:43:43 +08:00
class Parameters(Base):
__tablename__ = "parameters"
2022-11-08 23:48:57 +08:00
pid = Column(String(32), primary_key=True)
2022-11-08 09:43:43 +08:00
ename = Column(String(255))
cname = Column(String(255))
description = Column(LONGTEXT)
_iid = Column(String(32), ForeignKey("indicator.iid", ondelete="CASCADE"))
2022-11-08 23:48:57 +08:00
def to_dict(self):
_dict = {c.name: getattr(self, c.name, None) for c in self.__table__.columns}
return _dict
class IndicatorCategory(Base):
__tablename__ = "indicator_category"
id = Column(String(12), primary_key=True)
title = Column(String(16), unique=True, index=True)
def __repr__(self):
return self.title
def to_kv(self):
_dict = dict()
_dict.update({"key": self.title})
_dict.update({"value": self.id})
return _dict
2022-11-20 17:23:28 +08:00
Base.metadata.create_all(bind=engine)