One small optimization for a man...
[wolnelektury.git] / apps / dictionary / models.py
index f2a9ddf..375bb22 100644 (file)
@@ -3,14 +3,14 @@
 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
 #
 from django.db import models
 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
 #
 from django.db import models
-
-from librarian import html
+from celery.task import task
 from sortify import sortify
 
 from catalogue.models import Book
 
 
 class Note(models.Model):
 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()
     book = models.ForeignKey(Book)
     anchor = models.CharField(max_length=64)
     html = models.TextField()
@@ -20,12 +20,16 @@ class Note(models.Model):
         ordering = ['sort_key']
 
 
         ordering = ['sort_key']
 
 
+@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])
+    
 def notes_from_book(sender, **kwargs):
 def notes_from_book(sender, **kwargs):
-    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, sort_key=sortify(text_str)[:128])
-
-# always re-extract notes after making a HTML in a Book
+    build_notes.delay(sender)
 Book.html_built.connect(notes_from_book)
 Book.html_built.connect(notes_from_book)