X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/a91eb26eb1627fbb4ca7bd15ff850e0393ca817e..ec20d8aad93b7e0ddfa964f68e5ea31424e8aa4e:/apps/dictionary/models.py?ds=inline diff --git a/apps/dictionary/models.py b/apps/dictionary/models.py index 1d2fbba39..2256acf71 100644 --- a/apps/dictionary/models.py +++ b/apps/dictionary/models.py @@ -3,13 +3,14 @@ # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. # from django.db import models - +from celery.task import task from sortify import sortify from catalogue.models import Book class Note(models.Model): + """Represents a single annotation from a book.""" book = models.ForeignKey(Book) anchor = models.CharField(max_length=64) html = models.TextField() @@ -19,15 +20,16 @@ class Note(models.Model): ordering = ['sort_key'] -def notes_from_book(sender, **kwargs): - from librarian import html - - Note.objects.filter(book=sender).delete() - if sender.html_file: - for anchor, text_str, html_str in html.extract_annotations(sender.html_file.path): - Note.objects.create(book=sender, anchor=anchor, - html=html_str, +@task(ignore_result=True) +def build_notes(book): + Note.objects.filter(book=book).delete() + if book.html_file: + from librarian import html + for anchor, text_str, html_str in html.extract_annotations(book.html_file.path): + Note.objects.create(book=book, anchor=anchor, + html=html_str, sort_key=sortify(text_str).strip()[:128]) -# always re-extract notes after making a HTML in a Book +def notes_from_book(sender, instance, **kwargs): + build_notes.delay(instance) Book.html_built.connect(notes_from_book)