# HG changeset patch # User Brian Neal # Date 1376506603 18000 # Node ID 858ce870c854e2c10fbcff9096a9c7982f5f9bf1 # Parent afb17af7948ff306c05814ea0a32f4929a795931 For #47, create custom search index for models with is_public. diff -r afb17af7948f -r 858ce870c854 custom_search/indexes.py --- a/custom_search/indexes.py Sat Aug 03 22:14:04 2013 -0500 +++ b/custom_search/indexes.py Wed Aug 14 13:56:43 2013 -0500 @@ -29,3 +29,21 @@ if (action == 'update' and self.can_index(instance) or action == 'delete'): super(CondQueuedSearchIndex, self).enqueue(action, instance) + + +class PublicQueuedSearchIndex(QueuedSearchIndex): + """QueuedSearchIndex for models with is_public attributes.""" + + def enqueue(self, action, instance): + """Conditionally enqueue actions as follows. + + For update actions: if is_public is True, enqueue the update. If + is_public is False, enqueue a delete action. + + Delete actions are always enqueued. + + """ + if action == 'update' and instance.is_public: + super(PublicQueuedSearchIndex, self).enqueue(action, instance) + elif (action == 'update' and not instance.is_public) or action == 'delete': + super(PublicQueuedSearchIndex, self).enqueue('delete', instance) diff -r afb17af7948f -r 858ce870c854 downloads/search_indexes.py --- a/downloads/search_indexes.py Sat Aug 03 22:14:04 2013 -0500 +++ b/downloads/search_indexes.py Wed Aug 14 13:56:43 2013 -0500 @@ -1,12 +1,12 @@ """Haystack search index for the downloads application.""" -from haystack.indexes import * +from haystack.indexes import CharField, DateTimeField from haystack import site -from custom_search.indexes import CondQueuedSearchIndex +from custom_search.indexes import PublicQueuedSearchIndex from downloads.models import Download -class DownloadIndex(CondQueuedSearchIndex): +class DownloadIndex(PublicQueuedSearchIndex): text = CharField(document=True, use_template=True) author = CharField(model_attr='user') pub_date = DateTimeField(model_attr='date_added') @@ -17,7 +17,4 @@ def get_updated_field(self): return 'update_date' - def can_index(self, instance): - return instance.is_public - site.register(Download, DownloadIndex) diff -r afb17af7948f -r 858ce870c854 weblinks/search_indexes.py --- a/weblinks/search_indexes.py Sat Aug 03 22:14:04 2013 -0500 +++ b/weblinks/search_indexes.py Wed Aug 14 13:56:43 2013 -0500 @@ -1,12 +1,12 @@ """Haystack search index for the weblinks application.""" -from haystack.indexes import * +from haystack.indexes import CharField, DateTimeField from haystack import site -from custom_search.indexes import CondQueuedSearchIndex +from custom_search.indexes import PublicQueuedSearchIndex from weblinks.models import Link -class LinkIndex(CondQueuedSearchIndex): +class LinkIndex(PublicQueuedSearchIndex): text = CharField(document=True, use_template=True) author = CharField(model_attr='user') pub_date = DateTimeField(model_attr='date_added') @@ -17,7 +17,4 @@ def get_updated_field(self): return 'update_date' - def can_index(self, instance): - return instance.is_public - site.register(Link, LinkIndex)