mirror of
https://github.com/Hopiu/django-imagekit.git
synced 2026-04-21 13:34:43 +00:00
Using spec properties from ImageModel.
This commit is contained in:
parent
2387cc4be2
commit
a9895f335a
3 changed files with 24 additions and 28 deletions
|
|
@ -8,7 +8,7 @@ from django.db.models.signals import post_delete
|
|||
from django.utils.html import conditional_escape as escape
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
from imagekit import specs
|
||||
from imagekit.specs import ImageSpec, Descriptor
|
||||
from imagekit.lib import *
|
||||
from imagekit.options import Options
|
||||
from imagekit.utils import img_to_fobj
|
||||
|
|
@ -38,25 +38,20 @@ class ImageModelBase(ModelBase):
|
|||
module.
|
||||
|
||||
"""
|
||||
def __init__(cls, name, bases, attrs):
|
||||
parents = [b for b in bases if isinstance(b, ImageModelBase)]
|
||||
if not parents:
|
||||
return
|
||||
user_opts = getattr(cls, 'IKOptions', None)
|
||||
opts = Options(user_opts)
|
||||
if not opts.specs:
|
||||
try:
|
||||
module = __import__(opts.spec_module, {}, {}, [''])
|
||||
except ImportError:
|
||||
raise ImportError('Unable to load imagekit config module: %s' \
|
||||
% opts.spec_module)
|
||||
opts.specs.extend([spec for spec in module.__dict__.values() \
|
||||
if isinstance(spec, type) \
|
||||
and issubclass(spec, specs.ImageSpec) \
|
||||
and spec != specs.ImageSpec])
|
||||
for spec in opts.specs:
|
||||
setattr(cls, spec.name(), specs.Descriptor(spec))
|
||||
setattr(cls, '_ik', opts)
|
||||
def __init__(self, name, bases, attrs):
|
||||
if [b for b in bases if isinstance(b, ImageModelBase)]:
|
||||
user_opts = getattr(self, 'IKOptions', None)
|
||||
|
||||
specs = []
|
||||
for k, v in attrs.items():
|
||||
if isinstance(v, ImageSpec):
|
||||
setattr(self, k, Descriptor(v, k))
|
||||
specs.append(v)
|
||||
|
||||
user_opts.specs = specs
|
||||
opts = Options(user_opts)
|
||||
setattr(self, '_ik', opts)
|
||||
ModelBase.__init__(self, name, bases, attrs)
|
||||
|
||||
|
||||
class ImageModel(models.Model):
|
||||
|
|
@ -72,9 +67,6 @@ class ImageModel(models.Model):
|
|||
class Meta:
|
||||
abstract = True
|
||||
|
||||
class IKOptions:
|
||||
pass
|
||||
|
||||
def admin_thumbnail_view(self):
|
||||
if not self._imgfield:
|
||||
return None
|
||||
|
|
@ -92,6 +84,9 @@ class ImageModel(models.Model):
|
|||
admin_thumbnail_view.short_description = _('Thumbnail')
|
||||
admin_thumbnail_view.allow_tags = True
|
||||
|
||||
class IKOptions:
|
||||
pass
|
||||
|
||||
@property
|
||||
def _imgfield(self):
|
||||
return getattr(self, self._ik.image_field)
|
||||
|
|
|
|||
|
|
@ -16,7 +16,6 @@ class Options(object):
|
|||
cache_filename_fields = ['pk', ]
|
||||
cache_filename_format = "%(filename)s_%(specname)s.%(extension)s"
|
||||
admin_thumbnail_spec = 'admin_thumbnail'
|
||||
spec_module = 'imagekit.defaults'
|
||||
specs = None
|
||||
#storage = defaults to image_field.storage
|
||||
|
||||
|
|
|
|||
|
|
@ -34,11 +34,12 @@ class ImageSpec(object):
|
|||
|
||||
|
||||
class Accessor(object):
|
||||
def __init__(self, obj, spec):
|
||||
def __init__(self, obj, spec, property_name):
|
||||
self._img = None
|
||||
self._fmt = None
|
||||
self._obj = obj
|
||||
self.spec = spec
|
||||
self.property_name = property_name
|
||||
|
||||
def _get_imgfile(self):
|
||||
format = self._img.format or 'JPEG'
|
||||
|
|
@ -86,7 +87,7 @@ class Accessor(object):
|
|||
if issubclass(processor, processors.Format):
|
||||
extension = processor.extension
|
||||
filename_format_dict = {'filename': filename,
|
||||
'specname': self.spec.name(),
|
||||
'specname': self.property_name,
|
||||
'extension': extension.lstrip('.')}
|
||||
cache_filename_fields = self._obj._ik.cache_filename_fields
|
||||
filename_format_dict.update(dict(zip(
|
||||
|
|
@ -138,8 +139,9 @@ class Accessor(object):
|
|||
|
||||
|
||||
class Descriptor(object):
|
||||
def __init__(self, spec):
|
||||
def __init__(self, spec, property_name):
|
||||
self._property_name = property_name
|
||||
self._spec = spec
|
||||
|
||||
def __get__(self, obj, type=None):
|
||||
return Accessor(obj, self._spec)
|
||||
return Accessor(obj, self._spec, self._property_name)
|
||||
|
|
|
|||
Loading…
Reference in a new issue