From d1af56ba3e44e44b9ebb5423357d17bc16ab87a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timothe=CC=81e=20Peignier?= Date: Thu, 15 Mar 2012 10:37:28 +0100 Subject: [PATCH] ensure task is correctly created --- imagekit/imagecache/celery.py | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/imagekit/imagecache/celery.py b/imagekit/imagecache/celery.py index 973f2f3..7e3cf46 100644 --- a/imagekit/imagecache/celery.py +++ b/imagekit/imagecache/celery.py @@ -4,6 +4,15 @@ from __future__ import absolute_import from imagekit.imagecache import PessimisticImageCacheBackend, InvalidImageCacheBackendError +def generate(model, pk, attr): + try: + instance = model._default_manager.get(pk=pk) + except model.DoesNotExist: + pass # The model was deleted since the task was scheduled. NEVER MIND! + else: + getattr(instance, attr).generate(save=True) + + class CeleryImageCacheBackend(PessimisticImageCacheBackend): """ A pessimistic cache state backend that uses celery to generate its spec @@ -19,23 +28,11 @@ class CeleryImageCacheBackend(PessimisticImageCacheBackend): """ def __init__(self): try: - import celery + from celery.task import task except: raise InvalidImageCacheBackendError("Celery image cache backend requires either the 'celery' library") - - @property - def _task(self): - from celery.task import task - - @task - def generate(model, pk, attr): - try: - instance = model._default_manager.get(pk=pk) - except model.DoesNotExist: - pass # The model was deleted since the task was scheduled. NEVER MIND! - else: - getattr(instance, attr).generate(save=True) - return generate + if not getattr(CeleryImageCacheBackend, '_task', None): + CeleryImageCacheBackend._task = task(generate) def invalidate(self, file): self._task.delay(file.instance.__class__, file.instance.pk, file.attname)