Create processing errors and raise BadMediaFail on failure to load the image
authorChristopher Allan Webber <cwebber@dustycloud.org>
Sat, 13 Aug 2011 00:59:19 +0000 (19:59 -0500)
committerChristopher Allan Webber <cwebber@dustycloud.org>
Sat, 13 Aug 2011 00:59:19 +0000 (19:59 -0500)
mediagoblin/process_media/__init__.py
mediagoblin/process_media/errors.py [new file with mode: 0644]

index 8e12ca4d848da11f9b7e22cfdf01551084cc4cfb..00402d7ef6cfac41e765269d66880c53f9aab053 100644 (file)
@@ -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 (file)
index 0000000..f2ae87f
--- /dev/null
@@ -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 <http://www.gnu.org/licenses/>.
+
+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.')