UnmanagedVideoFile.py 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. from json import load, dump
  2. from os.path import join, exists
  3. from uuid import uuid1
  4. from pycs.projects.VideoFile import VideoFile
  5. class UnmanagedVideoFile(VideoFile):
  6. def __init__(self, obj, project):
  7. obj['prev'] = None
  8. obj['next'] = None
  9. super().__init__(obj, project, 'data')
  10. del self['predictionResults']
  11. def prev(self, value):
  12. self['prev'] = value['id']
  13. def next(self, value):
  14. self['next'] = value['id']
  15. @property
  16. def data_path(self):
  17. return join('projects', self.project['id'], 'data', self['id'] + '.json')
  18. def __load(self):
  19. if not exists(self.data_path):
  20. return {}
  21. with open(self.data_path, 'r') as f:
  22. return load(f)
  23. def __write(self, data):
  24. with open(self.data_path, 'w') as f:
  25. dump(data, f, indent=4)
  26. def get_data(self):
  27. copy = self.copy()
  28. copy['predictionResults'] = self.__load()
  29. return copy
  30. def add_global_result(self, result, origin='user'):
  31. self.remove_global_result()
  32. self.add_result(result, origin)
  33. def remove_global_result(self):
  34. data = self.__load()
  35. delete = []
  36. for result_id in data:
  37. if 'x' not in data[result_id]:
  38. delete.append(result_id)
  39. for result_id in delete:
  40. del data[result_id]
  41. self.__write(data)
  42. def add_result(self, result, origin='user'):
  43. data = self.__load()
  44. result['id'] = str(uuid1())
  45. result['origin'] = origin
  46. data[result['id']] = result
  47. self.__write(data)
  48. def remove_result(self, identifier):
  49. data = self.__load()
  50. del data[identifier]
  51. self.__write(data)
  52. def remove_pipeline_results(self):
  53. data = self.__load()
  54. remove = list(filter(lambda k: data[k]['origin'] == 'pipeline', data.keys()))
  55. for key in remove:
  56. del data[key]
  57. self.__write(data)
  58. def remove_results(self):
  59. self.__write({})
  60. def update_result(self, identifier, result, origin='user'):
  61. data = self.__load()
  62. result['id'] = identifier
  63. result['origin'] = origin
  64. data[identifier] = result
  65. self.__write(data)