Switch to side-by-side view

--- a/Allura/allura/app.py
+++ b/Allura/allura/app.py
@@ -5,7 +5,7 @@
 from tg import expose, redirect, flash
 from tg.decorators import without_trailing_slash
 from pylons import c, g
-from pymongo.bson import ObjectId
+from bson import ObjectId
 
 from ming.orm import session
 
@@ -202,6 +202,7 @@
         # Handle attachments
         message_id = data['message_id'][0]
         if data.get('filename'):
+            # Special case - the actual post may not have been created yet
             log.info('Saving attachment %s', data['filename'])
             fp = StringIO(data['payload'])
             self.AttachmentClass.save_attachment(
@@ -209,25 +210,26 @@
                 content_type=data.get('content_type', 'application/octet-stream'),
                 discussion_id=self.config.discussion_id,
                 thread_id=thd._id,
-                post_id=message_id)
+                post_id=message_id,
+                artifact_id=message_id)
             return
         # Handle duplicates
-        original = self.PostClass.query.get(_id=message_id)
-        if original:
+        post = self.PostClass.query.get(_id=message_id)
+        if post:
             log.info('Saving text attachment')
-            self.AttachmentClass.save(
-                'alternate',
-                data.get('content_type', 'application/octet-stream'),
-                data['payload'],
+            fp = StringIO(data['payload'])
+            post.attach(
+                'alternate', fp,
+                content_type=data.get('content_type', 'application/octet-stream'),
                 discussion_id=self.config.discussion_id,
                 thread_id=thd._id,
                 post_id=message_id)
-            return
-        thd.post(
-            text=data['payload'] or '--no text body--',
-            message_id=message_id,
-            parent_id=parent_id,
-            **kw)
+        else:
+            post = thd.post(
+                text=data['payload'] or '--no text body--',
+                message_id=message_id,
+                parent_id=parent_id,
+                **kw)
 
 
 class DefaultAdminController(BaseController):