async def upload_file(background_tasks: BackgroundTasks, response: Response, file: UploadFile = File(...), folder: Optional[str] = Form(''), childOf: Optional[str] = Form(''), identity: str = Depends(get_jwt_identity)): try: if file.filename == '' or (len(folder) > 0 and folder[0] == '/'): raise SchemaValidationError User.objects.get(id=identity) # make sure the user exists if allowed_file(file.filename): # Handle filename collisions filename = file.filename counter = 2 while True: try: Media.objects.get(filename=filename, folder=folder) newFilename = filename filenameSplit = newFilename.rsplit('.', 1) filename = filenameSplit[0] + '_' + str(counter) + '.' + filenameSplit[1] counter += 1 except DoesNotExist: break mimetype = file.content_type if not mimetype: mimetype = mimetypes.guess_type(filename) if FileSettings.ENABLE_FFMPEG and FileSettings.ENABLE_FILE_PROCESSING and (mimetype[:6] == 'video/' or mimetype[:6] == 'audio/' or mimetype == 'application/x-subrip' or mimetype == 'application/ttml+xml'): # Process the file splitFilename = filename.rsplit('.', 1) media = Media(owner=identity, filename=splitFilename[0], folder=folder, container=True, processing=True) media.save() background_tasks.add_task(processMedia, media, file, splitFilename[1]) #processMedia(media, file) response.status_code = 202 else: media = Media(owner=identity, filename=filename, folder=folder) media.file.put(file.file, content_type=mimetype) media.save() for parent in childOf.split(','): try: if parent: Media.objects.get(id=parent).update(push__associatedMedia=media) except DoesNotExist: pass return media.serialize() raise SchemaValidationError except SchemaValidationError as e: raise SchemaValidationError().http_exception except DoesNotExist: raise UnauthorizedError().http_exception except MediaProcessingError: raise MediaProcessingError().http_exception except Exception as e: raise e
async def create_folder(folder_body: FolderForm, identity: str = Depends(get_jwt_identity)): try: if folder_body.folder == '..': raise SchemaValidationError User.objects.get(id=identity) # Check the user exists splitFolder = folder_body.folder.rsplit('/', 1) if len(splitFolder) == 2: base = splitFolder[0] folder = splitFolder[1] else: base = '' folder = folder_body.folder media = Media(owner=identity, folder=base, filename=folder, dir=True).save() return media.serialize() except NotUniqueError: raise AlreadyExistsError().http_exception except DoesNotExist: raise UnauthorizedError().http_exception except Exception as e: raise e