From 9b3e4f5c2a976c1ff284dec6831df5c3d9a6d57f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Thu, 17 Dec 2015 16:48:02 +0100 Subject: [PATCH] Properly capture StorageErrors --- src/octoprint/filemanager/storage.py | 2 +- src/octoprint/server/api/files.py | 22 ++++++++++++++++------ 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/octoprint/filemanager/storage.py b/src/octoprint/filemanager/storage.py index dbfa1ff8..d4076916 100644 --- a/src/octoprint/filemanager/storage.py +++ b/src/octoprint/filemanager/storage.py @@ -336,7 +336,7 @@ class StorageInterface(object): raise NotImplementedError() -class StorageError(BaseException): +class StorageError(Exception): UNKNOWN = "unknown" INVALID_DIRECTORY = "invalid_directory" INVALID_FILE = "invalid_file" diff --git a/src/octoprint/server/api/files.py b/src/octoprint/server/api/files.py index d9a8b38c..c0480f9c 100644 --- a/src/octoprint/server/api/files.py +++ b/src/octoprint/server/api/files.py @@ -15,6 +15,7 @@ from octoprint.server.api import api from octoprint.events import Events import octoprint.filemanager import octoprint.filemanager.util +import octoprint.filemanager.storage import octoprint.slicing import psutil @@ -286,9 +287,14 @@ def uploadGcodeFile(target): # FileDestinations.LOCAL = should normally be target, but can't because SDCard handling isn't implemented yet futureFullPath = fileManager.join_path(FileDestinations.LOCAL, futurePath, futureFilename) - added_file = fileManager.add_file(FileDestinations.LOCAL, futureFullPath, upload, allow_overwrite=True) - if added_file is None: - return make_response("Could not upload the file %s" % upload.filename, 500) + try: + added_file = fileManager.add_file(FileDestinations.LOCAL, futureFullPath, upload, allow_overwrite=True) + except octoprint.filemanager.storage.StorageError as e: + if e.code == octoprint.filemanager.storage.StorageError.INVALID_FILE: + return make_response("Could not upload the file \"{}\", invalid type".format(upload.filename), 400) + else: + return make_response("Could not upload the file \"{}\"".format(upload.filename), 500) + if octoprint.filemanager.valid_file_type(added_file, "stl"): filename = added_file done = True @@ -345,9 +351,13 @@ def uploadGcodeFile(target): if octoprint.filemanager.valid_file_type(futureName): return make_response("Can't create a folder named %s, please try another name" % futureName, 409) - added_folder = fileManager.add_folder(target, futureFullPath) - if added_folder is None: - return make_response("Could not create folder %s" % futureName, 500) + try: + added_folder = fileManager.add_folder(target, futureFullPath) + except octoprint.filemanager.storage.StorageError as e: + if e.code == octoprint.filemanager.storage.StorageError.INVALID_DIRECTORY: + return make_response("Could not create folder {}, invalid directory".format(futureName)) + else: + return make_response("Could not create folder {}".format(futureName)) else: return make_response("No file to upload and no folder to create", 400)