You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
1.3 KiB
48 lines
1.3 KiB
9 years ago
|
# -*- coding: utf-8 -*-
|
||
|
from __future__ import unicode_literals
|
||
|
# Erik Stein <code@classlibrary.net>, 2016
|
||
|
|
||
|
|
||
|
from imagekit.models.fields.utils import ImageSpecFileDescriptor
|
||
|
from imagekit.models.fields import ImageSpecField
|
||
|
from ..files.storage import MediaAssetFileSystemStorage
|
||
|
from ...cachefiles import MediaAssetCacheFile
|
||
|
|
||
|
|
||
|
class MediaAssetCacheFileDescriptor(ImageSpecFileDescriptor):
|
||
|
"""
|
||
|
- Manages manually overriden cached files
|
||
|
- knows to handle ConversionNotApplicable exceptions and
|
||
|
provides svg-icons for this case
|
||
|
|
||
|
"""
|
||
|
|
||
|
def __init__(self, field, attname, source_field_name):
|
||
|
self.attname = attname
|
||
|
self.field = field
|
||
|
self.source_field_name = source_field_name
|
||
|
|
||
|
def __get__(self, instance, owner):
|
||
|
if instance is None:
|
||
|
return self.field
|
||
|
else:
|
||
|
source = getattr(instance, self.source_field_name)
|
||
|
spec = self.field.get_spec(source=source)
|
||
|
file = MediaAssetCacheFile(spec)
|
||
|
instance.__dict__[self.attname] = file
|
||
|
return file
|
||
|
|
||
|
def __set__(self, instance, value):
|
||
|
instance.__dict__[self.attname] = value
|
||
|
|
||
|
|
||
|
class MediaAssetFileField(ImageSpecField):
|
||
|
"""
|
||
|
- default storage
|
||
|
"""
|
||
|
|
||
|
def __init__(self, storage=MediaAssetFileSystemStorage):
|
||
|
pass
|
||
|
|
||
|
|