changeset 677:858ce870c854

For #47, create custom search index for models with is_public.
author Brian Neal <bgneal@gmail.com>
date Wed, 14 Aug 2013 13:56:43 -0500
parents afb17af7948f
children 38a198ea8c61
files custom_search/indexes.py downloads/search_indexes.py weblinks/search_indexes.py
diffstat 3 files changed, 24 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- 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)
--- 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)
--- 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)