diff --git a/mediagoblin/tools/files.py b/mediagoblin/tools/files.py index 25c1a6e6..2b4ad4e4 100644 --- a/mediagoblin/tools/files.py +++ b/mediagoblin/tools/files.py @@ -16,6 +16,19 @@ from mediagoblin import mg_globals +import os + +def _jointhat(thing): + if type(thing) == type(list()) or\ + type(thing) == type(tuple()): + filepath = "" + for item in thing: + filepath = os.path.join(filepath, item) + return filepath + else: + raise TypeError, "expecting a list or tuple, {0} received".format( + str(type(thing))) + def delete_media_files(media): """ Delete all files associated with a MediaEntry @@ -23,10 +36,21 @@ def delete_media_files(media): Arguments: - media: A MediaEntry document """ + no_such_files = [] for listpath in media.media_files.itervalues(): - mg_globals.public_store.delete_file( - listpath) + try: + mg_globals.public_store.delete_file( + listpath) + except OSError: + no_such_files.append(_jointhat(listpath)) for attachment in media.attachment_files: - mg_globals.public_store.delete_file( - attachment['filepath']) + try: + mg_globals.public_store.delete_file( + attachment['filepath']) + except OSError: + no_such_files.append(_jointhat(attachment)) + + if no_such_files: + # This breaks pep8 as far as I know + raise OSError, ", ".join(noSuchFiles) diff --git a/mediagoblin/user_pages/views.py b/mediagoblin/user_pages/views.py index dad68ba5..870e2155 100644 --- a/mediagoblin/user_pages/views.py +++ b/mediagoblin/user_pages/views.py @@ -15,6 +15,7 @@ # along with this program. If not, see . from webob import exc +import logging from mediagoblin import messages, mg_globals from mediagoblin.db.util import DESCENDING, ObjectId @@ -33,6 +34,9 @@ from werkzeug.contrib.atom import AtomFeed from mediagoblin.media_types import get_media_manager +_log = logging.getLogger(__name__) +_log.setLevel(logging.DEBUG) + @uses_pagination def user_home(request, page): """'Homepage' of a User()""" @@ -185,7 +189,14 @@ def media_confirm_delete(request, media): comment.delete() # Delete all files on the public storage - delete_media_files(media) + try: + delete_media_files(media) + except OSError, error: + _log.error('No such files from the user "{1}"' + ' to delete: {0}'.format(str(error), username)) + messages.add_message(request, messages.ERROR, + _('Some of the files with this entry seem' + ' to be missing. Deleting anyway.')) media.delete() messages.add_message(