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()
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