Project.py 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. from os import path
  2. from uuid import uuid1
  3. from pycs.observable import ObservableDict
  4. from pycs.projects.MediaFile import MediaFile
  5. from pycs.util.RecursiveDictionary import set_recursive
  6. class Project(ObservableDict):
  7. def __init__(self, obj: dict, parent):
  8. # ensure all required object keys are available
  9. for key in ['data', 'labels', 'jobs']:
  10. if key not in obj.keys():
  11. obj[key] = {}
  12. # save data as MediaFile objects
  13. for key in obj['data'].keys():
  14. obj['data'][key] = MediaFile(obj['data'][key], self)
  15. # initialize super
  16. super().__init__(obj, parent)
  17. def update_properties(self, update):
  18. set_recursive(update, self)
  19. def new_media_file_path(self):
  20. return path.join('projects', self['id'], 'data'), str(uuid1())
  21. def add_media_file(self, file):
  22. file = MediaFile(file, self)
  23. self['data'][file['id']] = file
  24. def add_label(self, name):
  25. label_uuid = str(uuid1())
  26. self['labels'][label_uuid] = {
  27. 'id': label_uuid,
  28. 'name': name
  29. }
  30. def update_label(self, identifier, name):
  31. if identifier in self['labels']:
  32. self['labels'][identifier]['name'] = name
  33. def remove_label(self, identifier):
  34. if identifier in self['labels']:
  35. del self['labels'][identifier]