Simplify and "fix" render_old_messages management command.

The command to render old messages now looks for all messages
not matching the bugdown version, and it no longer directly calls
into model code.  We should still be extremely cautious about
using this code.
This commit is contained in:
Steve Howell
2016-10-04 08:35:36 -07:00
parent 6b71f5bd5f
commit 7fb992dba3
3 changed files with 20 additions and 18 deletions

View File

@@ -213,3 +213,19 @@ class MessageDict(object):
return obj
def re_render_content_for_management_command(message):
# type: (Message) -> None
'''
Please avoid using this function, as its only used in a management command that
is somewhat deprecated.
'''
assert Message.need_to_render_content(message.rendered_content,
message.rendered_content_version,
bugdown.version)
rendered_content = message.render_markdown(message.content)
message.rendered_content = rendered_content
message.rendered_content_version = bugdown.version
message.save_rendered_content()

View File

@@ -878,22 +878,6 @@ class Message(ModelReprMixin, models.Model):
# type: () -> None
self.save(update_fields=["rendered_content", "rendered_content_version"])
def maybe_render_content(self, domain, save = False):
# type: (Optional[text_type], bool) -> bool
"""Render the markdown if there is no existing rendered_content"""
# TODO: see #1379 to eliminate bugdown dependencies
global bugdown
if bugdown is None:
import zerver.lib.bugdown as bugdown
# 'from zerver.lib import bugdown' gives mypy error in python 3 mode.
if Message.need_to_render_content(self.rendered_content,
self.rendered_content_version,
bugdown.version):
return self.set_rendered_content(self.render_markdown(self.content, domain), save)
else:
return True
@staticmethod
def need_to_render_content(rendered_content, rendered_content_version, bugdown_version):
# type: (Optional[text_type], int, int) -> bool

View File

@@ -5,6 +5,8 @@ from typing import Any
from django.core.management.base import BaseCommand
import zerver.lib.bugdown as bugdown
from zerver.lib.message import re_render_content_for_management_command
from zerver.models import Message
import datetime
import time
@@ -18,11 +20,11 @@ Usage: python manage.py render_old_messages"""
# type: (*Any, **Any) -> None
total_rendered = 0
while True:
messages = Message.objects.filter(rendered_content_version=None)[0:100]
messages = Message.objects.exclude(rendered_content_version=bugdown.version)[0:100]
if len(messages) == 0:
break
for message in messages:
message.maybe_render_content(None, save=True)
re_render_content_for_management_command(message)
total_rendered += len(messages)
print(datetime.datetime.now(), total_rendered)
# Put in some sleep so this can run safely on low resource machines