def assign_files_to_iconfonts(self):
        from filer.models.filemodels import File
        from cmsplugin_cascade.models import IconFont

        for file in File.objects.all():
            if file.label != 'Font Awesome':
                continue
            if self.verbosity >= 2:
                self.stdout.write("Creating Icon Font from: {}".format(
                    file.label))
            try:
                zip_ref = zipfile.ZipFile(file.file, 'r')
            except zipfile.BadZipFile as exc:
                self.stderr.write("Unable to unpack {}: {}".format(
                    file.label, exc))
            else:
                if not IconFont.objects.filter(zip_file=file).exists():
                    font_folder, config_data = unzip_archive(
                        file.label, zip_ref)
                    IconFont.objects.create(
                        identifier=config_data['name'],
                        config_data=config_data,
                        zip_file=file,
                        font_folder=font_folder,
                    )
                zip_ref.close()
Ejemplo n.º 2
0
 def clean(self):
     fontello_url = 'http://fontello.com/'
     cleaned_data = super().clean()
     if 'zip_file' in self.changed_data:
         try:
             label = cleaned_data['zip_file'].label
             zip_ref = zipfile.ZipFile(cleaned_data['zip_file'].file.file, 'r')
             cleaned_data.update(zip(['font_folder', 'config_data'], unzip_archive(label, zip_ref)))
         except Exception as exc:
             raise ValidationError(format_lazy(_("Can not unzip uploaded archive {}: {}"), label, exc))
         finally:
             zip_ref.close()
         try:
             css_prefix_text = cleaned_data['config_data']['css_prefix_text']
         except KeyError:
             raise ValidationError(format_lazy(
                 _("File does not seem to originate from <a href=\"{url}\" target=\"_blank\">{url}</a>"),
                 url=fontello_url,
             ))
         other_icon_fonts = IconFont.objects.all()
         if self.instance:
             other_icon_fonts = other_icon_fonts.exclude(id=self.instance.id)
         for icon_font in other_icon_fonts:
             if icon_font.config_data['css_prefix_text'] == css_prefix_text:
                 msg = format_lazy(_(
                     "Icon Font '{icon_font}' already uses CSS prefix '{css_prefix}'.<br/>" \
                     "Please reload the font from <a href=\"{url}\" target=\"_blank\">{url}</a> " \
                     "using another CSS prefix."),
                     icon_font=icon_font.identifier, css_prefix=css_prefix_text, url=fontello_url)
                 raise ValidationError(mark_safe(msg))
     return cleaned_data