class ThumbnailUrlNode(Node):
    def __init__(self, path, size, options):
        self.path = path
        self.size = size
        self.options = options
        self.thumbnails_cache = ImageCache(settings.THUMBNAIL_ROOT)

    def render(self, context):
        resolved_options = dict(
            zip([str(opt) for opt in self.options.keys()], [self.options[v].resolve(context) for v in self.options])
        )
        size = [int(z.resolve(context)) for z in self.size]
        path = str(self.path.resolve(context))
        if not path:
            raise TemplateSyntaxError("Provided image path is empty")
        if not os.path.isabs(path):
            path = os.path.join(settings.MEDIA_ROOT, path)
        try:
            processor = ImageProcessor()
            processor.add_filter(Image.Image.thumbnail, size, resample=Image.ANTIALIAS)
            return "%s%s" % (
                settings.THUMBNAIL_PREFIX,
                os.path.basename(self.thumbnails_cache.get_image_file(processor, path)),
            )
        except (IOError, OSError), e:
            if not settings.FAIL_SILENTLY:
                raise e
            return ""
 def __init__(self, path, size, options):
     self.path = path
     self.size = size
     self.options = options
     self.thumbnails_cache = ImageCache(settings.THUMBNAIL_ROOT)