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
This commit is contained in:
parent
bfcecbffd3
commit
4016d5264a
1
AUTHORS
1
AUTHORS
|
@ -150,6 +150,7 @@ answer newbie questions, and generally made Django that much better:
|
||||||
Stefane Fermgier <sf@fermigier.com>
|
Stefane Fermgier <sf@fermigier.com>
|
||||||
Afonso Fernández Nogueira <fonzzo.django@gmail.com>
|
Afonso Fernández Nogueira <fonzzo.django@gmail.com>
|
||||||
J. Pablo Fernandez <pupeno@pupeno.com>
|
J. Pablo Fernandez <pupeno@pupeno.com>
|
||||||
|
Maciej Fijalkowski
|
||||||
Matthew Flanagan <http://wadofstuff.blogspot.com>
|
Matthew Flanagan <http://wadofstuff.blogspot.com>
|
||||||
Eric Floehr <eric@intellovations.com>
|
Eric Floehr <eric@intellovations.com>
|
||||||
Vincent Foley <vfoleybourgon@yahoo.ca>
|
Vincent Foley <vfoleybourgon@yahoo.ca>
|
||||||
|
|
|
@ -503,6 +503,11 @@ class ImageField(FileField):
|
||||||
# but it must be called immediately after the constructor
|
# but it must be called immediately after the constructor
|
||||||
trial_image = Image.open(file)
|
trial_image = Image.open(file)
|
||||||
trial_image.verify()
|
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
|
except Exception: # Python Imaging Library doesn't recognize it as an image
|
||||||
raise ValidationError(self.error_messages['invalid_image'])
|
raise ValidationError(self.error_messages['invalid_image'])
|
||||||
if hasattr(f, 'seek') and callable(f.seek):
|
if hasattr(f, 'seek') and callable(f.seek):
|
||||||
|
|
|
@ -69,8 +69,10 @@ class ImageFile(models.Model):
|
||||||
description = models.CharField(max_length=20)
|
description = models.CharField(max_length=20)
|
||||||
try:
|
try:
|
||||||
# If PIL is available, try testing PIL.
|
# If PIL is available, try testing PIL.
|
||||||
# Otherwise, it's equivalent to TextFile above.
|
# Checking for the existence of Image is enough for CPython, but
|
||||||
import Image
|
# 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())
|
image = models.ImageField(upload_to=tempfile.gettempdir())
|
||||||
except ImportError:
|
except ImportError:
|
||||||
image = models.FileField(upload_to=tempfile.gettempdir())
|
image = models.FileField(upload_to=tempfile.gettempdir())
|
||||||
|
|
Loading…
Reference in New Issue