12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- from os import path
- from uuid import uuid1
- from pycs.observable import ObservableDict
- from pycs.projects.MediaFile import MediaFile
- from pycs.util.RecursiveDictionary import set_recursive
- class Project(ObservableDict):
- def __init__(self, obj: dict, parent):
- # ensure all required object keys are available
- for key in ['data', 'labels', 'jobs']:
- if key not in obj.keys():
- obj[key] = {}
- # save data as MediaFile objects
- for key in obj['data'].keys():
- obj['data'][key] = MediaFile(obj['data'][key], self)
- # initialize super
- super().__init__(obj, parent)
- # subscribe to changes to write to disk afterwards
- self.subscribe(lambda d: self.parent.write_project(self['id']))
- def update_properties(self, update):
- set_recursive(update, self)
- def new_media_file_path(self):
- return path.join('projects', self['id'], 'data'), str(uuid1())
- def add_media_file(self, file):
- file = MediaFile(file, self)
- self['data'][file['id']] = file
- def add_label(self, name):
- label_uuid = str(uuid1())
- self['labels'][label_uuid] = {
- 'id': label_uuid,
- 'name': name
- }
- def update_label(self, identifier, name):
- if identifier in self['labels']:
- self['labels'][identifier]['name'] = name
- def remove_label(self, identifier):
- if identifier in self['labels']:
- del self['labels'][identifier]
|