MediaFile.py 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. from os.path import join
  2. from uuid import uuid1
  3. from pycs.observable import ObservableDict
  4. class MediaFile(ObservableDict):
  5. def __init__(self, obj, project, type):
  6. if 'predictionResults' not in obj.keys():
  7. obj['predictionResults'] = {}
  8. self.project = project
  9. self.type = type
  10. super().__init__(obj)
  11. @property
  12. def directory(self):
  13. if self.project['unmanaged'] is not None and self.type == 'data':
  14. return self.project['unmanaged']
  15. else:
  16. return join('projects', self.project['id'], self.type)
  17. @property
  18. def full_name(self):
  19. return self['id'] + self['extension']
  20. @property
  21. def path(self):
  22. return join(self.directory, self.full_name)
  23. def add_global_result(self, result, origin='user'):
  24. self.remove_global_result()
  25. self.add_result(result, origin)
  26. def remove_global_result(self):
  27. delete = []
  28. for result_id in self['predictionResults']:
  29. if 'x' not in self['predictionResults'][result_id]:
  30. delete.append(result_id)
  31. for result_id in delete:
  32. del self['predictionResults'][result_id]
  33. def add_result(self, result, origin='user'):
  34. result['id'] = str(uuid1())
  35. result['origin'] = origin
  36. self['predictionResults'][result['id']] = result
  37. def remove_result(self, identifier):
  38. del self['predictionResults'][identifier]
  39. def remove_pipeline_results(self):
  40. remove = list(filter(lambda k: self['predictionResults'][k]['origin'] == 'pipeline', self['predictionResults'].keys()))
  41. for key in remove:
  42. del self['predictionResults'][key]
  43. def remove_results(self):
  44. self['predictionResults'] = {}
  45. def update_result(self, identifier, result, origin='user'):
  46. result['id'] = identifier
  47. result['origin'] = origin
  48. self['predictionResults'][identifier] = result
  49. def resize(self, maximum_width):
  50. raise NotImplementedError