X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/c661073dd0969caa9a47a225f3d3fae767295c3d..aae232dcf008ab39db553bc1b20573fa00e3b191:/apps/catalogue/models/listeners.py diff --git a/apps/catalogue/models/listeners.py b/apps/catalogue/models/listeners.py index 9e9fcabff..5ef7e9efd 100644 --- a/apps/catalogue/models/listeners.py +++ b/apps/catalogue/models/listeners.py @@ -3,13 +3,18 @@ # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. # from django.conf import settings +from django.core.cache import get_cache from django.db.models.signals import post_save, pre_delete, post_delete import django.dispatch -from catalogue.models import Tag, BookMedia, Book, Fragment +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 +permanent_cache = get_cache('permanent') + + def _tags_updated_handler(sender, affected_tags, **kwargs): # reset tag global counter # we want Tag.changed_at updated for API to know the tag was touched @@ -36,23 +41,37 @@ 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: + 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): + 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) + + if not settings.NO_SEARCH_INDEX: @django.dispatch.receiver(post_delete, sender=Book) 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()