Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Fixed #6054: work around PIL's installation brokeness by detecting ei…

…ther 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
  • Loading branch information...
commit 757898162670b1a3178af3a0dc9fa2921c48702c 1 parent e6740cb
Jacob Kaplan-Moss jacobian authored
7 django/core/files/images.py
View
@@ -30,7 +30,12 @@ def _get_image_dimensions(self):
def get_image_dimensions(file_or_path):
"""Returns the (width, height) of an image, given an open file or a path."""
- from PIL import ImageFile as PILImageFile
+ # Try to import PIL in either of the two ways it can end up installed.
+ try:
+ from PIL import ImageFile as PILImageFile
+ except ImportError:
+ import ImageFile as PILImageFile
+
p = PILImageFile.Parser()
close = False
if hasattr(file_or_path, 'read'):
6 django/core/management/validation.py
View
@@ -47,10 +47,14 @@ def get_validation_errors(outfile, app=None):
if isinstance(f, models.FileField) and not f.upload_to:
e.add(opts, '"%s": FileFields require an "upload_to" attribute.' % f.name)
if isinstance(f, models.ImageField):
+ # Try to import PIL in either of the two ways it can end up installed.
try:
from PIL import Image
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)
+ try:
+ import Image
+ 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)
if isinstance(f, models.BooleanField) and getattr(f, 'null', False):
e.add(opts, '"%s": BooleanFields do not accept null values. Use a NullBooleanField instead.' % f.name)
if f.choices:
7 django/forms/fields.py
View
@@ -467,7 +467,12 @@ def to_python(self, data):
f = super(ImageField, self).to_python(data)
if f is None:
return None
- from PIL import Image
+
+ # Try to import PIL in either of the two ways it can end up installed.
+ try:
+ 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
# have to read the data into memory.
14 tests/modeltests/model_forms/models.py
View
@@ -93,11 +93,15 @@ def __unicode__(self):
return self.description
try:
- # If PIL is available, try testing ImageFields.
- # 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, ImageField tests are omitted.
- from PIL import Image, _imaging
+ # If PIL is available, try testing ImageFields. 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, 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
+ except ImportError:
+ import Image, _imaging
+
test_images = True
class ImageFile(models.Model):
10 tests/regressiontests/file_storage/tests.py
View
@@ -18,12 +18,16 @@
except ImportError:
import dummy_threading as threading
+# 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, you need to check for the underlying modules
try:
- # Checking for the existence of Image is enough for CPython, but
- # for PyPy, you need to check for the underlying modules
from PIL import Image, _imaging
except ImportError:
- Image = None
+ try:
+ import Image, _imaging
+ except ImportError:
+ Image = None
class FileStorageTests(unittest.TestCase):
storage_class = FileSystemStorage
11 tests/regressiontests/model_fields/models.py
View
@@ -6,12 +6,17 @@
except ImportError:
from django.utils import _decimal as decimal # Python 2.3 fallback
+# 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,
+# you need to check for the underlying modules.
+
try:
- # Checking for the existence of Image is enough for CPython, but for PyPy,
- # you need to check for the underlying modules.
from PIL import Image, _imaging
except ImportError:
- Image = None
+ try:
+ import Image, _imaging
+ except ImportError:
+ Image = None
from django.core.files.storage import FileSystemStorage
from django.db import models
Please sign in to comment.
Something went wrong with that request. Please try again.