django-imagekit/imagekit/imagecache/backends/celery.py
2012-09-06 09:11:18 -04:00

35 lines
1 KiB
Python

# -*- coding: utf-8 -*-
from __future__ import absolute_import
from .base import InvalidImageCacheBackendError, Simple as SimpleBackend
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:
field_file = getattr(instance, attr)
field_file.delete(save=False)
field_file.generate(save=True)
class CeleryBackend(SimpleBackend):
"""
An image cache backend that uses celery to generate images.
"""
def __init__(self):
try:
from celery.task import task
except:
raise InvalidImageCacheBackendError("Celery validation backend requires the 'celery' library")
if not getattr(CeleryBackend, '_task', None):
CeleryBackend._task = task(generate)
def invalidate(self, file):
self._task.delay(file.instance.__class__, file.instance.pk, file.attname)
def clear(self, file):
file.delete(save=False)