Commit 4016d526 authored by Russell Keith-Magee's avatar Russell Keith-Magee
Browse files

Fixed #7727 -- Improved the checks for import failure when using PIL. Under...

Fixed #7727 -- Improved the checks for import failure when using PIL. Under PyPy, you can import the PIL module, but when you try to use it, the underlying _imaging module will not be available. Thanks to Maciej Fijalkowski (fijal) for the report and suggested fix.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@8016 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent bfcecbff
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -150,6 +150,7 @@ answer newbie questions, and generally made Django that much better:
    Stefane Fermgier <sf@fermigier.com>
    Afonso Fernández Nogueira <fonzzo.django@gmail.com>
    J. Pablo Fernandez <pupeno@pupeno.com>
    Maciej Fijalkowski
    Matthew Flanagan <http://wadofstuff.blogspot.com>
    Eric Floehr <eric@intellovations.com>
    Vincent Foley <vfoleybourgon@yahoo.ca>
+5 −0
Original line number Diff line number Diff line
@@ -503,6 +503,11 @@ class ImageField(FileField):
            #  but it must be called immediately after the constructor
            trial_image = Image.open(file)
            trial_image.verify()
        except ImportError: 
            # Under PyPy, it is possible to import PIL. However, the underlying
            # _imaging C module isn't available, so an ImportError will be 
            # raised. Catch and re-raise. 
            raise
        except Exception: # Python Imaging Library doesn't recognize it as an image
            raise ValidationError(self.error_messages['invalid_image'])
        if hasattr(f, 'seek') and callable(f.seek):
+4 −2
Original line number Diff line number Diff line
@@ -69,8 +69,10 @@ class ImageFile(models.Model):
    description = models.CharField(max_length=20)
    try:
        # If PIL is available, try testing PIL.
        # Otherwise, it's equivalent to TextFile above.
        import Image
        # Checking for the existence of Image is enough for CPython, but
        # for PyPy, you need to check for the underlying modules
        # If PIL is not available, this test is equivalent to TextFile above.
        import Image, _imaging
        image = models.ImageField(upload_to=tempfile.gettempdir())
    except ImportError:
        image = models.FileField(upload_to=tempfile.gettempdir())