예제 #1
0
 def _get_options(self, version_suffix, extra_options=None):
     options = dict(VERSIONS.get(version_suffix, {}))
     if extra_options:
         options.update(extra_options)
     if 'size' in options and 'width' not in options:
         width, height = options['size']
         options['width'] = width
         options['height'] = height
     return options
예제 #2
0
 def _get_options(self, version_suffix, extra_options=None):
     options = dict(VERSIONS.get(version_suffix, {}))
     if extra_options:
         options.update(extra_options)
     if 'size' in options and 'width' not in options:
         width, height = options['size']
         options['width'] = width
         options['height'] = height
     return options
    def _get_namer(self, version_suffix, file_object=None, **extra_options):
        if not file_object:
            file_object = self.F_IMAGE

        extra_options.update(VERSIONS.get(version_suffix, {}))

        return self.NAMER_CLASS(
            file_object=file_object,
            version_suffix=version_suffix,
            filename_root=file_object.filename_root,
            extension=file_object.extension,
            options=extra_options,
        )
    def _get_namer(self, version_suffix, file_object=None, **extra_options):
        if not file_object:
            file_object = self.F_IMAGE

        extra_options.update(VERSIONS.get(version_suffix, {}))

        return self.NAMER_CLASS(
            file_object=file_object,
            version_suffix=version_suffix,
            filename_root=file_object.filename_root,
            extension=file_object.extension,
            options=extra_options,
        )
예제 #5
0
    def _generate_version(self, version_path, version_suffix, options):
        """
        Generate Version for an Image.
        value has to be a path relative to the storage location.
        """

        tmpfile = File(tempfile.NamedTemporaryFile())

        try:
            f = self.site.storage.open(self.path)
        except IOError:
            return ""
        im = Image.open(f)
        version_dir, version_basename = os.path.split(version_path)
        root, ext = os.path.splitext(version_basename)
        version = process_image(im, options)
        if not version:
            version = im
        if 'methods' in options:
            for m in options['methods']:
                if callable(m):
                    version = m(version)

        # IF need Convert RGB
        if ext in [".jpg", ".jpeg"] and version.mode not in ("L", "RGB"):
            version = version.convert("RGB")

        # save version
        quality = VERSIONS.get(version_suffix, {}).get("quality",
                                                       VERSION_QUALITY)
        try:
            version.save(
                tmpfile,
                format=Image.EXTENSION[ext.lower()],
                quality=quality,
                optimize=(os.path.splitext(version_path)[1] != '.gif'))
        except IOError:
            version.save(tmpfile,
                         format=Image.EXTENSION[ext.lower()],
                         quality=quality)
        # remove old version, if any
        if version_path != self.site.storage.get_available_name(version_path):
            self.site.storage.delete(version_path)
        self.site.storage.save(version_path, tmpfile)
        # set permissions
        if DEFAULT_PERMISSIONS is not None:
            os.chmod(self.site.storage.path(version_path), DEFAULT_PERMISSIONS)
        return version_path
예제 #6
0
    def render(self, name, value, attrs=None, renderer=None):
        if value is None:
            value = ""
        if value != "" and not isinstance(value, FileObject):
            value = FileObject(value, site=self.site)
        final_attrs = self.build_attrs(attrs, extra_attrs={"type": self.input_type, "name": name})
        final_attrs['data-extensions'] = json.dumps(self.extensions)
        final_attrs['data-thumbnail_size'] = "{}"
        if self.thumbnail:
            final_attrs['data-thumbnail'] = self.thumbnail

        fb_version = VERSIONS.get(self.thumbnail, None)
        if fb_version:
            final_attrs['data-thumbnail_size'] = json.dumps(dict(
                width=fb_version['width'],
                height=fb_version['height']
                ))
        
        filebrowser_site = self.site
        allowed_title = _('Allowed')
        return render_to_string("uploadfield/uploadfield_widget.html", locals())