Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

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
  • Loading branch information...
commit 4016d5264ab049c33c845c5337ce2a3e50754268 1 parent bfcecbf
Russell Keith-Magee freakboy3742 authored
1  AUTHORS
View
@@ -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 django/forms/fields.py
View
@@ -503,6 +503,11 @@ def clean(self, data, initial=None):
# 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):
6 tests/modeltests/model_forms/models.py
View
@@ -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())
Please sign in to comment.
Something went wrong with that request. Please try again.