From 236eea8459975de8f0f5eec593fe2f302a6ee8e6 Mon Sep 17 00:00:00 2001 From: Matthew Tretter Date: Sat, 1 Dec 2012 22:09:34 -0500 Subject: [PATCH] Move filename generation to generator --- imagekit/files.py | 12 +++--------- imagekit/specs/__init__.py | 17 +++++++++++++---- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/imagekit/files.py b/imagekit/files.py index 5c7b5ee..52836de 100644 --- a/imagekit/files.py +++ b/imagekit/files.py @@ -4,8 +4,8 @@ from django.core.files.images import ImageFile from django.utils.encoding import smart_str, smart_unicode import os from .signals import before_access -from .utils import (format_to_mimetype, format_to_extension, - extension_to_mimetype, get_logger, get_singleton) +from .utils import (format_to_mimetype, extension_to_mimetype, get_logger, + get_singleton) class BaseIKFile(File): @@ -92,14 +92,8 @@ class GeneratedImageCacheFile(BaseIKFile, ImageFile): 'file storage backend') super(GeneratedImageCacheFile, self).__init__(storage=storage) - def get_default_filename(self): - hash = self.generator.get_hash() - ext = format_to_extension(self.generator.format) - return os.path.join(settings.IMAGEKIT_CACHE_DIR, - '%s%s' % (hash, ext)) - def _get_name(self): - return self._name or self.get_default_filename() + return self._name or self.generator.get_filename() def _set_name(self, value): self._name = value diff --git a/imagekit/specs/__init__.py b/imagekit/specs/__init__.py index 961e89f..effd56e 100644 --- a/imagekit/specs/__init__.py +++ b/imagekit/specs/__init__.py @@ -7,7 +7,8 @@ from ..files import GeneratedImageCacheFile, IKContentFile from ..imagecache.backends import get_default_image_cache_backend from ..imagecache.strategies import StrategyWrapper from ..processors import ProcessorPipeline -from ..utils import open_image, extension_to_format, img_to_fobj +from ..utils import (open_image, extension_to_format, img_to_fobj, + suggest_extension) from ..registry import generator_registry, register @@ -40,9 +41,6 @@ class BaseImageSpec(object): self.image_cache_backend = self.image_cache_backend or get_default_image_cache_backend() self.image_cache_strategy = StrategyWrapper(self.image_cache_strategy) - def get_hash(self): - raise NotImplementedError - def generate(self, source_file, filename=None): raise NotImplementedError @@ -91,6 +89,17 @@ class ImageSpec(BaseImageSpec): self.kwargs = kwargs super(ImageSpec, self).__init__() + def get_filename(self): + source_filename = self.kwargs['source_file'].name + ext = suggest_extension(source_filename, self.format) + return os.path.normpath(os.path.join( + settings.IMAGEKIT_CACHE_DIR, + os.path.splitext(source_filename)[0], + '%s%s' % (self.get_hash(), ext))) + + return os.path.join(settings.IMAGEKIT_CACHE_DIR, + '%s%s' % (hash, ext)) + def get_hash(self): return md5(''.join([ pickle.dumps(self.kwargs),