[#8167] allow blog post edits & deletes when feed_item does not exist (eg. if tool/proj was private); create feed item upon re-edit if needed
diff --git a/ForgeBlog/forgeblog/model/blog.py b/ForgeBlog/forgeblog/model/blog.py
index bafd1ab..67b45b6 100644
--- a/ForgeBlog/forgeblog/model/blog.py
+++ b/ForgeBlog/forgeblog/model/blog.py
@@ -258,8 +258,12 @@
                     c.user.username, self.title)
             elif v2.state == 'published':
                 feed_item = self.feed_item()
-                feed_item.title = self.title
-                feed_item.description = g.markdown.convert(self.text)
+                if feed_item:
+                    feed_item.title = self.title
+                    feed_item.description = g.markdown.convert(self.text)
+                else:
+                    M.Feed.post(self, self.title, self.text, author=self.author(),
+                                pubdate=self.get_version(1).timestamp)
                 if v1.title != v2.title:
                     activity('renamed', self)
                     subject = '%s renamed post %s to %s' % (
@@ -269,7 +273,9 @@
                     subject = '%s modified post %s' % (
                         c.user.username, self.title)
             elif v1.state == 'published' and v2.state == 'draft':
-                self.feed_item().delete()
+                feed_item = self.feed_item()
+                if feed_item:
+                    feed_item.delete()
         else:
             description = self.text
             subject = '%s created post %s' % (
@@ -310,7 +316,9 @@
                                 link=self.link_regex)
 
     def delete(self):
-        self.feed_item().delete()
+        feed_item = self.feed_item()
+        if feed_item:
+            feed_item.delete()
         super(BlogPost, self).delete()