1 # -*- coding: utf-8 -*-
2 # This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
3 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
5 from django.conf import settings
6 from django.core.cache import caches
7 from django.db.models.signals import post_save, pre_delete, post_delete
9 from catalogue.models import BookMedia, Book, Collection
10 from catalogue.utils import delete_from_cache_by_language
13 permanent_cache = caches['permanent']
16 def _pre_delete_handler(sender, instance, **kwargs):
17 """ refresh Book on BookMedia delete """
18 if sender == BookMedia:
20 pre_delete.connect(_pre_delete_handler)
23 def _post_delete_handler(sender, instance, **kwargs):
24 """ refresh Book on BookMedia delete """
25 if sender == Collection:
26 delete_from_cache_by_language(permanent_cache, 'catalogue.collection:%s/%%s' % instance.slug)
27 delete_from_cache_by_language(permanent_cache, 'catalogue.catalogue/%s')
28 post_delete.connect(_post_delete_handler)
31 def _post_save_handler(sender, instance, **kwargs):
32 """ refresh all the short_html stuff on BookMedia update """
33 if sender == BookMedia:
35 delete_from_cache_by_language(permanent_cache, 'catalogue.audiobook_list/%s')
36 delete_from_cache_by_language(permanent_cache, 'catalogue.daisy_list/%s')
37 elif sender == Collection:
38 delete_from_cache_by_language(permanent_cache, 'catalogue.collection:%s/%%s' % instance.slug)
39 delete_from_cache_by_language(permanent_cache, 'catalogue.catalogue/%s')
40 post_save.connect(_post_save_handler)
43 def post_publish(sender, **kwargs):
44 delete_from_cache_by_language(permanent_cache, 'catalogue.book_list/%s')
45 delete_from_cache_by_language(permanent_cache, 'catalogue.catalogue/%s')
46 Book.published.connect(post_publish)
49 if not settings.NO_SEARCH_INDEX:
50 @django.dispatch.receiver(post_delete, sender=Book)
51 def _remove_book_from_index_handler(sender, instance, **kwargs):
52 """ remove the book from search index, when it is deleted."""
53 from search.index import Index
55 idx.remove_book(instance)