mirror of
https://github.com/Hopiu/django-imagekit.git
synced 2026-03-17 13:50:24 +00:00
You can generate other "spec" files (using apply will get you one). This one is for saving cache files and its name should reflect that.
37 lines
1.6 KiB
Python
37 lines
1.6 KiB
Python
from ...files import ImageSpecCacheFile
|
|
from django.db.models.fields.files import ImageField
|
|
|
|
|
|
class ImageSpecFileDescriptor(object):
|
|
def __init__(self, field, attname):
|
|
self.attname = attname
|
|
self.field = field
|
|
|
|
def __get__(self, instance, owner):
|
|
if instance is None:
|
|
return self.field
|
|
else:
|
|
field_name = getattr(self.field, 'image_field', None)
|
|
if field_name:
|
|
source_file = getattr(instance, field_name)
|
|
else:
|
|
image_fields = [getattr(instance, f.attname) for f in \
|
|
instance.__class__._meta.fields if \
|
|
isinstance(f, ImageField)]
|
|
if len(image_fields) == 0:
|
|
raise Exception('%s does not define any ImageFields, so your' \
|
|
' %s ImageSpecField has no image to act on.' % \
|
|
(instance.__class__.__name__, self.attname))
|
|
elif len(image_fields) > 1:
|
|
raise Exception('%s defines multiple ImageFields, but you' \
|
|
' have not specified an image_field for your %s' \
|
|
' ImageSpecField.' % (instance.__class__.__name__,
|
|
self.attname))
|
|
else:
|
|
source_file = image_fields[0]
|
|
file = ImageSpecCacheFile(self.field.spec, source_file)
|
|
instance.__dict__[self.attname] = file
|
|
return file
|
|
|
|
def __set__(self, instance, value):
|
|
instance.__dict__[self.attname] = value
|