Store cachefile strategy on file; not generator

The file can appeal to the generator for the value, but it shouldn't
require it; it just does that as a convenience.
This commit is contained in:
Matthew Tretter 2013-05-10 00:51:47 -04:00
parent d5d5fc0550
commit 06dd238993
3 changed files with 14 additions and 6 deletions

View file

@ -15,7 +15,7 @@ class ImageCacheFile(BaseIKFile, ImageFile):
to be deferred until the time that the cache file strategy requires it.
"""
def __init__(self, generator, name=None, storage=None, cachefile_backend=None):
def __init__(self, generator, name=None, storage=None, cachefile_backend=None, cachefile_strategy=None):
"""
:param generator: The object responsible for generating a new image.
:param name: The filename
@ -23,6 +23,8 @@ class ImageCacheFile(BaseIKFile, ImageFile):
file.
:param cachefile_backend: The object responsible for managing the
state of the file.
:param cachefile_strategy: The object responsible for handling events
for this file.
"""
self.generator = generator
@ -43,6 +45,12 @@ class ImageCacheFile(BaseIKFile, ImageFile):
or getattr(generator, 'cachefile_backend', None)
or get_singleton(settings.IMAGEKIT_DEFAULT_CACHEFILE_BACKEND,
'cache file backend'))
self.cachefile_strategy = (
cachefile_strategy
or getattr(generator, 'cachefile_strategy', None)
or get_singleton(settings.IMAGEKIT_DEFAULT_CACHEFILE_STRATEGY,
'cache file strategy')
)
super(ImageCacheFile, self).__init__(storage=storage)

View file

@ -48,7 +48,7 @@ class GeneratorRegistry(object):
# FIXME: I guess this means you can't register functions?
if generator.__class__ in self._generators.values():
# Only invoke the strategy method for registered generators.
call_strategy_method(generator, 'before_access', file=file)
call_strategy_method(file, 'before_access')
class SourceGroupRegistry(object):
@ -105,7 +105,7 @@ class SourceGroupRegistry(object):
for spec in specs:
file = ImageCacheFile(spec)
call_strategy_method(spec, callback_name, file=file)
call_strategy_method(file, callback_name)
class CacheFileRegistry(object):

View file

@ -124,11 +124,11 @@ def generate(generator):
return File(content)
def call_strategy_method(generator, method_name, *args, **kwargs):
strategy = getattr(generator, 'cachefile_strategy', None)
def call_strategy_method(file, method_name):
strategy = getattr(file, 'cachefile_strategy', None)
fn = getattr(strategy, method_name, None)
if fn is not None:
fn(*args, **kwargs)
fn(file)
def sanitize_cache_key(key):