From b8e57dccd6731381e4cad2cb3e0d70ea2b886c5e Mon Sep 17 00:00:00 2001 From: Eric Eldredge Date: Mon, 3 Oct 2011 22:51:03 -0400 Subject: [PATCH] A list of ImageSpec names are now stored on the model. Previously, ImageSpecFile instances were retrieved (for saving and deleting, among other possibilities) by iterating over the model instance's attributes. This change adds ImageSpecFile names to a list (spec_file_names) on an imagekit meta object on the model (_ik), making later retrieval much cheaper and more straightforward. --- imagekit/models.py | 7 +++++++ imagekit/utils.py | 16 ++++++---------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/imagekit/models.py b/imagekit/models.py index 28efc75..b247b21 100755 --- a/imagekit/models.py +++ b/imagekit/models.py @@ -77,6 +77,13 @@ class ImageSpec(_ImageSpecMixin): def contribute_to_class(self, cls, name): setattr(cls, name, _ImageSpecDescriptor(self, name)) + try: + ik = getattr(cls, '_ik') + except AttributeError: + ik = type('ImageKitMeta', (object,), {'spec_file_names': []}) + setattr(cls, '_ik', ik) + ik.spec_file_names.append(name) + # Connect to the signals only once for this class. uid = '%s.%s' % (cls.__module__, cls.__name__) post_save.connect(_post_save_handler, diff --git a/imagekit/utils.py b/imagekit/utils.py index 29d9da2..3c9c7c3 100644 --- a/imagekit/utils.py +++ b/imagekit/utils.py @@ -13,16 +13,12 @@ def img_to_fobj(img, format, **kwargs): def get_spec_files(instance): - from imagekit.models import ImageSpecFile - spec_files = [] - for key in dir(instance): - try: - value = getattr(instance, key) - except AttributeError: - continue - if isinstance(value, ImageSpecFile): - spec_files.append(value) - return spec_files + try: + ik = getattr(instance, '_ik') + except AttributeError: + return [] + else: + return [getattr(instance, n) for n in ik.spec_file_names] def open_image(target):