Add async cachefile backend

This commit is contained in:
Matthew Tretter 2013-04-02 22:29:53 -04:00
parent 86cd23e906
commit 728368abf6
3 changed files with 34 additions and 1 deletions

View file

@ -45,7 +45,6 @@ class ImageCacheFile(BaseIKFile, ImageFile):
def _require_file(self):
before_access.send(sender=self, file=self)
return super(ImageCacheFile, self)._require_file()
def generate(self, force=False):
"""

View file

@ -101,3 +101,34 @@ class Simple(CachedFileBackend):
def _exists(self, file):
return bool(getattr(file, '_file', None)
or file.storage.exists(file.name))
def _generate_file(backend, file):
file._generate()
backend.set_state(file, CacheFileState.EXISTS)
try:
import celery
except ImportError:
pass
else:
_generate_file = celery.task(ignore_result=True)(_generate_file)
class Async(Simple):
"""
A backend that uses Celery to generate the images.
"""
def __init__(self, *args, **kwargs):
try:
import celery
except ImportError:
raise ImproperlyConfigured('You must install celery to use'
' imagekit.cachefiles.backend.Async.')
super(Async, self).__init__(*args, **kwargs)
def _generate(self, file):
self.set_state(file, CacheFileState.PENDING)
_generate_file.delay(self, file)

View file

@ -52,6 +52,9 @@ setup(
'django-appconf>=0.5',
'pilkit',
],
extras_require={
'async': ['django-celery>=3.0'],
},
classifiers=[
'Development Status :: 5 - Production/Stable',
'Environment :: Web Environment',