Result.py 1.2 KB

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