diff gpp/forums/attachments.py @ 285:8fd4984d5c3b

This is a first rough commit for #95, adding the ability to embed YouTube videos in forum posts. Some more polish and testing needs to happen at this point. I wanted to get all these changes off my hard drive and into the repository.
author Brian Neal <bgneal@gmail.com>
date Thu, 14 Oct 2010 02:39:35 +0000
parents
children 72fd300685d5
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gpp/forums/attachments.py	Thu Oct 14 02:39:35 2010 +0000
@@ -0,0 +1,45 @@
+"""
+This module contains a class for handling attachments on forum posts.
+"""
+from oembed.models import Oembed
+from forums.models import Attachment
+
+
+class AttachmentProcessor(object):
+    """
+    This class is aggregated by various form classes to handle
+    attachments on forum posts. New posts can receive attachments and edited
+    posts can have their attachments replaced, augmented, or deleted.
+
+    """
+    def __init__(self, ids):
+        """
+        This class is constructed with a list of Oembed ids. We retrieve the
+        actual Oembed objects associated with these keys for use in subsequent
+        operations.
+        
+        """
+        # ensure all ids are integers
+        self.pks = []
+        for pk in ids:
+            try:
+                pk = int(pk)
+            except ValueError:
+                continue
+            self.pks.append(pk)
+
+        self.embeds = []
+        if self.pks:
+            self.embeds = Oembed.objects.in_bulk(self.pks)
+
+    def save_attachments(self, post):
+        """
+        Create and save attachments to the supplied post object.
+        Any existing attachments on the post are removed first.
+
+        """
+        post.attachments.clear()
+
+        for n, pk in enumerate(self.pks):
+            attachment = Attachment(post=post, embed=self.embeds[pk], order=n)
+            attachment.save()