from sqlalchemy import Column, Integer, String, Enum, UniqueConstraint, Boolean, inspect
from sqlalchemy.ext.hybrid import hybrid_property
from sqlalchemy.types import JSON
from atk.configs.results_config import RunStatus
from atk.configs.results_config import ProcessStatus
from atk.db.models.base import BaseDb
class CaseResult(BaseDb):
__tablename__ = 'case_result'
case_id = Column(Integer, unique=True, index=True)
case_name = Column(String, index=True)
case_results = Column(JSON)
run_status = Column(Enum(RunStatus))
create_task_status = Column(Enum(ProcessStatus))
save_db_status = Column(Enum(ProcessStatus))
save_report_status = Column(Enum(ProcessStatus))
clean_data_status = Column(Enum(ProcessStatus))
retry_times = Column(Integer)
def __init__(self, **kwargs):
kwargs.setdefault("run_status", RunStatus.UNDO)
kwargs.setdefault("create_task_status", ProcessStatus.UNDO)
kwargs.setdefault("save_db_status", ProcessStatus.UNDO)
kwargs.setdefault("save_report_status", ProcessStatus.UNDO)
kwargs.setdefault("clean_data_status", ProcessStatus.UNDO)
kwargs.setdefault("retry_times", 0)
super().__init__(**kwargs)
__table_args__ = (UniqueConstraint('case_id', 'case_name', name='uix_case_id_case_name'),)
def __str__(self):
return (f'CaseResult: {self.case_name}_{self.case_id}'
f', run_status={self.run_status}'
f', create_task_status={self.create_task_status}'
f', save_db_status={self.save_db_status}'
f', save_report_status={self.save_report_status}'
f', clean_data_status={self.clean_data_status}'
f', case_results={self.case_results}'
f', retry_times={self.retry_times}'
)
@hybrid_property
def case_op_name(self):
"""将 case_index 和 op_name 拼接成一个字段"""
return f"{self.case_id}_{self.case_name}"
def to_dict(self):
return {c.key: getattr(self, c.key)
for c in inspect(self).mapper.columns}