From 7fb992dba3f04381364c5236b858c792d979ef6e Mon Sep 17 00:00:00 2001 From: Steve Howell Date: Tue, 4 Oct 2016 08:35:36 -0700 Subject: [PATCH] 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. --- zerver/lib/message.py | 16 ++++++++++++++++ zerver/models.py | 16 ---------------- .../management/commands/render_old_messages.py | 6 ++++-- 3 files changed, 20 insertions(+), 18 deletions(-) diff --git a/zerver/lib/message.py b/zerver/lib/message.py index 01c034040f..42b737cb25 100644 --- a/zerver/lib/message.py +++ b/zerver/lib/message.py @@ -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() + diff --git a/zerver/models.py b/zerver/models.py index bbfd280971..a942c7d300 100644 --- a/zerver/models.py +++ b/zerver/models.py @@ -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 diff --git a/zilencer/management/commands/render_old_messages.py b/zilencer/management/commands/render_old_messages.py index 7a4b15e790..34125a26fc 100644 --- a/zilencer/management/commands/render_old_messages.py +++ b/zilencer/management/commands/render_old_messages.py @@ -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