Merge branch 'master' into obrazy
[wolnelektury.git] / apps / catalogue / models / listeners.py
index 7e034a1..5ef7e9e 100644 (file)
@@ -8,6 +8,7 @@ from django.db.models.signals import post_save, pre_delete, post_delete
 import django.dispatch
 from catalogue.models import Tag, BookMedia, Book, Fragment, Collection
 from catalogue import tasks
+from catalogue.utils import delete_from_cache_by_language
 from newtagging.models import tags_updated
 
 
@@ -40,18 +41,29 @@ def _pre_delete_handler(sender, instance, **kwargs):
 pre_delete.connect(_pre_delete_handler)
 
 
+def _post_delete_handler(sender, instance, **kwargs):
+    """ refresh Book on BookMedia delete """
+    if sender == Collection:
+        delete_from_cache_by_language(permanent_cache, 'catalogue.collection:%s/%%s' % instance.slug)
+        delete_from_cache_by_language(permanent_cache, 'catalogue.catalogue/%s')
+post_delete.connect(_post_delete_handler)
+
+
 def _post_save_handler(sender, instance, **kwargs):
     """ refresh all the short_html stuff on BookMedia update """
     if sender == BookMedia:
         instance.book.save()
+        delete_from_cache_by_language(permanent_cache, 'catalogue.audiobook_list/%s')
+        delete_from_cache_by_language(permanent_cache, 'catalogue.daisy_list/%s')
     elif sender == Collection:
-        permanent_cache.delete('catalogue.collection:%s' % instance.slug)
+        delete_from_cache_by_language(permanent_cache, 'catalogue.collection:%s/%%s' % instance.slug)
+        delete_from_cache_by_language(permanent_cache, 'catalogue.catalogue/%s')
 post_save.connect(_post_save_handler)
 
 
 def post_publish(sender, **kwargs):
-    permanent_cache.delete_many(['catalogue.book_list',
-            'catalogue.audiobook_list', 'catalogue.daisy_list'])
+    delete_from_cache_by_language(permanent_cache, 'catalogue.book_list/%s')
+    delete_from_cache_by_language(permanent_cache, 'catalogue.catalogue/%s')
 Book.published.connect(post_publish)
 
 
@@ -60,11 +72,6 @@ if not settings.NO_SEARCH_INDEX:
     def _remove_book_from_index_handler(sender, instance, **kwargs):
         """ remove the book from search index, when it is deleted."""
         import search
-        search.JVM.attachCurrentThread()
         idx = search.Index()
-        idx.open(timeout=10000)  # 10 seconds timeout.
-        try:
-            idx.remove_book(instance)
-            idx.index_tags()
-        finally:
-            idx.close()
+        idx.remove_book(instance)
+        idx.index_tags()