6
0

Result.py 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import typing as T
  2. import json
  3. from contextlib import closing
  4. from pycs import db
  5. from pycs.database.base import BaseModel
  6. class Result(BaseModel):
  7. file_id = db.Column(
  8. db.Integer,
  9. db.ForeignKey("file.id", ondelete="CASCADE"),
  10. nullable=False)
  11. origin = db.Column(db.String, nullable=False)
  12. type = db.Column(db.String, nullable=False)
  13. label_id = db.Column(
  14. db.Integer,
  15. db.ForeignKey("label.id", ondelete="SET NULL"),
  16. nullable=True)
  17. data = db.Column(db.String)
  18. def serialize(self):
  19. result = super().serialize()
  20. if result["data"] is not None:
  21. result["data"] = json.loads(result["data"])
  22. return result
  23. def set_origin(self, origin: str):
  24. """
  25. set this results origin
  26. :param origin: either 'user' or 'pipeline'
  27. :return:
  28. """
  29. self.origin = origin
  30. self.commit()
  31. def set_label(self, label: int):
  32. """
  33. set this results origin
  34. :param label: label ID
  35. :return:
  36. """
  37. self.label_id = label
  38. self.commit()
  39. def set_data(self, data: T.Optional[dict]):
  40. """
  41. set this results data object
  42. :param data: data object
  43. :return:
  44. """
  45. data = data if data is None else json.dumps(data)
  46. self.data = data
  47. self.commit()