Author: jacob
Date: 2010-02-14 12:28:28 -0600 (Sun, 14 Feb 2010)
New Revision: 12429

Modified:
   django/trunk/django/core/files/images.py
   django/trunk/django/core/management/validation.py
   django/trunk/django/forms/fields.py
   django/trunk/tests/modeltests/model_forms/models.py
   django/trunk/tests/regressiontests/file_storage/tests.py
   django/trunk/tests/regressiontests/model_fields/models.py
Log:
Fixed #6054: work around PIL's installation brokeness by detecting either of 
the two ways it can end up being installed.

Modified: django/trunk/django/core/files/images.py
===================================================================
--- django/trunk/django/core/files/images.py    2010-02-13 14:44:07 UTC (rev 
12428)
+++ django/trunk/django/core/files/images.py    2010-02-14 18:28:28 UTC (rev 
12429)
@@ -30,7 +30,12 @@
 
 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'):

Modified: django/trunk/django/core/management/validation.py
===================================================================
--- django/trunk/django/core/management/validation.py   2010-02-13 14:44:07 UTC 
(rev 12428)
+++ django/trunk/django/core/management/validation.py   2010-02-14 18:28:28 UTC 
(rev 12429)
@@ -47,10 +47,14 @@
             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:

Modified: django/trunk/django/forms/fields.py
===================================================================
--- django/trunk/django/forms/fields.py 2010-02-13 14:44:07 UTC (rev 12428)
+++ django/trunk/django/forms/fields.py 2010-02-14 18:28:28 UTC (rev 12429)
@@ -467,7 +467,12 @@
         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.

Modified: django/trunk/tests/modeltests/model_forms/models.py
===================================================================
--- django/trunk/tests/modeltests/model_forms/models.py 2010-02-13 14:44:07 UTC 
(rev 12428)
+++ django/trunk/tests/modeltests/model_forms/models.py 2010-02-14 18:28:28 UTC 
(rev 12429)
@@ -93,11 +93,15 @@
         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):

Modified: django/trunk/tests/regressiontests/file_storage/tests.py
===================================================================
--- django/trunk/tests/regressiontests/file_storage/tests.py    2010-02-13 
14:44:07 UTC (rev 12428)
+++ django/trunk/tests/regressiontests/file_storage/tests.py    2010-02-14 
18:28:28 UTC (rev 12429)
@@ -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

Modified: django/trunk/tests/regressiontests/model_fields/models.py
===================================================================
--- django/trunk/tests/regressiontests/model_fields/models.py   2010-02-13 
14:44:07 UTC (rev 12428)
+++ django/trunk/tests/regressiontests/model_fields/models.py   2010-02-14 
18:28:28 UTC (rev 12429)
@@ -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

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to django-upda...@googlegroups.com.
To unsubscribe from this group, send email to 
django-updates+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en.

Reply via email to