Add jobs (model, logic, and view)
Jobs are the core of the Job system, allowing distributed processing
of taks in an interuptable manner.
Patch by: Sverre Rabbelier
"""Utility functions for handling images.Requires PIL, as you might imagine."""from django.core.files import Fileclass ImageFile(File): """ A mixin for use alongside django.core.files.base.File, which provides additional features for dealing with images. """ def _get_width(self): return self._get_image_dimensions()[0] width = property(_get_width) def _get_height(self): return self._get_image_dimensions()[1] height = property(_get_height) def _get_image_dimensions(self): if not hasattr(self, '_dimensions_cache'): self._dimensions_cache = get_image_dimensions(self) return self._dimensions_cachedef get_image_dimensions(file_or_path): """Returns the (width, height) of an image, given an open file or a path.""" from PIL import ImageFile as PILImageFile p = PILImageFile.Parser() if hasattr(file_or_path, 'read'): file = file_or_path else: file = open(file_or_path, 'rb') while 1: data = file.read(1024) if not data: break p.feed(data) if p.image: return p.image.size return None