Extract suggest_extension util from generator

This commit is contained in:
Matthew Tretter 2012-04-19 21:18:42 -04:00
parent 6e4a8d1b58
commit 8044b97a33
4 changed files with 32 additions and 29 deletions

View file

@ -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

View file

@ -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)

View file

@ -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,

View file

@ -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