search ui draft
[wolnelektury.git] / apps / catalogue / models.py
index 8fb2109..a180c65 100644 (file)
@@ -24,7 +24,7 @@ from newtagging.models import TagBase, tags_updated
 from newtagging import managers
 from catalogue.fields import JSONField, OverwritingFileField
 from catalogue.utils import create_zip, split_tags
-from catalogue.tasks import touch_tag
+from catalogue.tasks import touch_tag, index_book
 from shutil import copy
 from glob import glob
 import re
@@ -492,7 +492,7 @@ class Book(models.Model):
         cache_key = "Book.short_html/%d/%s"
         for lang, langname in settings.LANGUAGES:
             cache.delete(cache_key % (self.id, lang))
-        cache.delete(cache_key = "Book.mini_box/%d" % (self.id, ))
+        cache.delete("Book.mini_box/%d" % (self.id, ))
         # Fragment.short_html relies on book's tags, so reset it here too
         for fragm in self.fragments.all():
             fragm.reset_short_html()
@@ -731,18 +731,16 @@ class Book(models.Model):
         result = create_zip.delay(paths, self.fileid())
         return result.wait()
 
-    def search_index(self):
-        if settings.SEARCH_INDEX_PARALLEL:
-            if instance(settings.SEARCH_INDEX_PARALLEL, int):
-                idx = search.ReusableIndex(threads=4)
-            else:
-                idx = search.ReusableIndex()
+    def search_index(self, book_info=None):
+        if settings.CELERY_ALWAYS_EAGER:
+            idx = search.ReusableIndex()
         else:
             idx = search.Index()
             
         idx.open()
         try:
-            idx.index_book(self)
+            idx.index_book(self, book_info)
+            idx.index_tags()
         finally:
             idx.close()
 
@@ -834,7 +832,7 @@ class Book(models.Model):
             book.build_mobi()
 
         if not settings.NO_SEARCH_INDEX and search_index:
-            book.search_index()
+            index_book.delay(book.id, book_info)
 
         book_descendants = list(book.children.all())
         descendants_tags = set()
@@ -1037,7 +1035,7 @@ class Fragment(models.Model):
         verbose_name_plural = _('fragments')
 
     def get_absolute_url(self):
-        return '%s#m%s' % (self.book.get_html_url(), self.anchor)
+        return '%s#m%s' % (reverse('book_text', args=[self.book.slug]), self.anchor)
 
     def reset_short_html(self):
         if self.id is None: