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 Tag, BookMedia, Book, Fragment, Collection
10 from catalogue import tasks
11 from catalogue.utils import delete_from_cache_by_language
12 from newtagging.models import tags_updated
15 permanent_cache = caches['permanent']
18 def _pre_delete_handler(sender, instance, **kwargs):
19 """ refresh Book on BookMedia delete """
20 if sender == BookMedia:
22 pre_delete.connect(_pre_delete_handler)
25 def _post_delete_handler(sender, instance, **kwargs):
26 """ refresh Book on BookMedia delete """
27 if sender == Collection:
28 delete_from_cache_by_language(permanent_cache, 'catalogue.collection:%s/%%s' % instance.slug)
29 delete_from_cache_by_language(permanent_cache, 'catalogue.catalogue/%s')
30 post_delete.connect(_post_delete_handler)
33 def _post_save_handler(sender, instance, **kwargs):
34 """ refresh all the short_html stuff on BookMedia update """
35 if sender == BookMedia:
37 delete_from_cache_by_language(permanent_cache, 'catalogue.audiobook_list/%s')
38 delete_from_cache_by_language(permanent_cache, 'catalogue.daisy_list/%s')
39 elif sender == Collection:
40 delete_from_cache_by_language(permanent_cache, 'catalogue.collection:%s/%%s' % instance.slug)
41 delete_from_cache_by_language(permanent_cache, 'catalogue.catalogue/%s')
42 post_save.connect(_post_save_handler)
45 def post_publish(sender, **kwargs):
46 delete_from_cache_by_language(permanent_cache, 'catalogue.book_list/%s')
47 delete_from_cache_by_language(permanent_cache, 'catalogue.catalogue/%s')
48 Book.published.connect(post_publish)
51 if not settings.NO_SEARCH_INDEX:
52 @django.dispatch.receiver(post_delete, sender=Book)
53 def _remove_book_from_index_handler(sender, instance, **kwargs):
54 """ remove the book from search index, when it is deleted."""
55 from search.index import Index
57 idx.remove_book(instance)