def test_fragments(): expected_output_file_path = get_fixture('text', 'asnyk_miedzy_nami_fragments.html') closed_fragments, open_fragments = extract_fragments( get_fixture('text', 'asnyk_miedzy_nami_expected.html')) assert not open_fragments fragments_text = u"\n\n".join(u"%s: %s\n%s" % (f.id, f.themes, f) for f in closed_fragments.values()) assert_equal(fragments_text, file(expected_output_file_path).read().decode('utf-8'))
def build_html(self): from django.core.files.base import ContentFile from slughifi import slughifi from librarian import html meta_tags = list(self.tags.filter( category__in=('author', 'epoch', 'genre', 'kind'))) book_tag = self.book_tag() html_output = self.wldocument(parse_dublincore=False).as_html() if html_output: self.html_file.save('%s.html' % self.slug, ContentFile(html_output.get_string())) # get ancestor l-tags for adding to new fragments ancestor_tags = [] p = self.parent while p: ancestor_tags.append(p.book_tag()) p = p.parent # Delete old fragments and create them from scratch self.fragments.all().delete() # Extract fragments closed_fragments, open_fragments = html.extract_fragments(self.html_file.path) for fragment in closed_fragments.values(): try: theme_names = [s.strip() for s in fragment.themes.split(',')] except AttributeError: continue themes = [] for theme_name in theme_names: if not theme_name: continue tag, created = Tag.objects.get_or_create(slug=slughifi(theme_name), category='theme') if created: tag.name = theme_name tag.sort_key = theme_name.lower() tag.save() themes.append(tag) if not themes: continue text = fragment.to_string() short_text = truncate_html_words(text, 15) if text == short_text: short_text = '' new_fragment = Fragment.objects.create(anchor=fragment.id, book=self, text=text, short_text=short_text) new_fragment.save() new_fragment.tags = set(meta_tags + themes + [book_tag] + ancestor_tags) self.save() self.html_built.send(sender=self) return True return False
def test_fragments(): expected_output_file_path = get_fixture( 'text', 'asnyk_miedzy_nami_fragments.html') closed_fragments, open_fragments = extract_fragments( get_fixture('text', 'asnyk_miedzy_nami_expected.html')) assert not open_fragments fragments_text = u"\n\n".join(u"%s: %s\n%s" % (f.id, f.themes, f) for f in closed_fragments.values()) assert_equal(fragments_text, file(expected_output_file_path).read().decode('utf-8'))
def build(self, fieldfile): from django.core.files.base import ContentFile from fnpdjango.utils.text.slughifi import slughifi from sortify import sortify from librarian import html from catalogue.models import Fragment, Tag book = fieldfile.instance html_output = self.transform( book.wldocument(parse_dublincore=False), fieldfile) # Delete old fragments, create from scratch if necessary. book.fragments.all().delete() if html_output: meta_tags = list(book.tags.filter( category__in=('author', 'epoch', 'genre', 'kind'))) lang = book.language lang = LANGUAGES_3TO2.get(lang, lang) if lang not in [ln[0] for ln in settings.LANGUAGES]: lang = None fieldfile.save(None, ContentFile(html_output.get_string()), save=False) type(book).objects.filter(pk=book.pk).update(**{ fieldfile.field.attname: fieldfile }) # Extract fragments closed_fragments, open_fragments = html.extract_fragments(fieldfile.path) for fragment in closed_fragments.values(): try: theme_names = [s.strip() for s in fragment.themes.split(',')] except AttributeError: continue themes = [] for theme_name in theme_names: if not theme_name: continue if lang == settings.LANGUAGE_CODE: # Allow creating themes if book in default language. tag, created = Tag.objects.get_or_create( slug=slughifi(theme_name), category='theme') if created: tag.name = theme_name setattr(tag, "name_%s" % lang, theme_name) tag.sort_key = sortify(theme_name.lower()) tag.save() themes.append(tag) elif lang is not None: # Don't create unknown themes in non-default languages. try: tag = Tag.objects.get(category='theme', **{"name_%s" % lang: theme_name}) except Tag.DoesNotExist: pass else: themes.append(tag) if not themes: continue text = fragment.to_string() short_text = truncate_html_words(text, 15) if text == short_text: short_text = '' new_fragment = Fragment.objects.create(anchor=fragment.id, book=book, text=text, short_text=short_text) new_fragment.save() new_fragment.tags = set(meta_tags + themes) book.html_built.send(sender=type(self), instance=book) return True return False
def build(self, fieldfile): from django.core.files.base import ContentFile from fnpdjango.utils.text.slughifi import slughifi from sortify import sortify from librarian import html from catalogue.models import Fragment, Tag book = fieldfile.instance meta_tags = list( book.tags.filter(category__in=('author', 'epoch', 'genre', 'kind'))) book_tag = book.book_tag() html_output = self.transform(book.wldocument(parse_dublincore=False), fieldfile) if html_output: fieldfile.save(None, ContentFile(html_output.get_string()), save=False) type(book).objects.filter(pk=book.pk).update( **{fieldfile.field.attname: fieldfile}) # get ancestor l-tags for adding to new fragments ancestor_tags = [] p = book.parent while p: ancestor_tags.append(p.book_tag()) p = p.parent # Delete old fragments and create them from scratch book.fragments.all().delete() # Extract fragments closed_fragments, open_fragments = html.extract_fragments( fieldfile.path) for fragment in closed_fragments.values(): try: theme_names = [ s.strip() for s in fragment.themes.split(',') ] except AttributeError: continue themes = [] for theme_name in theme_names: if not theme_name: continue tag, created = Tag.objects.get_or_create( slug=slughifi(theme_name), category='theme') if created: tag.name = theme_name tag.sort_key = sortify(theme_name.lower()) tag.save() themes.append(tag) if not themes: continue text = fragment.to_string() short_text = truncate_html_words(text, 15) if text == short_text: short_text = '' new_fragment = Fragment.objects.create(anchor=fragment.id, book=book, text=text, short_text=short_text) new_fragment.save() new_fragment.tags = set(meta_tags + themes + [book_tag] + ancestor_tags) book.html_built.send(sender=book) return True return False
def build(self, fieldfile): from django.core.files.base import ContentFile from fnpdjango.utils.text.slughifi import slughifi from sortify import sortify from librarian import html from catalogue.models import Fragment, Tag book = fieldfile.instance html_output = self.transform(book.wldocument(parse_dublincore=False), fieldfile) # Delete old fragments, create from scratch if necessary. book.fragments.all().delete() if html_output: meta_tags = list( book.tags.filter(category__in=('author', 'epoch', 'genre', 'kind'))) lang = book.language lang = LANGUAGES_3TO2.get(lang, lang) if lang not in [ln[0] for ln in settings.LANGUAGES]: lang = None fieldfile.save(None, ContentFile(html_output.get_string()), save=False) type(book).objects.filter(pk=book.pk).update( **{fieldfile.field.attname: fieldfile}) # Extract fragments closed_fragments, open_fragments = html.extract_fragments( fieldfile.path) for fragment in closed_fragments.values(): try: theme_names = [ s.strip() for s in fragment.themes.split(',') ] except AttributeError: continue themes = [] for theme_name in theme_names: if not theme_name: continue if lang == settings.LANGUAGE_CODE: # Allow creating themes if book in default language. tag, created = Tag.objects.get_or_create( slug=slughifi(theme_name), category='theme') if created: tag.name = theme_name setattr(tag, "name_%s" % lang, theme_name) tag.sort_key = sortify(theme_name.lower()) tag.save() themes.append(tag) elif lang is not None: # Don't create unknown themes in non-default languages. try: tag = Tag.objects.get( category='theme', **{"name_%s" % lang: theme_name}) except Tag.DoesNotExist: pass else: themes.append(tag) if not themes: continue text = fragment.to_string() short_text = truncate_html_words(text, 15) if text == short_text: short_text = '' new_fragment = Fragment.objects.create(anchor=fragment.id, book=book, text=text, short_text=short_text) new_fragment.save() new_fragment.tags = set(meta_tags + themes) book.html_built.send(sender=type(self), instance=book) return True return False
def build(self, fieldfile): from django.core.files.base import ContentFile from fnpdjango.utils.text.slughifi import slughifi from sortify import sortify from librarian import html from catalogue.models import Fragment, Tag book = fieldfile.instance meta_tags = list(book.tags.filter( category__in=('author', 'epoch', 'genre', 'kind'))) book_tag = book.book_tag() html_output = self.transform( book.wldocument(parse_dublincore=False), fieldfile) if html_output: fieldfile.save(None, ContentFile(html_output.get_string()), save=False) type(book).objects.filter(pk=book.pk).update(**{ fieldfile.field.attname: fieldfile }) # get ancestor l-tags for adding to new fragments ancestor_tags = [] p = book.parent while p: ancestor_tags.append(p.book_tag()) p = p.parent # Delete old fragments and create them from scratch book.fragments.all().delete() # Extract fragments closed_fragments, open_fragments = html.extract_fragments(fieldfile.path) for fragment in closed_fragments.values(): try: theme_names = [s.strip() for s in fragment.themes.split(',')] except AttributeError: continue themes = [] for theme_name in theme_names: if not theme_name: continue tag, created = Tag.objects.get_or_create( slug=slughifi(theme_name), category='theme') if created: tag.name = theme_name tag.sort_key = sortify(theme_name.lower()) tag.save() themes.append(tag) if not themes: continue text = fragment.to_string() short_text = truncate_html_words(text, 15) if text == short_text: short_text = '' new_fragment = Fragment.objects.create(anchor=fragment.id, book=book, text=text, short_text=short_text) new_fragment.save() new_fragment.tags = set(meta_tags + themes + [book_tag] + ancestor_tags) book.html_built.send(sender=book) return True return False