from os.path import join from uuid import uuid1 from pycs.observable import ObservableDict class MediaFile(ObservableDict): def __init__(self, obj, project, type): if 'predictionResults' not in obj.keys(): obj['predictionResults'] = {} self.project = project self.type = type super().__init__(obj) @property def directory(self): if self.project['unmanaged'] is not None and self.type == 'data': return self.project['unmanaged'] else: return join('projects', self.project['id'], self.type) @property def full_name(self): return self['id'] + self['extension'] @property def path(self): return join(self.directory, self.full_name) def add_global_result(self, result, origin='user'): self.remove_global_result() self.add_result(result, origin) def remove_global_result(self): delete = [] for result_id in self['predictionResults']: if 'x' not in self['predictionResults'][result_id]: delete.append(result_id) for result_id in delete: del self['predictionResults'][result_id] def add_result(self, result, origin='user'): result['id'] = str(uuid1()) result['origin'] = origin self['predictionResults'][result['id']] = result def remove_result(self, identifier): del self['predictionResults'][identifier] def remove_pipeline_results(self): remove = list(filter(lambda k: self['predictionResults'][k]['origin'] == 'pipeline', self['predictionResults'].keys())) for key in remove: del self['predictionResults'][key] def remove_results(self): self['predictionResults'] = {} def update_result(self, identifier, result, origin='user'): result['id'] = identifier result['origin'] = origin self['predictionResults'][identifier] = result def resize(self, maximum_width): raise NotImplementedError