61 lines
1.9 KiB
Python
61 lines
1.9 KiB
Python
from sqlalchemy import Column, String, Enum, ForeignKey
|
|
from sqlalchemy.orm import relationship
|
|
from sqlalchemy.dialects.mysql import LONGTEXT
|
|
|
|
from AppIndicators.Schemas import NatureEnum
|
|
|
|
from Utils.DataBase.SqlAlchemyUtils import Base, engine
|
|
|
|
|
|
class Indicator(Base):
|
|
__tablename__ = "indicator"
|
|
|
|
iid = Column(String(32), primary_key=True)
|
|
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]))
|
|
category_id = Column(String(12), ForeignKey("indicator_category.id"))
|
|
|
|
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__()})
|
|
_dict.update({"parameters": [param.to_dict() for param in list(self.parameters)]})
|
|
return _dict
|
|
|
|
|
|
class Parameters(Base):
|
|
__tablename__ = "parameters"
|
|
|
|
pid = Column(String(32), primary_key=True)
|
|
ename = Column(String(255))
|
|
cname = Column(String(255))
|
|
description = Column(LONGTEXT)
|
|
_iid = Column(String(32), ForeignKey("indicator.iid", ondelete="CASCADE"))
|
|
|
|
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
|
|
|
|
|
|
Base.metadata.create_all(bind=engine)
|