mirror of
https://github.com/Hopiu/django-imagekit.git
synced 2026-03-17 05:40:25 +00:00
Allow default generatedfile name configuration w/namers
This commit is contained in:
parent
bf1685dbfb
commit
e1c819e9b4
4 changed files with 57 additions and 18 deletions
|
|
@ -5,6 +5,8 @@ from django.conf import settings
|
|||
class ImageKitConf(AppConf):
|
||||
DEFAULT_GENERATEDFILE_BACKEND = 'imagekit.generatedfiles.backends.Simple'
|
||||
CACHE_BACKEND = None
|
||||
GENERATEDFILE_NAMER = 'imagekit.generatedfiles.namers.hash'
|
||||
SPEC_GENERATEDFILE_NAMER = 'imagekit.generatedfiles.namers.source_name_as_path'
|
||||
GENERATED_FILE_DIR = 'generated/images'
|
||||
CACHE_PREFIX = 'imagekit:'
|
||||
DEFAULT_GENERATEDFILE_STRATEGY = 'imagekit.generatedfiles.strategies.JustInTime'
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ from django.utils.functional import LazyObject
|
|||
from ..files import BaseIKFile
|
||||
from ..registry import generator_registry
|
||||
from ..signals import before_access
|
||||
from ..utils import get_logger, get_singleton, generate
|
||||
from ..utils import get_logger, get_singleton, generate, get_by_qname
|
||||
|
||||
|
||||
class GeneratedImageFile(BaseIKFile, ImageFile):
|
||||
|
|
@ -27,7 +27,12 @@ class GeneratedImageFile(BaseIKFile, ImageFile):
|
|||
"""
|
||||
self.generator = generator
|
||||
|
||||
self.name = name or getattr(generator, 'generatedfile_name', None)
|
||||
name = name or getattr(generator, 'generatedfile_name', None)
|
||||
if not name:
|
||||
fn = get_by_qname(settings.IMAGEKIT_GENERATEDFILE_NAMER, 'namer')
|
||||
name = fn(generator)
|
||||
self.name = name
|
||||
|
||||
storage = storage or getattr(generator, 'generatedfile_storage',
|
||||
None) or get_singleton(settings.IMAGEKIT_DEFAULT_FILE_STORAGE,
|
||||
'file storage backend')
|
||||
|
|
|
|||
45
imagekit/generatedfiles/namers.py
Normal file
45
imagekit/generatedfiles/namers.py
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
from django.conf import settings
|
||||
import os
|
||||
from ..utils import format_to_extension, suggest_extension
|
||||
|
||||
|
||||
def source_name_as_path(generator):
|
||||
source_filename = getattr(generator.source, 'name', None)
|
||||
|
||||
if source_filename is None or os.path.isabs(source_filename):
|
||||
# Generally, we put the file right in the generated file directory.
|
||||
dir = settings.IMAGEKIT_GENERATED_FILE_DIR
|
||||
else:
|
||||
# For source files with relative names (like Django media files),
|
||||
# use the source's name to create the new filename.
|
||||
dir = os.path.join(settings.IMAGEKIT_GENERATED_FILE_DIR,
|
||||
os.path.splitext(source_filename)[0])
|
||||
|
||||
ext = suggest_extension(source_filename or '', generator.format)
|
||||
return os.path.normpath(os.path.join(dir,
|
||||
'%s%s' % (generator.get_hash(), ext)))
|
||||
|
||||
|
||||
def source_name_dot_hash(generator):
|
||||
source_filename = getattr(generator.source, 'name', None)
|
||||
|
||||
if source_filename is None or os.path.isabs(source_filename):
|
||||
# Generally, we put the file right in the generated file directory.
|
||||
dir = settings.IMAGEKIT_GENERATED_FILE_DIR
|
||||
else:
|
||||
# For source files with relative names (like Django media files),
|
||||
# use the source's name to create the new filename.
|
||||
dir = os.path.join(settings.IMAGEKIT_GENERATED_FILE_DIR,
|
||||
os.path.dirname(source_filename))
|
||||
|
||||
ext = suggest_extension(source_filename or '', generator.format)
|
||||
basename = os.path.basename(source_filename)
|
||||
return os.path.normpath(os.path.join(dir, '%s.%s%s' % (
|
||||
os.path.splitext(basename)[0], generator.get_hash()[:12], ext)))
|
||||
|
||||
|
||||
def hash(generator):
|
||||
format = getattr(generator, 'format', None)
|
||||
ext = format_to_extension(format) if format else ''
|
||||
return os.path.normpath(os.path.join(settings.IMAGEKIT_GENERATED_FILE_DIR,
|
||||
'%s%s' % (generator.get_hash(), ext)))
|
||||
|
|
@ -1,12 +1,11 @@
|
|||
from django.conf import settings
|
||||
from django.db.models.fields.files import ImageFieldFile
|
||||
from hashlib import md5
|
||||
import os
|
||||
import pickle
|
||||
from ..generatedfiles.backends import get_default_generatedfile_backend
|
||||
from ..generatedfiles.strategies import StrategyWrapper
|
||||
from ..processors import ProcessorPipeline
|
||||
from ..utils import open_image, img_to_fobj, suggest_extension
|
||||
from ..utils import open_image, img_to_fobj, get_by_qname
|
||||
from ..registry import generator_registry, register
|
||||
|
||||
|
||||
|
|
@ -84,20 +83,8 @@ class ImageSpec(BaseImageSpec):
|
|||
|
||||
@property
|
||||
def generatedfile_name(self):
|
||||
source_filename = getattr(self.source, 'name', None)
|
||||
|
||||
if source_filename is None or os.path.isabs(source_filename):
|
||||
# Generally, we put the file right in the generated file directory.
|
||||
dir = settings.IMAGEKIT_GENERATED_FILE_DIR
|
||||
else:
|
||||
# For source files with relative names (like Django media files),
|
||||
# use the source's name to create the new filename.
|
||||
dir = os.path.join(settings.IMAGEKIT_GENERATED_FILE_DIR,
|
||||
os.path.splitext(source_filename)[0])
|
||||
|
||||
ext = suggest_extension(source_filename or '', self.format)
|
||||
return os.path.normpath(os.path.join(dir,
|
||||
'%s%s' % (self.get_hash(), ext)))
|
||||
fn = get_by_qname(settings.IMAGEKIT_SPEC_GENERATEDFILE_NAMER, 'namer')
|
||||
return fn(self)
|
||||
|
||||
def __getstate__(self):
|
||||
state = self.__dict__
|
||||
|
|
|
|||
Loading…
Reference in a new issue