from django.utils.safestring import mark_safe
from django.utils.translation import get_language
from django.core.urlresolvers import reverse
-from django.db.models.signals import post_save, m2m_changed, pre_delete
+from django.db.models.signals import post_save, m2m_changed, pre_delete, post_delete
import jsonfield
from django.conf import settings
return lambda *args: get_dynamic_path(*args, ext=ext, maxlen=maxlen)
+def customizations_hash(customizations):
+ customizations.sort()
+ return hash(tuple(customizations))
+
+
def get_customized_pdf_path(book, customizations):
"""
Returns a MEDIA_ROOT relative path for a customized pdf. The name will contain a hash of customization options.
"""
- customizations.sort()
- h = hash(tuple(customizations))
-
+ h = customizations_hash(customizations)
pdf_name = '%s-custom-%s' % (book.slug, h)
pdf_file = get_dynamic_path(None, pdf_name, ext='pdf')
instance.book.save()
pre_delete.connect(_pre_delete_handler)
+
def _post_save_handler(sender, instance, **kwargs):
""" refresh all the short_html stuff on BookMedia update """
if sender == BookMedia:
instance.book.save()
post_save.connect(_post_save_handler)
+
+
+@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."""
+ search.JVM.attachCurrentThread()
+ idx = search.Index()
+ idx.open(timeout=10000) # 10 seconds timeout.
+ try:
+ idx.remove_book(instance)
+ idx.index_tags()
+ finally:
+ idx.close()