diff --git a/src/imagekit/__init__.py b/src/imagekit/__init__.py index 5600491..eec37ae 100644 --- a/src/imagekit/__init__.py +++ b/src/imagekit/__init__.py @@ -6,23 +6,6 @@ Author: Justin Driscoll Version: 1.0 """ -# Required PIL classes may or may not be available from the root namespace -# depending on the installation method used. -try: - import Image - import ImageFile - import ImageFilter - import ImageEnhance - import ImageColor -except ImportError: - try: - from PIL import Image - from PIL import ImageFile - from PIL import ImageFilter - from PIL import ImageEnhance - from PIL import ImageColor - except ImportError: - raise ImportError('ImageKit was unable to import the Python Imaging Library. Please confirm it`s installed and available on your current Python path.') diff --git a/src/imagekit/lib.py b/src/imagekit/lib.py new file mode 100644 index 0000000..65646a4 --- /dev/null +++ b/src/imagekit/lib.py @@ -0,0 +1,17 @@ +# Required PIL classes may or may not be available from the root namespace +# depending on the installation method used. +try: + import Image + import ImageFile + import ImageFilter + import ImageEnhance + import ImageColor +except ImportError: + try: + from PIL import Image + from PIL import ImageFile + from PIL import ImageFilter + from PIL import ImageEnhance + from PIL import ImageColor + except ImportError: + raise ImportError('ImageKit was unable to import the Python Imaging Library. Please confirm it`s installed and available on your current Python path.') \ No newline at end of file diff --git a/src/imagekit/management/__init__.py b/src/imagekit/management/__init__.py new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/src/imagekit/management/__init__.py @@ -0,0 +1 @@ + diff --git a/src/imagekit/management/commands/__init__.py b/src/imagekit/management/commands/__init__.py new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/src/imagekit/management/commands/__init__.py @@ -0,0 +1 @@ + diff --git a/src/imagekit/management/commands/ikflush.py b/src/imagekit/management/commands/ikflush.py new file mode 100644 index 0000000..7a22b23 --- /dev/null +++ b/src/imagekit/management/commands/ikflush.py @@ -0,0 +1,38 @@ +from django.db.models.loading import cache +from django.core.management.base import BaseCommand, CommandError +from optparse import make_option +from imagekit.models import IKModel +from imagekit.specs import ImageSpec + + +class Command(BaseCommand): + help = ('Clears all ImageKit cached files.') + args = '[apps]' + requires_model_validation = True + can_import_settings = True + + def handle(self, *args, **options): + return flush_cache(args, options) + +def flush_cache(apps, options): + """ Clears the image cache + + """ + apps = [a.strip(',') for a in apps] + if apps: + print 'Flushing cache for %s...' % ', '.join(apps) + else: + print 'Flushing caches...' + + for app_label in apps: + app = cache.get_app(app_label) + models = [m for m in cache.get_models(app) if issubclass(m, IKModel)] + + for model in models: + for obj in model.objects.all(): + for spec in model._ik.specs: + prop = getattr(obj, spec.name(), None) + if prop is not None: + prop._delete() + if spec.pre_cache: + prop._create() diff --git a/src/imagekit/models.py b/src/imagekit/models.py index ea5b018..6f16700 100644 --- a/src/imagekit/models.py +++ b/src/imagekit/models.py @@ -6,9 +6,9 @@ from django.db import models from django.db.models.base import ModelBase from django.utils.translation import ugettext_lazy as _ -from imagekit import * -from imagekit.options import Options from imagekit import specs +from imagekit.lib import * +from imagekit.options import Options from imagekit.utils import img_to_fobj diff --git a/src/imagekit/options.py b/src/imagekit/options.py index a30b80a..8ddf89f 100644 --- a/src/imagekit/options.py +++ b/src/imagekit/options.py @@ -1,14 +1,6 @@ # Imagekit options from imagekit import processors from imagekit.specs import ImageSpec - - -class ResizeMax(processors.Resize): - width = 500 - height = 500 - -class PreprocessorSpec(ImageSpec): - processors = [ResizeMax] class Options(object): @@ -18,7 +10,7 @@ class Options(object): image_field = 'image' crop_horz_field = 'crop_horz' crop_vert_field = 'crop_vert' - preprocessor_spec = PreprocessorSpec + preprocessor_spec = None cache_dir = 'images' save_count_as = None cache_filename_format = "%(filename)s_%(specname)s.%(extension)s" diff --git a/src/imagekit/processors.py b/src/imagekit/processors.py index dc45b71..cf9f7eb 100644 --- a/src/imagekit/processors.py +++ b/src/imagekit/processors.py @@ -6,7 +6,7 @@ the class properties as settings. The process method can be overridden as well a own effects/processes entirely. """ -from imagekit import * +from imagekit.lib import * class ImageProcessor(object): """ Base image processor class """ diff --git a/src/imagekit/specs.py b/src/imagekit/specs.py index ae0b168..89a5e52 100644 --- a/src/imagekit/specs.py +++ b/src/imagekit/specs.py @@ -6,7 +6,7 @@ spec found. """ import os -from imagekit import Image +from imagekit.lib import * from imagekit.utils import img_to_fobj from django.core.files.base import ContentFile diff --git a/src/imagekit/tests.py b/src/imagekit/tests.py index c84c023..cb90e5a 100644 --- a/src/imagekit/tests.py +++ b/src/imagekit/tests.py @@ -6,11 +6,10 @@ from django.core.files.base import ContentFile from django.db import models from django.test import TestCase -from models import IKModel -from specs import ImageSpec from imagekit import processors - -from imagekit import Image +from imagekit.models import IKModel +from imagekit.specs import ImageSpec +from imagekit.lib import Image class ResizeToWidth(processors.Resize): diff --git a/src/imagekit/utils.py b/src/imagekit/utils.py index 7e2c128..352d40f 100644 --- a/src/imagekit/utils.py +++ b/src/imagekit/utils.py @@ -1,3 +1,5 @@ +""" ImageKit utility functions """ + import tempfile def img_to_fobj(img, format, **kwargs): @@ -10,4 +12,4 @@ def img_to_fobj(img, format, **kwargs): pass img.save(tmp, format, **kwargs) tmp.seek(0) - return tmp \ No newline at end of file + return tmp