6238ccbf2fb3e9ec85a6ec670a56ab9f559cd6fa
[wolnelektury.git] / apps / dictionary / models.py
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.
4 #
5 from django.db import models
6 from celery.task import task
7 from sortify import sortify
8
9 from catalogue.models import Book
10
11
12 class Note(models.Model):
13     book = models.ForeignKey(Book)
14     anchor = models.CharField(max_length=64)
15     html = models.TextField()
16     sort_key = models.CharField(max_length=128, db_index=True)
17
18     class Meta:
19         ordering = ['sort_key']
20
21
22 @task(ignore_result=True)
23 def build_notes(book_id):
24     book = Book.objects.get(pk=book_id)
25     Note.objects.filter(book=book).delete()
26     if book.html_file:
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,
30                                html=html_str, 
31                                sort_key=sortify(text_str).strip()[:128])
32     
33 @Book.html_built.connect
34 def notes_from_book(sender, **kwargs):
35     build_notes.delat(sender)