diff --git a/taccsite_cms/settings.py b/taccsite_cms/settings.py index 59e4aaeb1..207c9bdc8 100644 --- a/taccsite_cms/settings.py +++ b/taccsite_cms/settings.py @@ -463,6 +463,7 @@ def get_subdirs_as_module_names(path): # Elasticsearch Indexing HAYSTACK_ROUTERS = ['aldryn_search.router.LanguageRouter',] +HAYSTACK_SIGNAL_PROCESSOR = 'taccsite_cms.signal_processor.RealtimeSignalProcessor' ALDRYN_SEARCH_DEFAULT_LANGUAGE = 'en' ALDRYN_SEARCH_REGISTER_APPHOOK = True HAYSTACK_CONNECTIONS = { diff --git a/taccsite_cms/signal_processor.py b/taccsite_cms/signal_processor.py new file mode 100644 index 000000000..1702b024f --- /dev/null +++ b/taccsite_cms/signal_processor.py @@ -0,0 +1,31 @@ +from haystack.signals import BaseSignalProcessor +from django.db import models +from django.core.management import call_command +from cms import signals + + +class RealtimeSignalProcessor(BaseSignalProcessor): + """ + A signal processor to make a call to the Django Haystack + `rebuild_index` management command when a CMS document is + published, unpublished, or deleted. This will allow the + ElasticSearch index to remain up-to-date with the latest + published CMS content when a user searches the site. + + Usage: + This signal processor hooks into Haystack via the + `HAYSTACK_SIGNAL_PROCESSOR` Django setting. + """ + + def setup(self): + signals.post_publish.connect(self.handle_save) + signals.post_unpublish.connect(self.handle_save) + models.signals.post_delete.connect(self.handle_save) + + def teardown(self): + signals.post_publish.disconnect(self.handle_save) + signals.post_unpublish.disconnect(self.handle_save) + models.signals.post_delete.disconnect(self.handle_save) + + def handle_save(self, **kwargs): + call_command('rebuild_index', '--noinput') diff --git a/taccsite_custom b/taccsite_custom index 601339db4..8abeb618c 160000 --- a/taccsite_custom +++ b/taccsite_custom @@ -1 +1 @@ -Subproject commit 601339db4535ce92527eaccdb8537d1a7d276204 +Subproject commit 8abeb618c67af165a9030932068d8bfdb2b9c8da