annotate gpp/forums/attachments.py @ 467:b910cc1460c8

Add the ability to conditionally add model instances to the search index on update. This is not perfect, as some instances should be deleted from the index if they are updated such that they should not be in the index anymore. Will think about and address that later.
author Brian Neal <bgneal@gmail.com>
date Sun, 24 Jul 2011 18:12:20 +0000
parents 72fd300685d5
children
rev   line source
bgneal@285 1 """
bgneal@285 2 This module contains a class for handling attachments on forum posts.
bgneal@285 3 """
bgneal@285 4 from oembed.models import Oembed
bgneal@285 5 from forums.models import Attachment
bgneal@285 6
bgneal@285 7
bgneal@285 8 class AttachmentProcessor(object):
bgneal@285 9 """
bgneal@285 10 This class is aggregated by various form classes to handle
bgneal@285 11 attachments on forum posts. New posts can receive attachments and edited
bgneal@285 12 posts can have their attachments replaced, augmented, or deleted.
bgneal@285 13
bgneal@285 14 """
bgneal@285 15 def __init__(self, ids):
bgneal@285 16 """
bgneal@285 17 This class is constructed with a list of Oembed ids. We retrieve the
bgneal@285 18 actual Oembed objects associated with these keys for use in subsequent
bgneal@285 19 operations.
bgneal@286 20
bgneal@285 21 """
bgneal@285 22 # ensure all ids are integers
bgneal@285 23 self.pks = []
bgneal@285 24 for pk in ids:
bgneal@285 25 try:
bgneal@285 26 pk = int(pk)
bgneal@285 27 except ValueError:
bgneal@285 28 continue
bgneal@285 29 self.pks.append(pk)
bgneal@285 30
bgneal@285 31 self.embeds = []
bgneal@285 32 if self.pks:
bgneal@285 33 self.embeds = Oembed.objects.in_bulk(self.pks)
bgneal@285 34
bgneal@285 35 def save_attachments(self, post):
bgneal@285 36 """
bgneal@285 37 Create and save attachments to the supplied post object.
bgneal@285 38 Any existing attachments on the post are removed first.
bgneal@285 39
bgneal@285 40 """
bgneal@285 41 post.attachments.clear()
bgneal@285 42
bgneal@285 43 for n, pk in enumerate(self.pks):
bgneal@285 44 attachment = Attachment(post=post, embed=self.embeds[pk], order=n)
bgneal@285 45 attachment.save()
bgneal@286 46
bgneal@286 47 def has_attachments(self):
bgneal@286 48 """
bgneal@286 49 Return true if we have valid pending attachments.
bgneal@286 50
bgneal@286 51 """
bgneal@286 52 return len(self.embeds) > 0
bgneal@286 53
bgneal@286 54 def get_ids(self):
bgneal@286 55 """
bgneal@286 56 Return the list of Oembed ids.
bgneal@286 57
bgneal@286 58 """
bgneal@286 59 return self.pks