12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- import json
- import typing as T
- from pycs import db
- from pycs.database.base import BaseModel
- from pycs.database.util import commit_on_return
- class Result(BaseModel):
- """ DB Model for projects """
- file_id = db.Column(
- db.Integer,
- db.ForeignKey("file.id", ondelete="CASCADE"),
- nullable=False)
- origin = db.Column(db.String, nullable=False)
- type = db.Column(db.String, nullable=False)
- label_id = db.Column(
- db.Integer,
- db.ForeignKey("label.id", ondelete="SET NULL"),
- nullable=True)
- data_encoded = db.Column(db.String)
- serialize_only = BaseModel.serialize_only + (
- "file_id",
- "origin",
- "type",
- "label_id",
- "data",
- )
- def serialize(self):
- """ extends the default serialize with the decoded data attribute """
- result = super().serialize()
- result["data"] = self.data
- return result
- @property
- def data(self) -> T.Optional[dict]:
- """ getter for the decoded data attribute """
- return None if self.data_encoded is None else json.loads(self.data_encoded)
- @data.setter
- def data(self, value):
- """
- setter for the decoded data attribute
- The attribute is encoded property before assigned to the object.
- """
- if isinstance(value, str) or value is None:
- self.data_encoded = value
- elif isinstance(value, (dict, list)):
- self.data_encoded = json.dumps(value)
- else:
- raise ValueError(f"Not supported type: {type(value)}")
- @commit_on_return
- def set_origin(self, origin: str):
- """
- set this results origin
- :param origin: either 'user' or 'pipeline'
- :return:
- """
- self.origin = origin
- @commit_on_return
- def set_label(self, label: int):
- """
- set this results origin
- :param label: label ID
- :return:
- """
- self.label_id = label
|