-# -*- coding: utf-8 -*-
-# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
-# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+# This file is part of Wolne Lektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Wolne Lektury. See NOTICE for more information.
#
from django.db import models, transaction
-from celery.task import task
+from celery import shared_task
from sortify import sortify
from celery.utils.log import get_task_logger
-task_logger = get_task_logger(__name__)
-
from catalogue.models import Book
+task_logger = get_task_logger(__name__)
+
class Qualifier(models.Model):
qualifier = models.CharField(max_length=128, db_index=True, unique=True)
class Meta:
ordering = ['qualifier']
- def __unicode__(self):
+ def __str__(self):
return self.name or self.qualifier
class NoteSource(models.Model):
"""Represents a single annotation from a book."""
- note = models.ForeignKey(Note)
- book = models.ForeignKey(Book)
+ note = models.ForeignKey(Note, models.CASCADE)
+ book = models.ForeignKey(Book, models.CASCADE)
anchor = models.CharField(max_length=64)
class Meta:
ordering = ['book']
-@task(ignore_result=True)
+@shared_task(ignore_result=True)
def build_notes(book):
+ if not book.findable:
+ return
task_logger.info(book.slug)
with transaction.atomic():
book.notesource_set.all().delete()
sort_key = sortify(text_str).strip()[:128]
language = book.language
- note = None
- notes = Note.objects.filter(sort_key=sort_key,
- fn_type=fn_type,
- language=language, html=html_str)
+ notes = Note.objects.filter(sort_key=sort_key, fn_type=fn_type, language=language, html=html_str)
if notes:
note = notes[0]
else:
fn_type=fn_type,
language=language
)
-
qualifier_objects = []
for qualifier in qualifiers:
obj, created = Qualifier.objects.get_or_create(
'name': FN_QUALIFIERS.get(qualifier, '')
})
qualifier_objects.append(obj)
- note.qualifiers = qualifier_objects
+ note.qualifiers.set(qualifier_objects)
note.notesource_set.create(book=book, anchor=anchor)
Note.objects.filter(notesource=None).delete()
def notes_from_book(sender, instance, **kwargs):
- build_notes.delay(instance)
+ if instance.findable:
+ build_notes.delay(instance)
Book.html_built.connect(notes_from_book)