If there is no rendered_content in the database, render it and

save it. This fixes the "Humbug note:" error on old messages that
do not have rendered_content in the DB.

(imported from commit f4664d712fc40e4af9eb12eae74f37d100499def)
This commit is contained in:
Kevin Mehall 2013-07-08 14:46:58 -04:00
parent dd53c1fbe3
commit a7c91bce1b
2 changed files with 21 additions and 14 deletions

View File

@ -342,25 +342,24 @@ class Message(models.Model):
return bugdown.convert(content, self.sender.realm.domain, self)
def set_rendered_content(self, rendered_content):
def set_rendered_content(self, rendered_content, save = False):
"""Set the content on the message.
This method does not call .save(). Save afterwards with
update_fields=["rendered_content", "rendered_content_version"].
"""
self.rendered_content = rendered_content
self.rendered_content_version = bugdown.version
if self.rendered_content is None:
if self.rendered_content is not None:
if save:
self.save(update_fields=["rendered_content", "rendered_content_version"])
return True
else:
return False
return True
def maybe_render_content(self):
def maybe_render_content(self, save = False):
"""Render the markdown if there is no existing rendered_content"""
if self.rendered_content is None:
return self.set_rendered_content(self.render_markdown(self.content))
if self.rendered_content_version < bugdown.version or self.rendered_content is None:
return self.set_rendered_content(self.render_markdown(self.content), save)
else:
return True
@ -409,10 +408,9 @@ class Message(models.Model):
if self.last_edit_time != None:
obj['last_edit_timestamp'] = datetime_to_timestamp(self.last_edit_time)
obj['edit_history'] = ujson.loads(self.edit_history)
if apply_markdown and self.rendered_content_version is not None:
obj['content'] = self.rendered_content
obj['content_type'] = 'text/html'
elif apply_markdown:
if apply_markdown:
self.maybe_render_content(save = True)
if self.rendered_content is not None:
obj['content'] = self.rendered_content
else:

View File

@ -1361,6 +1361,15 @@ class GetOldMessagesTest(AuthedTestCase):
self.exercise_bad_narrow_operand("pm-with", ['non-existent-user@humbughq.com'],
"Invalid narrow operator: unknown user")
def test_message_without_rendered_content(self):
"""Older messages may not have rendered_content in the database"""
m = Message.objects.all().order_by('-id')[0]
m.rendered_content = m.rendered_content_version = None
m.content = 'test content'
# Use to_dict_uncached directly to avoid having to deal with memcached
d = m.to_dict_uncached(True)
self.assertEqual(d['content'], '<p>test content</p>')
class InviteUserTest(AuthedTestCase):
def invite(self, users, streams):