from json import load, dump from os.path import join, exists from uuid import uuid1 from pycs.projects.VideoFile import VideoFile class UnmanagedVideoFile(VideoFile): def __init__(self, obj, project): obj['prev'] = None obj['next'] = None super().__init__(obj, project, 'data') del self['predictionResults'] def prev(self, value): self['prev'] = value['id'] def next(self, value): self['next'] = value['id'] def length(self, value): self['length'] = value @property def data_path(self): return join('projects', self.project['id'], 'data', self['id'] + '.json') def __load(self): if not exists(self.data_path): return {} with open(self.data_path, 'r') as f: return load(f) def __write(self, data): with open(self.data_path, 'w') as f: dump(data, f, indent=4) def get_data(self): copy = self.copy() copy['predictionResults'] = self.__load() return copy def add_global_result(self, result, origin='user'): self.remove_global_result() self.add_result(result, origin) def remove_global_result(self): data = self.__load() delete = [] for result_id in data: if 'x' not in data[result_id]: delete.append(result_id) for result_id in delete: del data[result_id] self.__write(data) def add_result(self, result, origin='user'): data = self.__load() result['id'] = str(uuid1()) result['origin'] = origin data[result['id']] = result self.__write(data) def remove_result(self, identifier): data = self.__load() del data[identifier] self.__write(data) def remove_pipeline_results(self): data = self.__load() remove = list(filter(lambda k: data[k]['origin'] == 'pipeline', data.keys())) for key in remove: del data[key] self.__write(data) def remove_results(self): self.__write({}) def update_result(self, identifier, result, origin='user'): data = self.__load() result['id'] = identifier result['origin'] = origin data[identifier] = result self.__write(data)