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.