mirror of
				https://github.com/django/django.git
				synced 2025-10-31 01:25:32 +00:00 
			
		
		
		
	Required because we declare a custom __eq__ method. git-svn-id: http://code.djangoproject.com/svn/django/trunk@9997 bcc190cf-cafb-0310-a4f2-bffc1f526a37
		
			
				
	
	
		
			90 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			90 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import os
 | |
| import tempfile
 | |
| import shutil
 | |
| from django.db import models
 | |
| from django.core.files.storage import FileSystemStorage
 | |
| from django.core.files.base import ContentFile
 | |
| 
 | |
| temp_storage_dir = tempfile.mkdtemp()
 | |
| temp_storage = FileSystemStorage(temp_storage_dir)
 | |
| 
 | |
| # Test for correct behavior of width_field/height_field.
 | |
| # Of course, we can't run this without PIL.
 | |
| 
 | |
| 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
 | |
| 
 | |
| # If we have PIL, do these tests
 | |
| if Image:
 | |
|     class Person(models.Model):
 | |
|         name = models.CharField(max_length=50)
 | |
|         mugshot = models.ImageField(storage=temp_storage, upload_to='tests',
 | |
|                                     height_field='mug_height',
 | |
|                                     width_field='mug_width')
 | |
|         mug_height = models.PositiveSmallIntegerField()
 | |
|         mug_width = models.PositiveSmallIntegerField()
 | |
| 
 | |
|     __test__ = {'API_TESTS': """
 | |
| 
 | |
| >>> image_data = open(os.path.join(os.path.dirname(__file__), "test.png"), 'rb').read()
 | |
| >>> p = Person(name="Joe")
 | |
| >>> p.mugshot.save("mug", ContentFile(image_data))
 | |
| >>> p.mugshot.width
 | |
| 16
 | |
| >>> p.mugshot.height
 | |
| 16
 | |
| >>> p.mug_height
 | |
| 16
 | |
| >>> p.mug_width
 | |
| 16
 | |
| 
 | |
| # Bug #9786: Ensure '==' and '!=' work correctly.
 | |
| >>> image_data = open(os.path.join(os.path.dirname(__file__), "test1.png"), 'rb').read()
 | |
| >>> p1 = Person(name="Bob")
 | |
| >>> p1.mugshot.save("mug", ContentFile(image_data))
 | |
| >>> p2 = Person.objects.get(name="Joe")
 | |
| >>> p.mugshot == p2.mugshot
 | |
| True
 | |
| >>> p.mugshot != p2.mugshot
 | |
| False
 | |
| >>> p.mugshot != p1.mugshot
 | |
| True
 | |
| 
 | |
| Bug #9508: Similarly to the previous test, make sure hash() works as expected
 | |
| (equal items must hash to the same value).
 | |
| >>> hash(p.mugshot) == hash(p2.mugshot)
 | |
| True
 | |
| 
 | |
| # Bug #8175: correctly delete files that have been removed off the file system.
 | |
| >>> import os
 | |
| >>> p2 = Person(name="Fred")
 | |
| >>> p2.mugshot.save("shot", ContentFile(image_data))
 | |
| >>> os.remove(p2.mugshot.path)
 | |
| >>> p2.delete()
 | |
| 
 | |
| # Bug #8534: FileField.size should not leave the file open.
 | |
| >>> p3 = Person(name="Joan")
 | |
| >>> p3.mugshot.save("shot", ContentFile(image_data))
 | |
| 
 | |
| # Get a "clean" model instance
 | |
| >>> p3 = Person.objects.get(name="Joan")
 | |
| 
 | |
| # It won't have an opened file. This is a bit brittle since it depends on the
 | |
| # the internals of FieldFile, but there's no other way of telling if the
 | |
| # file's been opened or not.
 | |
| >>> hasattr(p3.mugshot, '_file')
 | |
| False
 | |
| 
 | |
| # After asking for the size, the file should still be closed.
 | |
| >>> _ = p3.mugshot.size
 | |
| >>> hasattr(p3.mugshot, '_file')
 | |
| False
 | |
| 
 | |
| >>> shutil.rmtree(temp_storage_dir)
 | |
| """}
 | |
| 
 |