def __init__(self, relative_source, requested_size, opts=None, quality=None, basedir=None, subdir=None, prefix=None, relative_dest=None, processors=None): relative_source = force_unicode(relative_source) # Set the absolute filename for the source file source = self._absolute_path(relative_source) quality = get_thumbnail_setting('QUALITY', quality) convert_path = get_thumbnail_setting('CONVERT') wvps_path = get_thumbnail_setting('WVPS') if processors is None: processors = dynamic_import(get_thumbnail_setting('PROCESSORS')) # Call super().__init__ now to set the opts attribute. generate() won't # get called because we are not setting the dest attribute yet. super(DjangoThumbnail, self).__init__(source, requested_size, opts=opts, quality=quality, convert_path=convert_path, wvps_path=wvps_path, processors=processors) # Get the relative filename for the thumbnail image, then set the # destination filename if relative_dest is None: self.relative_dest = \ self._get_relative_thumbnail(relative_source, basedir=basedir, subdir=subdir, prefix=prefix) else: self.relative_dest = relative_dest self.dest = self._absolute_path(self.relative_dest) # Call generate now that the dest attribute has been set self.generate() # Set the relative & absolute url to the thumbnail self.relative_url = \ iri_to_uri('/'.join(self.relative_dest.split(os.sep))) self.absolute_url = '%s%s' % (settings.MEDIA_URL, self.relative_url)
from populous.thumbnail.main import DjangoThumbnail, get_thumbnail_setting from populous.thumbnail.processors import dynamic_import, get_valid_options register = Library() size_pat = re.compile(r'(\d+)x(\d+)$') quality_pat = re.compile(r'quality=([1-9]\d?|100)$') filesize_formats = ['k', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y'] filesize_long_formats = { 'k': 'kilo', 'M': 'mega', 'G': 'giga', 'T': 'tera', 'P': 'peta', 'E': 'exa', 'Z': 'zetta', 'Y': 'yotta' } try: PROCESSORS = dynamic_import(get_thumbnail_setting('PROCESSORS')) VALID_OPTIONS = get_valid_options(PROCESSORS) except: if get_thumbnail_setting('DEBUG'): raise else: PROCESSORS = [] VALID_OPTIONS = [] class ThumbnailNode(Node): def __init__(self, source_var, size_var, opts=None, context_name=None, **kwargs): self.source_var = source_var self.size_var = size_var self.opts = opts self.context_name = context_name
import unittest import os import time from PIL import Image from django.conf import settings from populous.thumbnail.base import Thumbnail from populous.thumbnail.main import DjangoThumbnail, get_thumbnail_setting from populous.thumbnail.processors import dynamic_import, get_valid_options from populous.thumbnail.tests.base import BaseTest, RELATIVE_PIC_NAME, PIC_NAME, THUMB_NAME, PIC_SIZE PROCESSORS = dynamic_import(get_thumbnail_setting("PROCESSORS")) VALID_OPTIONS = get_valid_options(PROCESSORS) class ThumbnailTest(BaseTest): def testThumbnails(self): # Thumbnail thumb = Thumbnail(source=PIC_NAME, dest=THUMB_NAME % 1, requested_size=(240, 240)) self.verify_thumbnail((240, 180), thumb) # Cropped thumbnail thumb = Thumbnail(source=PIC_NAME, dest=THUMB_NAME % 2, requested_size=(240, 240), opts=["crop"]) self.verify_thumbnail((240, 240), thumb) # Thumbnail with altered JPEG quality thumb = Thumbnail(source=PIC_NAME, dest=THUMB_NAME % 3, requested_size=(240, 240), quality=95) self.verify_thumbnail((240, 180), thumb)