diff forums/attachments.py @ 581:ee87ea74d46b

For Django 1.4, rearranged project structure for new manage.py.
author Brian Neal <bgneal@gmail.com>
date Sat, 05 May 2012 17:10:48 -0500
parents gpp/forums/attachments.py@72fd300685d5
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/forums/attachments.py	Sat May 05 17:10:48 2012 -0500
@@ -0,0 +1,59 @@
+"""
+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()
+
+    def has_attachments(self):
+        """
+        Return true if we have valid pending attachments.
+
+        """
+        return len(self.embeds) > 0
+
+    def get_ids(self):
+        """
+        Return the list of Oembed ids.
+
+        """
+        return self.pks