1 # -*- coding: utf-8 -*-
2 # This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
3 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
5 from django.db import models
6 from celery.task import task
7 from sortify import sortify
9 from catalogue.models import Book
12 class Note(models.Model):
13 """Represents a single annotation from a book."""
14 book = models.ForeignKey(Book)
15 anchor = models.CharField(max_length=64)
16 html = models.TextField()
17 sort_key = models.CharField(max_length=128, db_index=True)
20 ordering = ['sort_key']
23 @task(ignore_result=True)
24 def build_notes(book):
25 Note.objects.filter(book=book).delete()
27 from librarian import html
28 for anchor, text_str, html_str in html.extract_annotations(book.html_file.path):
29 Note.objects.create(book=book, anchor=anchor,
31 sort_key=sortify(text_str).strip()[:128])
33 def notes_from_book(sender, instance, **kwargs):
34 build_notes.delay(instance)
35 Book.html_built.connect(notes_from_book)