Result.py 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  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. serialize_only = (
  19. "id",
  20. "file_id",
  21. "origin",
  22. "type",
  23. "label_id",
  24. "data",
  25. )
  26. def serialize(self):
  27. result = super().serialize()
  28. if result["data"] is not None:
  29. result["data"] = json.loads(result["data"])
  30. return result
  31. def set_origin(self, origin: str):
  32. """
  33. set this results origin
  34. :param origin: either 'user' or 'pipeline'
  35. :return:
  36. """
  37. self.origin = origin
  38. self.commit()
  39. def set_label(self, label: int):
  40. """
  41. set this results origin
  42. :param label: label ID
  43. :return:
  44. """
  45. self.label_id = label
  46. self.commit()
  47. def set_data(self, data: T.Optional[dict]):
  48. """
  49. set this results data object
  50. :param data: data object
  51. :return:
  52. """
  53. data = data if data is None else json.dumps(data)
  54. self.data = data
  55. self.commit()