From 4b860cb823fd160742ab050f481eb65e389f9a7b Mon Sep 17 00:00:00 2001 From: Christopher Allan Webber Date: Fri, 12 Aug 2011 19:59:19 -0500 Subject: [PATCH] Create processing errors and raise BadMediaFail on failure to load the image --- mediagoblin/process_media/__init__.py | 8 +++- mediagoblin/process_media/errors.py | 54 +++++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 mediagoblin/process_media/errors.py diff --git a/mediagoblin/process_media/__init__.py b/mediagoblin/process_media/__init__.py index 8e12ca4d..00402d7e 100644 --- a/mediagoblin/process_media/__init__.py +++ b/mediagoblin/process_media/__init__.py @@ -21,6 +21,8 @@ from celery.task import task from mediagoblin import mg_globals as mgg from contextlib import contextmanager +from mediagoblin.process_media.errors import BadMediaFail + THUMB_SIZE = 180, 180 MEDIUM_SIZE = 640, 640 @@ -51,7 +53,11 @@ def process_media_initial(media_id): mgg.queue_store, queued_filepath, 'source') - thumb = Image.open(queued_filename) + try: + thumb = Image.open(queued_filename) + except IOError: + raise BadMediaFail() + thumb.thumbnail(THUMB_SIZE, Image.ANTIALIAS) # ensure color mode is compatible with jpg if thumb.mode != "RGB": diff --git a/mediagoblin/process_media/errors.py b/mediagoblin/process_media/errors.py new file mode 100644 index 00000000..f2ae87ff --- /dev/null +++ b/mediagoblin/process_media/errors.py @@ -0,0 +1,54 @@ +# GNU MediaGoblin -- federated, autonomous media hosting +# Copyright (C) 2011 Free Software Foundation, Inc +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +from mediagoblin.util import lazy_pass_to_ugettext as _ + +class BaseProcessingFail(Exception): + """ + Base exception that all other processing failure messages should + subclass from. + + You shouldn't call this itself; instead you should subclass it + and provid the exception_path and general_message applicable to + this error. + """ + general_message = u'' + + @property + def exception_path(self): + return u"%s.%s" % ( + self.__class__.__module__, self.__class__.__name__) + + def __init__(self, **metadata): + self.metadata = metadata or {} + + def generate_error_message(self): + """ + Generate an error to display to users in the panel. + + Uses this class's general_message, possibly interpolated + with any metadata in self.metadata['error_message_vars'], + if appropriate. + """ + return self.general_message % self.metadata.get('error_message_vars', {}) + + +class BadMediaFail(BaseProcessingFail): + """ + Error that should be raised when an inappropriate file was given + for the media type specified. + """ + general_message = _(u'Invalid file given for media type.') -- 2.25.1