Mercurial > public > sg101
annotate forums/attachments.py @ 934:9d6c2ed2f348
Add unit test for antispam signal handlers.
author | Brian Neal <bgneal@gmail.com> |
---|---|
date | Thu, 16 Apr 2015 20:49:19 -0500 |
parents | ee87ea74d46b |
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 |