Don't error out when reindexing a post/thread that has been deleted
diff --git a/Allura/allura/model/discuss.py b/Allura/allura/model/discuss.py
index 25510c8..b3cf04b 100644
--- a/Allura/allura/model/discuss.py
+++ b/Allura/allura/model/discuss.py
@@ -600,11 +600,13 @@
@property
def subject(self):
- subject = self.thread.subject
- if not subject:
- artifact = self.thread.artifact
- if artifact:
- subject = getattr(artifact, 'email_subject', '')
+ subject = None
+ if self.thread:
+ subject = self.thread.subject
+ if not subject:
+ artifact = self.thread.artifact
+ if artifact:
+ subject = getattr(artifact, 'email_subject', '')
return subject or '(no subject)'
@LazyProperty
diff --git a/Allura/allura/tests/model/test_discussion.py b/Allura/allura/tests/model/test_discussion.py
index 2ff36f4..27f83cf 100644
--- a/Allura/allura/tests/model/test_discussion.py
+++ b/Allura/allura/tests/model/test_discussion.py
@@ -541,3 +541,18 @@
p1 = M.Post(discussion_id=d._id, thread_id=t._id, status='spam')
p1.spam()
assert_equal(t.num_replies, 1)
+
+
+def test_deleted_thread_index():
+ d = M.Discussion(shortname='test', name='test')
+ t = M.Thread(discussion_id=d._id, subject='Test Thread')
+ p = M.Post(discussion_id=d._id, thread_id=t._id, status='ok')
+ t.delete()
+ ThreadLocalORMSession.flush_all()
+
+ # re-query, so relationships get reloaded
+ ThreadLocalORMSession.close_all()
+ p = M.Post.query.get(_id=p._id)
+
+ # just make sure this doesn't fail
+ p.index()
\ No newline at end of file