From 8044b97a33a51fce0cb365b4c9062cdd487698e7 Mon Sep 17 00:00:00 2001 From: Matthew Tretter Date: Thu, 19 Apr 2012 21:18:42 -0400 Subject: [PATCH] Extract suggest_extension util from generator --- imagekit/generators.py | 27 ++------------------------- imagekit/models/fields/__init__.py | 3 ++- imagekit/models/fields/files.py | 7 ++++--- imagekit/utils.py | 24 ++++++++++++++++++++++++ 4 files changed, 32 insertions(+), 29 deletions(-) diff --git a/imagekit/generators.py b/imagekit/generators.py index bdda2c1..a104772 100644 --- a/imagekit/generators.py +++ b/imagekit/generators.py @@ -7,9 +7,8 @@ from django.core.files.base import ContentFile from django.utils.encoding import smart_str, smart_unicode from .processors import ProcessorPipeline, AutoConvert -from .utils import img_to_fobj, open_image, \ - format_to_extension, extension_to_format, UnknownFormatError, \ - UnknownExtensionError +from .utils import (img_to_fobj, open_image, extension_to_format, + UnknownExtensionError) class SpecFile(ContentFile): @@ -76,28 +75,6 @@ class SpecFileGenerator(object): content = SpecFile(filename, imgfile.read()) return img, content - def suggest_extension(self, name): - original_extension = os.path.splitext(name)[1] - try: - suggested_extension = format_to_extension(self.format) - except UnknownFormatError: - extension = original_extension - else: - if suggested_extension.lower() == original_extension.lower(): - extension = original_extension - else: - try: - original_format = extension_to_format(original_extension) - except UnknownExtensionError: - extension = suggested_extension - else: - # If the formats match, give precedence to the original extension. - if self.format.lower() == original_format.lower(): - extension = original_extension - else: - extension = suggested_extension - return extension - def generate_file(self, filename, source_file, save=True): """ Generates a new image file by processing the source file and returns diff --git a/imagekit/models/fields/__init__.py b/imagekit/models/fields/__init__.py index 990e5c3..b04443f 100644 --- a/imagekit/models/fields/__init__.py +++ b/imagekit/models/fields/__init__.py @@ -7,6 +7,7 @@ from ...imagecache import get_default_image_cache_backend from ...generators import SpecFileGenerator from .files import ImageSpecFieldFile, ProcessedImageFieldFile from .utils import ImageSpecFileDescriptor, ImageKitMeta, BoundImageKitMeta +from ...utils import suggest_extension class ImageSpecField(object): @@ -169,7 +170,7 @@ class ProcessedImageField(models.ImageField): filename = os.path.normpath(self.storage.get_valid_name( os.path.basename(filename))) name, ext = os.path.splitext(filename) - ext = self.generator.suggest_extension(filename) + ext = suggest_extension(filename, self.generator.format) return u'%s%s' % (name, ext) diff --git a/imagekit/models/fields/files.py b/imagekit/models/fields/files.py index 1e1d3e4..153c69f 100644 --- a/imagekit/models/fields/files.py +++ b/imagekit/models/fields/files.py @@ -4,6 +4,8 @@ import datetime from django.db.models.fields.files import ImageField, ImageFieldFile from django.utils.encoding import force_unicode, smart_str +from ...utils import suggest_extension + class ImageSpecFieldFile(ImageFieldFile): def __init__(self, instance, field, attname): @@ -118,9 +120,8 @@ class ImageSpecFieldFile(ImageFieldFile): raise Exception('No cache_to or default_cache_to value' ' specified') if callable(cache_to): - suggested_extension = \ - self.field.generator.suggest_extension( - self.source_file.name) + suggested_extension = suggest_extension( + self.source_file.name, self.field.generator.format) new_filename = force_unicode( datetime.datetime.now().strftime( smart_str(cache_to(self.instance, diff --git a/imagekit/utils.py b/imagekit/utils.py index 305bdd4..5d21e71 100644 --- a/imagekit/utils.py +++ b/imagekit/utils.py @@ -1,3 +1,4 @@ +import os import tempfile import types @@ -165,3 +166,26 @@ def validate_app_cache(apps, force_revalidation=False): if force_revalidation: f.invalidate() f.validate() + + +def suggest_extension(name, format): + original_extension = os.path.splitext(name)[1] + try: + suggested_extension = format_to_extension(format) + except UnknownFormatError: + extension = original_extension + else: + if suggested_extension.lower() == original_extension.lower(): + extension = original_extension + else: + try: + original_format = extension_to_format(original_extension) + except UnknownExtensionError: + extension = suggested_extension + else: + # If the formats match, give precedence to the original extension. + if format.lower() == original_format.lower(): + extension = original_extension + else: + extension = suggested_extension + return extension