6
0

UnmanagedVideoFile.py 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  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. def length(self, value):
  16. self['length'] = value
  17. @property
  18. def data_path(self):
  19. return join('projects', self.project['id'], 'data', self['id'] + '.json')
  20. def __load(self):
  21. if not exists(self.data_path):
  22. return {}
  23. with open(self.data_path, 'r') as f:
  24. return load(f)
  25. def __write(self, data):
  26. with open(self.data_path, 'w') as f:
  27. dump(data, f, indent=4)
  28. def get_data(self):
  29. copy = self.copy()
  30. copy['predictionResults'] = self.__load()
  31. return copy
  32. def add_global_result(self, result, origin='user'):
  33. self.remove_global_result()
  34. self.add_result(result, origin)
  35. def remove_global_result(self):
  36. data = self.__load()
  37. delete = []
  38. for result_id in data:
  39. if 'x' not in data[result_id]:
  40. delete.append(result_id)
  41. for result_id in delete:
  42. del data[result_id]
  43. self.__write(data)
  44. def add_result(self, result, origin='user'):
  45. data = self.__load()
  46. result['id'] = str(uuid1())
  47. result['origin'] = origin
  48. data[result['id']] = result
  49. self.__write(data)
  50. def remove_result(self, identifier):
  51. data = self.__load()
  52. del data[identifier]
  53. self.__write(data)
  54. def remove_pipeline_results(self):
  55. data = self.__load()
  56. remove = list(filter(lambda k: data[k]['origin'] == 'pipeline', data.keys()))
  57. for key in remove:
  58. del data[key]
  59. self.__write(data)
  60. def remove_results(self):
  61. self.__write({})
  62. def update_result(self, identifier, result, origin='user'):
  63. data = self.__load()
  64. result['id'] = identifier
  65. result['origin'] = origin
  66. data[identifier] = result
  67. self.__write(data)