annotate custom_search/indexes.py @ 697:67f8d49a9377

Cleaned up the code a bit. Separated the S3 stuff out into its own class. This class maybe should be in core. Still want to do some kind of context manager around the temporary file we are creating to ensure it gets deleted.
author Brian Neal <bgneal@gmail.com>
date Sun, 08 Sep 2013 21:02:58 -0500
parents 858ce870c854
children
rev   line source
bgneal@469 1 """
bgneal@469 2 This module contains custom search indexes to tailor the Haystack search
bgneal@469 3 application to our needs.
bgneal@469 4
bgneal@469 5 """
bgneal@469 6 from queued_search.indexes import QueuedSearchIndex
bgneal@469 7
bgneal@469 8
bgneal@469 9 class CondQueuedSearchIndex(QueuedSearchIndex):
bgneal@469 10 """
bgneal@469 11 This customized version of QueuedSearchIndex conditionally enqueues items
bgneal@469 12 to be indexed by calling the can_index() method.
bgneal@469 13
bgneal@469 14 """
bgneal@469 15 def can_index(self, instance):
bgneal@469 16 """
bgneal@469 17 The default is to index all instances. Override this method to
bgneal@469 18 customize the behavior. This will be called on all update operations.
bgneal@469 19
bgneal@469 20 """
bgneal@469 21 return True
bgneal@469 22
bgneal@469 23 def enqueue(self, action, instance):
bgneal@469 24 """
bgneal@469 25 This method enqueues the instance only if the can_index() method
bgneal@469 26 returns True.
bgneal@469 27
bgneal@469 28 """
bgneal@469 29 if (action == 'update' and self.can_index(instance) or
bgneal@469 30 action == 'delete'):
bgneal@469 31 super(CondQueuedSearchIndex, self).enqueue(action, instance)
bgneal@677 32
bgneal@677 33
bgneal@677 34 class PublicQueuedSearchIndex(QueuedSearchIndex):
bgneal@677 35 """QueuedSearchIndex for models with is_public attributes."""
bgneal@677 36
bgneal@677 37 def enqueue(self, action, instance):
bgneal@677 38 """Conditionally enqueue actions as follows.
bgneal@677 39
bgneal@677 40 For update actions: if is_public is True, enqueue the update. If
bgneal@677 41 is_public is False, enqueue a delete action.
bgneal@677 42
bgneal@677 43 Delete actions are always enqueued.
bgneal@677 44
bgneal@677 45 """
bgneal@677 46 if action == 'update' and instance.is_public:
bgneal@677 47 super(PublicQueuedSearchIndex, self).enqueue(action, instance)
bgneal@677 48 elif (action == 'update' and not instance.is_public) or action == 'delete':
bgneal@677 49 super(PublicQueuedSearchIndex, self).enqueue('delete', instance)