|
@@ -1,5 +1,6 @@
|
|
from json import load
|
|
from json import load
|
|
-from os import path, mkdir
|
|
|
|
|
|
+from os import path, mkdir, listdir
|
|
|
|
+from os.path import splitext
|
|
from uuid import uuid1
|
|
from uuid import uuid1
|
|
|
|
|
|
from eventlet import spawn_after
|
|
from eventlet import spawn_after
|
|
@@ -31,9 +32,18 @@ class Project(ObservableDict):
|
|
|
|
|
|
obj['model'] = model
|
|
obj['model'] = model
|
|
|
|
|
|
|
|
+ # handle unmanaged files
|
|
|
|
+ if obj['unmanaged'] is not None:
|
|
|
|
+ for file in listdir(obj['unmanaged']):
|
|
|
|
+ if file not in obj['data'].keys():
|
|
|
|
+ name, ext = splitext(file)
|
|
|
|
+ uuid = name
|
|
|
|
+
|
|
|
|
+ obj['data'][uuid] = self.create_media_file_dict(uuid, name, ext, 0, 0)
|
|
|
|
+
|
|
# save data as MediaFile objects
|
|
# save data as MediaFile objects
|
|
for key in obj['data'].keys():
|
|
for key in obj['data'].keys():
|
|
- obj['data'][key] = self.create_media_file(obj['data'][key], obj['id'])
|
|
|
|
|
|
+ obj['data'][key] = self.create_media_file(obj['data'][key], self)
|
|
|
|
|
|
# initialize super
|
|
# initialize super
|
|
super().__init__(obj, parent)
|
|
super().__init__(obj, parent)
|
|
@@ -56,28 +66,32 @@ class Project(ObservableDict):
|
|
def new_media_file_path(self):
|
|
def new_media_file_path(self):
|
|
return path.join('projects', self['id'], 'data'), str(uuid1())
|
|
return path.join('projects', self['id'], 'data'), str(uuid1())
|
|
|
|
|
|
- def create_media_file(self, file, project_id=None):
|
|
|
|
- if project_id is None:
|
|
|
|
- project_id = self['id']
|
|
|
|
|
|
+ @staticmethod
|
|
|
|
+ def create_media_file_dict(uuid, name, extension, size, created):
|
|
|
|
+ return {
|
|
|
|
+ 'id': uuid,
|
|
|
|
+ 'name': name,
|
|
|
|
+ 'extension': extension,
|
|
|
|
+ 'size': size,
|
|
|
|
+ 'created': created
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ def create_media_file(self, file, project=None):
|
|
|
|
+ if project is None:
|
|
|
|
+ project = self
|
|
|
|
|
|
# TODO check file extension
|
|
# TODO check file extension
|
|
# TODO determine type
|
|
# TODO determine type
|
|
# TODO filter supported types
|
|
# TODO filter supported types
|
|
if file['extension'] in ['.jpg', '.png']:
|
|
if file['extension'] in ['.jpg', '.png']:
|
|
- return ImageFile(file, project_id)
|
|
|
|
|
|
+ return ImageFile(file, project)
|
|
if file['extension'] in ['.mp4']:
|
|
if file['extension'] in ['.mp4']:
|
|
- return VideoFile(file, project_id)
|
|
|
|
|
|
+ return VideoFile(file, project)
|
|
|
|
|
|
raise NotImplementedError
|
|
raise NotImplementedError
|
|
|
|
|
|
def add_media_file(self, uuid, name, extension, size, created):
|
|
def add_media_file(self, uuid, name, extension, size, created):
|
|
- file = {
|
|
|
|
- 'id': uuid,
|
|
|
|
- 'name': name,
|
|
|
|
- 'extension': extension,
|
|
|
|
- 'size': size,
|
|
|
|
- 'created': created
|
|
|
|
- }
|
|
|
|
|
|
+ file = self.create_media_file_dict(uuid, name, extension, size, created)
|
|
self['data'][file['id']] = self.create_media_file(file)
|
|
self['data'][file['id']] = self.create_media_file(file)
|
|
|
|
|
|
def remove_media_file(self, file_id):
|
|
def remove_media_file(self, file_id):
|