Fixed #6054: work around PIL's installation brokeness by detecting either of the two ways it can end up being installed.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@12429 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Jacob Kaplan-Moss 2010-02-14 18:28:28 +00:00
parent e6740cb39c
commit 7578981626
6 changed files with 41 additions and 14 deletions

View File

@ -30,7 +30,12 @@ class ImageFile(File):
def get_image_dimensions(file_or_path): def get_image_dimensions(file_or_path):
"""Returns the (width, height) of an image, given an open file or a path.""" """Returns the (width, height) of an image, given an open file or a path."""
# Try to import PIL in either of the two ways it can end up installed.
try:
from PIL import ImageFile as PILImageFile from PIL import ImageFile as PILImageFile
except ImportError:
import ImageFile as PILImageFile
p = PILImageFile.Parser() p = PILImageFile.Parser()
close = False close = False
if hasattr(file_or_path, 'read'): if hasattr(file_or_path, 'read'):

View File

@ -47,8 +47,12 @@ def get_validation_errors(outfile, app=None):
if isinstance(f, models.FileField) and not f.upload_to: if isinstance(f, models.FileField) and not f.upload_to:
e.add(opts, '"%s": FileFields require an "upload_to" attribute.' % f.name) e.add(opts, '"%s": FileFields require an "upload_to" attribute.' % f.name)
if isinstance(f, models.ImageField): if isinstance(f, models.ImageField):
# Try to import PIL in either of the two ways it can end up installed.
try: try:
from PIL import Image from PIL import Image
except ImportError:
try:
import Image
except ImportError: except ImportError:
e.add(opts, '"%s": To use ImageFields, you need to install the Python Imaging Library. Get it at http://www.pythonware.com/products/pil/ .' % f.name) e.add(opts, '"%s": To use ImageFields, you need to install the Python Imaging Library. Get it at http://www.pythonware.com/products/pil/ .' % f.name)
if isinstance(f, models.BooleanField) and getattr(f, 'null', False): if isinstance(f, models.BooleanField) and getattr(f, 'null', False):

View File

@ -467,7 +467,12 @@ class ImageField(FileField):
f = super(ImageField, self).to_python(data) f = super(ImageField, self).to_python(data)
if f is None: if f is None:
return None return None
# Try to import PIL in either of the two ways it can end up installed.
try:
from PIL import Image from PIL import Image
except ImportError:
import Image
# We need to get a file object for PIL. We might have a path or we might # We need to get a file object for PIL. We might have a path or we might
# have to read the data into memory. # have to read the data into memory.

View File

@ -93,11 +93,15 @@ class TextFile(models.Model):
return self.description return self.description
try: try:
# If PIL is available, try testing ImageFields. # If PIL is available, try testing ImageFields. Checking for the existence
# Checking for the existence of Image is enough for CPython, but # of Image is enough for CPython, but for PyPy, you need to check for the
# for PyPy, you need to check for the underlying modules # underlying modules If PIL is not available, ImageField tests are omitted.
# If PIL is not available, ImageField tests are omitted. # Try to import PIL in either of the two ways it can end up installed.
try:
from PIL import Image, _imaging from PIL import Image, _imaging
except ImportError:
import Image, _imaging
test_images = True test_images = True
class ImageFile(models.Model): class ImageFile(models.Model):

View File

@ -18,10 +18,14 @@ try:
except ImportError: except ImportError:
import dummy_threading as threading import dummy_threading as threading
try: # Try to import PIL in either of the two ways it can end up installed.
# Checking for the existence of Image is enough for CPython, but # Checking for the existence of Image is enough for CPython, but
# for PyPy, you need to check for the underlying modules # for PyPy, you need to check for the underlying modules
try:
from PIL import Image, _imaging from PIL import Image, _imaging
except ImportError:
try:
import Image, _imaging
except ImportError: except ImportError:
Image = None Image = None

View File

@ -6,10 +6,15 @@ try:
except ImportError: except ImportError:
from django.utils import _decimal as decimal # Python 2.3 fallback from django.utils import _decimal as decimal # Python 2.3 fallback
try: # Try to import PIL in either of the two ways it can end up installed.
# Checking for the existence of Image is enough for CPython, but for PyPy, # Checking for the existence of Image is enough for CPython, but for PyPy,
# you need to check for the underlying modules. # you need to check for the underlying modules.
try:
from PIL import Image, _imaging from PIL import Image, _imaging
except ImportError:
try:
import Image, _imaging
except ImportError: except ImportError:
Image = None Image = None