mirror of
https://github.com/pinry/pinry.git
synced 2025-11-13 16:45:41 +01:00
Use caller's Image object when fetching or creating a thumbnail.
This commit is contained in:
@@ -36,7 +36,7 @@ class ImageManager(models.Manager):
|
|||||||
# try to create thumbnails one by one later
|
# try to create thumbnails one by one later
|
||||||
image = self.create(image=obj)
|
image = self.create(image=obj)
|
||||||
for size in settings.IMAGE_SIZES.keys():
|
for size in settings.IMAGE_SIZES.keys():
|
||||||
Thumbnail.objects.get_or_create_at_size(image.pk, size)
|
Thumbnail.objects.get_or_create_at_size(image, size)
|
||||||
return image
|
return image
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ class ImageSerializer(serializers.ModelSerializer):
|
|||||||
def create(self, validated_data):
|
def create(self, validated_data):
|
||||||
image = super(ImageSerializer, self).create(validated_data)
|
image = super(ImageSerializer, self).create(validated_data)
|
||||||
for size in settings.IMAGE_SIZES:
|
for size in settings.IMAGE_SIZES:
|
||||||
Thumbnail.objects.get_or_create_at_size(image.pk, size)
|
Thumbnail.objects.get_or_create_at_size(image, size)
|
||||||
return image
|
return image
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ from core.models import Pin, Image
|
|||||||
|
|
||||||
def filter_generator_for(size):
|
def filter_generator_for(size):
|
||||||
def wrapped_func(obj):
|
def wrapped_func(obj):
|
||||||
return Thumbnail.objects.get_or_create_at_size(obj.pk, size)
|
return Thumbnail.objects.get_or_create_at_size(obj, size)
|
||||||
return wrapped_func
|
return wrapped_func
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ def create_tag(name):
|
|||||||
def create_image():
|
def create_image():
|
||||||
image = Image.objects.create(image=ImageFile(open(TEST_IMAGE_PATH, 'rb')))
|
image = Image.objects.create(image=ImageFile(open(TEST_IMAGE_PATH, 'rb')))
|
||||||
for size in settings.IMAGE_SIZES.keys():
|
for size in settings.IMAGE_SIZES.keys():
|
||||||
Thumbnail.objects.get_or_create_at_size(image.pk, size)
|
Thumbnail.objects.get_or_create_at_size(image, size)
|
||||||
return image
|
return image
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -67,8 +67,7 @@ class Image(models.Model):
|
|||||||
|
|
||||||
|
|
||||||
class ThumbnailManager(models.Manager):
|
class ThumbnailManager(models.Manager):
|
||||||
def get_or_create_at_size(self, image_id, size):
|
def get_or_create_at_size(self, image, size):
|
||||||
image = Image.objects.get(id=image_id)
|
|
||||||
if size not in IMAGE_SIZES:
|
if size not in IMAGE_SIZES:
|
||||||
raise ValueError("Received unknown size: %s" % size)
|
raise ValueError("Received unknown size: %s" % size)
|
||||||
try:
|
try:
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ class ImageModelTest(TestCase):
|
|||||||
|
|
||||||
def test_get_by_size(self):
|
def test_get_by_size(self):
|
||||||
size = list(settings.IMAGE_SIZES.keys())[0]
|
size = list(settings.IMAGE_SIZES.keys())[0]
|
||||||
Thumbnail.objects.get_or_create_at_size(self.image.id, size)
|
Thumbnail.objects.get_or_create_at_size(self.image, size)
|
||||||
self.image.get_by_size(size)
|
self.image.get_by_size(size)
|
||||||
|
|
||||||
def test_get_absolute_url(self):
|
def test_get_absolute_url(self):
|
||||||
@@ -28,7 +28,7 @@ class ImageModelTest(TestCase):
|
|||||||
self.assertEqual(url, self.image.image.url)
|
self.assertEqual(url, self.image.image.url)
|
||||||
# For thumbnail
|
# For thumbnail
|
||||||
size = list(settings.IMAGE_SIZES.keys())[0]
|
size = list(settings.IMAGE_SIZES.keys())[0]
|
||||||
thumb = Thumbnail.objects.get_or_create_at_size(self.image.id, size)
|
thumb = Thumbnail.objects.get_or_create_at_size(self.image, size)
|
||||||
url = self.image.get_absolute_url(size)
|
url = self.image.get_absolute_url(size)
|
||||||
self.assertEqual(url, thumb.image.url)
|
self.assertEqual(url, thumb.image.url)
|
||||||
# Fallback on creation url
|
# Fallback on creation url
|
||||||
@@ -49,16 +49,16 @@ class ThumbnailManagerModelTest(TestCase):
|
|||||||
|
|
||||||
def test_unknown_size(self):
|
def test_unknown_size(self):
|
||||||
self.assertRaises(ValueError, Thumbnail.objects.get_or_create_at_size,
|
self.assertRaises(ValueError, Thumbnail.objects.get_or_create_at_size,
|
||||||
self.image.id, 'foo')
|
self.image, 'foo')
|
||||||
|
|
||||||
# TODO: Test the image object and data
|
# TODO: Test the image object and data
|
||||||
def test_create(self):
|
def test_create(self):
|
||||||
Thumbnail.objects.get_or_create_at_size(self.image.id, self.size)
|
Thumbnail.objects.get_or_create_at_size(self.image, self.size)
|
||||||
self.assertEqual(self.image.thumbnail_set.count(), 1)
|
self.assertEqual(self.image.thumbnail_set.count(), 1)
|
||||||
|
|
||||||
def test_get(self):
|
def test_get(self):
|
||||||
thumb = Thumbnail.objects.get_or_create_at_size(self.image.id, self.size)
|
thumb = Thumbnail.objects.get_or_create_at_size(self.image, self.size)
|
||||||
thumb2 = Thumbnail.objects.get_or_create_at_size(self.image.id, self.size)
|
thumb2 = Thumbnail.objects.get_or_create_at_size(self.image, self.size)
|
||||||
self.assertEqual(thumb.id, thumb2.id)
|
self.assertEqual(thumb.id, thumb2.id)
|
||||||
|
|
||||||
|
|
||||||
@@ -70,7 +70,7 @@ class ThumbnailModelTest(TestCase):
|
|||||||
self.image = Image.objects.create(width=370, height=370,
|
self.image = Image.objects.create(width=370, height=370,
|
||||||
image=ImageFile(image_obj, '01.png'))
|
image=ImageFile(image_obj, '01.png'))
|
||||||
size = list(settings.IMAGE_SIZES.keys())[0]
|
size = list(settings.IMAGE_SIZES.keys())[0]
|
||||||
self.thumb = Thumbnail.objects.get_or_create_at_size(self.image.id, size)
|
self.thumb = Thumbnail.objects.get_or_create_at_size(self.image, size)
|
||||||
|
|
||||||
def test_get_absolute_url(self):
|
def test_get_absolute_url(self):
|
||||||
url = self.thumb.get_absolute_url()
|
url = self.thumb.get_absolute_url()
|
||||||
@@ -85,11 +85,11 @@ class PostSaveSignalOriginalChangedTestCase(TestCase):
|
|||||||
self.image = Image.objects.create(width=370, height=370,
|
self.image = Image.objects.create(width=370, height=370,
|
||||||
image=ImageFile(image_obj, '01.png'))
|
image=ImageFile(image_obj, '01.png'))
|
||||||
size = list(settings.IMAGE_SIZES.keys())[0]
|
size = list(settings.IMAGE_SIZES.keys())[0]
|
||||||
self.thumb = Thumbnail.objects.get_or_create_at_size(self.image.id, size)
|
self.thumb = Thumbnail.objects.get_or_create_at_size(self.image, size)
|
||||||
|
|
||||||
def test_post_save_signal_original_changed(self):
|
def test_post_save_signal_original_changed(self):
|
||||||
size = list(settings.IMAGE_SIZES.keys())[0]
|
size = list(settings.IMAGE_SIZES.keys())[0]
|
||||||
Thumbnail.objects.get_or_create_at_size(self.image.id, size)
|
Thumbnail.objects.get_or_create_at_size(self.image, size)
|
||||||
self.image.delete()
|
self.image.delete()
|
||||||
self.assertFalse(Thumbnail.objects.exists())
|
self.assertFalse(Thumbnail.objects.exists())
|
||||||
|
|
||||||
@@ -102,7 +102,7 @@ class PostDeleteSignalDeleteImageFileTest(TestCase):
|
|||||||
self.image = Image.objects.create(width=370, height=370,
|
self.image = Image.objects.create(width=370, height=370,
|
||||||
image=ImageFile(image_obj, '01.png'))
|
image=ImageFile(image_obj, '01.png'))
|
||||||
size = list(settings.IMAGE_SIZES.keys())[0]
|
size = list(settings.IMAGE_SIZES.keys())[0]
|
||||||
self.thumb = Thumbnail.objects.get_or_create_at_size(self.image.id, size)
|
self.thumb = Thumbnail.objects.get_or_create_at_size(self.image, size)
|
||||||
|
|
||||||
@mock.patch('django_images.models.IMAGE_AUTO_DELETE', True)
|
@mock.patch('django_images.models.IMAGE_AUTO_DELETE', True)
|
||||||
def test_post_delete_signal_delete_image_files_enabled(self):
|
def test_post_delete_signal_delete_image_files_enabled(self):
|
||||||
@@ -136,7 +136,7 @@ class AtSizeTemplateTagTest(TestCase):
|
|||||||
self.image = Image.objects.create(width=370, height=370,
|
self.image = Image.objects.create(width=370, height=370,
|
||||||
image=ImageFile(image_obj, '01.png'))
|
image=ImageFile(image_obj, '01.png'))
|
||||||
size = list(settings.IMAGE_SIZES.keys())[0]
|
size = list(settings.IMAGE_SIZES.keys())[0]
|
||||||
self.thumb = Thumbnail.objects.get_or_create_at_size(self.image.id, size)
|
self.thumb = Thumbnail.objects.get_or_create_at_size(self.image, size)
|
||||||
|
|
||||||
def test_at_size(self):
|
def test_at_size(self):
|
||||||
size = list(settings.IMAGE_SIZES.keys())[0]
|
size = list(settings.IMAGE_SIZES.keys())[0]
|
||||||
@@ -152,7 +152,7 @@ class ThumbnailViewTest(TestCase):
|
|||||||
self.image = Image.objects.create(width=370, height=370,
|
self.image = Image.objects.create(width=370, height=370,
|
||||||
image=ImageFile(image_obj, '01.png'))
|
image=ImageFile(image_obj, '01.png'))
|
||||||
self.size = list(settings.IMAGE_SIZES.keys())[0]
|
self.size = list(settings.IMAGE_SIZES.keys())[0]
|
||||||
self.thumb = Thumbnail.objects.get_or_create_at_size(self.image.id, self.size)
|
self.thumb = Thumbnail.objects.get_or_create_at_size(self.image, self.size)
|
||||||
|
|
||||||
def test_redirect(self):
|
def test_redirect(self):
|
||||||
url = reverse('image-thumbnail', args=[self.image.id, self.size])
|
url = reverse('image-thumbnail', args=[self.image.id, self.size])
|
||||||
|
|||||||
@@ -1,14 +1,13 @@
|
|||||||
from django.http import HttpResponseNotFound
|
from django.http import HttpResponseNotFound
|
||||||
from django.shortcuts import get_object_or_404, redirect
|
from django.shortcuts import get_object_or_404, redirect
|
||||||
|
|
||||||
from . import models
|
from .models import Image, Thumbnail
|
||||||
from .settings import IMAGE_SIZES
|
from .settings import IMAGE_SIZES
|
||||||
|
|
||||||
|
|
||||||
def thumbnail(request, image_id, size):
|
def thumbnail(request, image_id, size):
|
||||||
image = get_object_or_404(models.Image, id=image_id)
|
image = get_object_or_404(Image, id=image_id)
|
||||||
if size not in IMAGE_SIZES:
|
if size not in IMAGE_SIZES:
|
||||||
return HttpResponseNotFound()
|
return HttpResponseNotFound()
|
||||||
|
|
||||||
return redirect(models.Thumbnail.objects.get_or_create_at_size(image.id,
|
return redirect(Thumbnail.objects.get_or_create_at_size(image, size))
|
||||||
size))
|
|
||||||
|
|||||||
Reference in New Issue
Block a user