From 1c26a2ea5cabc90cc3e4bbc9fa48a9ced4ee7cd6 Mon Sep 17 00:00:00 2001 From: nex2hex Date: Tue, 24 Sep 2013 15:18:59 +0400 Subject: [PATCH] Add __getstate__ method to ImageCacheFile --- imagekit/cachefiles/__init__.py | 9 +++++++++ tests/test_serialization.py | 14 +++++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/imagekit/cachefiles/__init__.py b/imagekit/cachefiles/__init__.py index 2c602ff..ec4b356 100644 --- a/imagekit/cachefiles/__init__.py +++ b/imagekit/cachefiles/__init__.py @@ -1,3 +1,4 @@ +from copy import copy from django.conf import settings from django.core.files import File from django.core.files.images import ImageFile @@ -129,6 +130,14 @@ class ImageCacheFile(BaseIKFile, ImageFile): existence_required.send(sender=self, file=self) return self.cachefile_backend.exists(self) + def __getstate__(self): + state = copy(self.__dict__) + + # file is hidden link to "file" attribute + state.pop('_file', None) + + return state + class LazyImageCacheFile(SimpleLazyObject): def __init__(self, generator_id, *args, **kwargs): diff --git a/tests/test_serialization.py b/tests/test_serialization.py index 85ab157..9b68af9 100644 --- a/tests/test_serialization.py +++ b/tests/test_serialization.py @@ -4,7 +4,9 @@ deserialized. This is important when using IK with Celery. """ -from .utils import create_photo, pickleback +from imagekit.cachefiles import ImageCacheFile +from .imagegenerators import TestSpec +from .utils import create_photo, pickleback, get_unique_image_file def test_imagespecfield(): @@ -23,3 +25,13 @@ def test_circular_ref(): instance = create_photo('pickletest3.jpg') instance.thumbnail # Cause thumbnail to be added to instance's __dict__ pickleback(instance) + + +def test_cachefiles(): + spec = TestSpec(source=get_unique_image_file()) + file = ImageCacheFile(spec) + file.url + # remove link to file from spec source generator + # test __getstate__ of ImageCacheFile + file.generator.source = None + pickleback(file)