X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/7f0caf88dd3aac2e4d5bb4ee064137e03ecd4f03..5b9ee3437b7fa98820eba7286abd524c3ede76e9:/apps/catalogue/models/listeners.py diff --git a/apps/catalogue/models/listeners.py b/apps/catalogue/models/listeners.py index 373a2fcc8..d414eb27f 100644 --- a/apps/catalogue/models/listeners.py +++ b/apps/catalogue/models/listeners.py @@ -3,34 +3,14 @@ # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. # from django.conf import settings -from django.core.cache import get_cache +from django.core.cache import caches 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 newtagging.models import tags_updated +from catalogue.models import BookMedia, Book, Collection +from catalogue.utils import delete_from_cache_by_language -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 - for tag in affected_tags: - tasks.touch_tag(tag) - - # if book tags changed, reset book tag counter - if isinstance(sender, Book) and \ - Tag.objects.filter(pk__in=(tag.pk for tag in affected_tags)).\ - exclude(category__in=('book', 'theme', 'set')).count(): - sender.reset_tag_counter() - # if fragment theme changed, reset book theme counter - elif isinstance(sender, Fragment) and \ - Tag.objects.filter(pk__in=(tag.pk for tag in affected_tags)).\ - filter(category='theme').count(): - sender.book.reset_theme_counter() -tags_updated.connect(_tags_updated_handler) +permanent_cache = caches['permanent'] def _pre_delete_handler(sender, instance, **kwargs): @@ -43,8 +23,8 @@ pre_delete.connect(_pre_delete_handler) def _post_delete_handler(sender, instance, **kwargs): """ refresh Book on BookMedia delete """ if sender == Collection: - permanent_cache.delete('catalogue.collection:%s' % instance.slug) - permanent_cache.delete('catalogue.catalogue') + 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) @@ -52,17 +32,17 @@ def _post_save_handler(sender, instance, **kwargs): """ refresh all the short_html stuff on BookMedia update """ if sender == BookMedia: instance.book.save() - permanent_cache.delete_many([ - 'catalogue.audiobook_list', 'catalogue.daisy_list']) + 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) - permanent_cache.delete('catalogue.catalogue') + 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('catalogue.book_list') - permanent_cache.delete('catalogue.catalogue') + 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) @@ -70,7 +50,7 @@ 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 - idx = search.Index() + from search.index import Index + idx = Index() idx.remove_book(instance) idx.index_tags()