mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 05:53:43 +00:00 
			
		
		
		
	refactor: Rename bugdown to markdown in message.py and test_messages.py.
This commit is part of series of commits aimed at renaming bugdown to markdown.
This commit is contained in:
		@@ -13,7 +13,6 @@ from psycopg2.sql import SQL
 | 
				
			|||||||
from typing_extensions import TypedDict
 | 
					from typing_extensions import TypedDict
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from analytics.lib.counts import COUNT_STATS, RealmCount
 | 
					from analytics.lib.counts import COUNT_STATS, RealmCount
 | 
				
			||||||
from zerver.lib import markdown as bugdown
 | 
					 | 
				
			||||||
from zerver.lib.avatar import get_avatar_field
 | 
					from zerver.lib.avatar import get_avatar_field
 | 
				
			||||||
from zerver.lib.cache import (
 | 
					from zerver.lib.cache import (
 | 
				
			||||||
    cache_with_key,
 | 
					    cache_with_key,
 | 
				
			||||||
@@ -26,6 +25,10 @@ from zerver.lib.display_recipient import (
 | 
				
			|||||||
    UserDisplayRecipient,
 | 
					    UserDisplayRecipient,
 | 
				
			||||||
    bulk_fetch_display_recipients,
 | 
					    bulk_fetch_display_recipients,
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					from zerver.lib.markdown import MentionData
 | 
				
			||||||
 | 
					from zerver.lib.markdown import convert as markdown_convert
 | 
				
			||||||
 | 
					from zerver.lib.markdown import topic_links
 | 
				
			||||||
 | 
					from zerver.lib.markdown import version as markdown_version
 | 
				
			||||||
from zerver.lib.request import JsonableError
 | 
					from zerver.lib.request import JsonableError
 | 
				
			||||||
from zerver.lib.stream_subscription import get_stream_subscriptions_for_user
 | 
					from zerver.lib.stream_subscription import get_stream_subscriptions_for_user
 | 
				
			||||||
from zerver.lib.timestamp import datetime_to_timestamp
 | 
					from zerver.lib.timestamp import datetime_to_timestamp
 | 
				
			||||||
@@ -165,7 +168,7 @@ def message_to_dict_json(message: Message, realm_id: Optional[int]=None) -> byte
 | 
				
			|||||||
def save_message_rendered_content(message: Message, content: str) -> str:
 | 
					def save_message_rendered_content(message: Message, content: str) -> str:
 | 
				
			||||||
    rendered_content = render_markdown(message, content, realm=message.get_realm())
 | 
					    rendered_content = render_markdown(message, content, realm=message.get_realm())
 | 
				
			||||||
    message.rendered_content = rendered_content
 | 
					    message.rendered_content = rendered_content
 | 
				
			||||||
    message.rendered_content_version = bugdown.version
 | 
					    message.rendered_content_version = markdown_version
 | 
				
			||||||
    message.save_rendered_content()
 | 
					    message.save_rendered_content()
 | 
				
			||||||
    return rendered_content
 | 
					    return rendered_content
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -389,24 +392,24 @@ class MessageDict:
 | 
				
			|||||||
        # Render topic_links with the stream's realm instead of the
 | 
					        # Render topic_links with the stream's realm instead of the
 | 
				
			||||||
        # sender's realm; this is important for messages sent by
 | 
					        # sender's realm; this is important for messages sent by
 | 
				
			||||||
        # cross-realm bots like NOTIFICATION_BOT.
 | 
					        # cross-realm bots like NOTIFICATION_BOT.
 | 
				
			||||||
        obj[TOPIC_LINKS] = bugdown.topic_links(rendering_realm_id, topic_name)
 | 
					        obj[TOPIC_LINKS] = topic_links(rendering_realm_id, topic_name)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if last_edit_time is not None:
 | 
					        if last_edit_time is not None:
 | 
				
			||||||
            obj['last_edit_timestamp'] = datetime_to_timestamp(last_edit_time)
 | 
					            obj['last_edit_timestamp'] = datetime_to_timestamp(last_edit_time)
 | 
				
			||||||
            assert edit_history is not None
 | 
					            assert edit_history is not None
 | 
				
			||||||
            obj['edit_history'] = ujson.loads(edit_history)
 | 
					            obj['edit_history'] = ujson.loads(edit_history)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if Message.need_to_render_content(rendered_content, rendered_content_version, bugdown.version):
 | 
					        if Message.need_to_render_content(rendered_content, rendered_content_version, markdown_version):
 | 
				
			||||||
            # We really shouldn't be rendering objects in this method, but there is
 | 
					            # We really shouldn't be rendering objects in this method, but there is
 | 
				
			||||||
            # a scenario where we upgrade the version of bugdown and fail to run
 | 
					            # a scenario where we upgrade the version of markdown and fail to run
 | 
				
			||||||
            # management commands to re-render historical messages, and then we
 | 
					            # management commands to re-render historical messages, and then we
 | 
				
			||||||
            # need to have side effects.  This method is optimized to not need full
 | 
					            # need to have side effects.  This method is optimized to not need full
 | 
				
			||||||
            # blown ORM objects, but the bugdown renderer is unfortunately highly
 | 
					            # blown ORM objects, but the markdown renderer is unfortunately highly
 | 
				
			||||||
            # coupled to Message, and we also need to persist the new rendered content.
 | 
					            # coupled to Message, and we also need to persist the new rendered content.
 | 
				
			||||||
            # If we don't have a message object passed in, we get one here.  The cost
 | 
					            # If we don't have a message object passed in, we get one here.  The cost
 | 
				
			||||||
            # of going to the DB here should be overshadowed by the cost of rendering
 | 
					            # of going to the DB here should be overshadowed by the cost of rendering
 | 
				
			||||||
            # and updating the row.
 | 
					            # and updating the row.
 | 
				
			||||||
            # TODO: see #1379 to eliminate bugdown dependencies
 | 
					            # TODO: see #1379 to eliminate markdown dependencies
 | 
				
			||||||
            message = Message.objects.select_related().get(id=message_id)
 | 
					            message = Message.objects.select_related().get(id=message_id)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            assert message is not None  # Hint for mypy.
 | 
					            assert message is not None  # Hint for mypy.
 | 
				
			||||||
@@ -658,7 +661,7 @@ def render_markdown(message: Message,
 | 
				
			|||||||
                    content: str,
 | 
					                    content: str,
 | 
				
			||||||
                    realm: Optional[Realm]=None,
 | 
					                    realm: Optional[Realm]=None,
 | 
				
			||||||
                    realm_alert_words_automaton: Optional[ahocorasick.Automaton]=None,
 | 
					                    realm_alert_words_automaton: Optional[ahocorasick.Automaton]=None,
 | 
				
			||||||
                    mention_data: Optional[bugdown.MentionData]=None,
 | 
					                    mention_data: Optional[MentionData]=None,
 | 
				
			||||||
                    email_gateway: bool=False) -> str:
 | 
					                    email_gateway: bool=False) -> str:
 | 
				
			||||||
    '''
 | 
					    '''
 | 
				
			||||||
    This is basically just a wrapper for do_render_markdown.
 | 
					    This is basically just a wrapper for do_render_markdown.
 | 
				
			||||||
@@ -690,9 +693,9 @@ def do_render_markdown(message: Message,
 | 
				
			|||||||
                       sent_by_bot: bool,
 | 
					                       sent_by_bot: bool,
 | 
				
			||||||
                       translate_emoticons: bool,
 | 
					                       translate_emoticons: bool,
 | 
				
			||||||
                       realm_alert_words_automaton: Optional[ahocorasick.Automaton]=None,
 | 
					                       realm_alert_words_automaton: Optional[ahocorasick.Automaton]=None,
 | 
				
			||||||
                       mention_data: Optional[bugdown.MentionData]=None,
 | 
					                       mention_data: Optional[MentionData]=None,
 | 
				
			||||||
                       email_gateway: bool=False) -> str:
 | 
					                       email_gateway: bool=False) -> str:
 | 
				
			||||||
    """Return HTML for given markdown. Bugdown may add properties to the
 | 
					    """Return HTML for given markdown. Markdown may add properties to the
 | 
				
			||||||
    message object such as `mentions_user_ids`, `mentions_user_group_ids`, and
 | 
					    message object such as `mentions_user_ids`, `mentions_user_group_ids`, and
 | 
				
			||||||
    `mentions_wildcard`.  These are only on this Django object and are not
 | 
					    `mentions_wildcard`.  These are only on this Django object and are not
 | 
				
			||||||
    saved in the database.
 | 
					    saved in the database.
 | 
				
			||||||
@@ -705,8 +708,8 @@ def do_render_markdown(message: Message,
 | 
				
			|||||||
    message.links_for_preview = set()
 | 
					    message.links_for_preview = set()
 | 
				
			||||||
    message.user_ids_with_alert_words = set()
 | 
					    message.user_ids_with_alert_words = set()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # DO MAIN WORK HERE -- call bugdown to convert
 | 
					    # DO MAIN WORK HERE -- call markdown to convert
 | 
				
			||||||
    rendered_content = bugdown.convert(
 | 
					    rendered_content = markdown_convert(
 | 
				
			||||||
        content,
 | 
					        content,
 | 
				
			||||||
        realm_alert_words_automaton=realm_alert_words_automaton,
 | 
					        realm_alert_words_automaton=realm_alert_words_automaton,
 | 
				
			||||||
        message=message,
 | 
					        message=message,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -16,7 +16,6 @@ from django.utils.timezone import now as timezone_now
 | 
				
			|||||||
from analytics.lib.counts import COUNT_STATS
 | 
					from analytics.lib.counts import COUNT_STATS
 | 
				
			||||||
from analytics.models import RealmCount
 | 
					from analytics.models import RealmCount
 | 
				
			||||||
from zerver.decorator import JsonableError
 | 
					from zerver.decorator import JsonableError
 | 
				
			||||||
from zerver.lib import markdown as bugdown
 | 
					 | 
				
			||||||
from zerver.lib.actions import (
 | 
					from zerver.lib.actions import (
 | 
				
			||||||
    check_message,
 | 
					    check_message,
 | 
				
			||||||
    check_send_stream_message,
 | 
					    check_send_stream_message,
 | 
				
			||||||
@@ -50,6 +49,8 @@ from zerver.lib.actions import (
 | 
				
			|||||||
from zerver.lib.addressee import Addressee
 | 
					from zerver.lib.addressee import Addressee
 | 
				
			||||||
from zerver.lib.cache import cache_delete, get_stream_cache_key, to_dict_cache_key_id
 | 
					from zerver.lib.cache import cache_delete, get_stream_cache_key, to_dict_cache_key_id
 | 
				
			||||||
from zerver.lib.create_user import create_user_profile
 | 
					from zerver.lib.create_user import create_user_profile
 | 
				
			||||||
 | 
					from zerver.lib.markdown import MentionData
 | 
				
			||||||
 | 
					from zerver.lib.markdown import version as markdown_version
 | 
				
			||||||
from zerver.lib.message import (
 | 
					from zerver.lib.message import (
 | 
				
			||||||
    MessageDict,
 | 
					    MessageDict,
 | 
				
			||||||
    bulk_access_messages,
 | 
					    bulk_access_messages,
 | 
				
			||||||
@@ -1383,7 +1384,7 @@ class MessageDictTest(ZulipTestCase):
 | 
				
			|||||||
                    recipient=recipient,
 | 
					                    recipient=recipient,
 | 
				
			||||||
                    content=f'whatever {i}',
 | 
					                    content=f'whatever {i}',
 | 
				
			||||||
                    rendered_content='DOES NOT MATTER',
 | 
					                    rendered_content='DOES NOT MATTER',
 | 
				
			||||||
                    rendered_content_version=bugdown.version,
 | 
					                    rendered_content_version=markdown_version,
 | 
				
			||||||
                    date_sent=timezone_now(),
 | 
					                    date_sent=timezone_now(),
 | 
				
			||||||
                    sending_client=sending_client,
 | 
					                    sending_client=sending_client,
 | 
				
			||||||
                    last_edit_time=timezone_now(),
 | 
					                    last_edit_time=timezone_now(),
 | 
				
			||||||
@@ -1445,9 +1446,9 @@ class MessageDictTest(ZulipTestCase):
 | 
				
			|||||||
        self.assertEqual(dct['rendered_content'], expected_content)
 | 
					        self.assertEqual(dct['rendered_content'], expected_content)
 | 
				
			||||||
        message = Message.objects.get(id=message.id)
 | 
					        message = Message.objects.get(id=message.id)
 | 
				
			||||||
        self.assertEqual(message.rendered_content, expected_content)
 | 
					        self.assertEqual(message.rendered_content, expected_content)
 | 
				
			||||||
        self.assertEqual(message.rendered_content_version, bugdown.version)
 | 
					        self.assertEqual(message.rendered_content_version, markdown_version)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @mock.patch("zerver.lib.message.bugdown.convert")
 | 
					    @mock.patch("zerver.lib.message.markdown_convert")
 | 
				
			||||||
    def test_applying_markdown_invalid_format(self, convert_mock: Any) -> None:
 | 
					    def test_applying_markdown_invalid_format(self, convert_mock: Any) -> None:
 | 
				
			||||||
        # pretend the converter returned an invalid message without raising an exception
 | 
					        # pretend the converter returned an invalid message without raising an exception
 | 
				
			||||||
        convert_mock.return_value = None
 | 
					        convert_mock.return_value = None
 | 
				
			||||||
@@ -4218,7 +4219,7 @@ class MessageHasKeywordsTest(ZulipTestCase):
 | 
				
			|||||||
            self.assertEqual(attachment.is_claimed(), claimed)
 | 
					            self.assertEqual(attachment.is_claimed(), claimed)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # This message should claim attachments 1 only because attachment 2
 | 
					        # This message should claim attachments 1 only because attachment 2
 | 
				
			||||||
        # is not being parsed as a link by Bugdown.
 | 
					        # is not being parsed as a link by Markdown.
 | 
				
			||||||
        body = ("Some files here ...[zulip.txt]({})" +
 | 
					        body = ("Some files here ...[zulip.txt]({})" +
 | 
				
			||||||
                "{}.... Some more...." +
 | 
					                "{}.... Some more...." +
 | 
				
			||||||
                "{}").format(dummy_urls[0], dummy_urls[1], dummy_urls[1])
 | 
					                "{}").format(dummy_urls[0], dummy_urls[1], dummy_urls[1])
 | 
				
			||||||
@@ -4227,7 +4228,7 @@ class MessageHasKeywordsTest(ZulipTestCase):
 | 
				
			|||||||
        assert_attachment_claimed(dummy_path_ids[1], False)
 | 
					        assert_attachment_claimed(dummy_path_ids[1], False)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # This message tries to claim the third attachment but fails because
 | 
					        # This message tries to claim the third attachment but fails because
 | 
				
			||||||
        # Bugdown would not set has_attachments = True here.
 | 
					        # Markdown would not set has_attachments = True here.
 | 
				
			||||||
        body = f"Link in code: `{dummy_urls[2]}`"
 | 
					        body = f"Link in code: `{dummy_urls[2]}`"
 | 
				
			||||||
        self.send_stream_message(user_profile, "Denmark", body, "test")
 | 
					        self.send_stream_message(user_profile, "Denmark", body, "test")
 | 
				
			||||||
        assert_attachment_claimed(dummy_path_ids[2], False)
 | 
					        assert_attachment_claimed(dummy_path_ids[2], False)
 | 
				
			||||||
@@ -4265,7 +4266,7 @@ class MessageHasKeywordsTest(ZulipTestCase):
 | 
				
			|||||||
        hamlet = self.example_user('hamlet')
 | 
					        hamlet = self.example_user('hamlet')
 | 
				
			||||||
        realm_id = hamlet.realm.id
 | 
					        realm_id = hamlet.realm.id
 | 
				
			||||||
        rendered_content = render_markdown(msg, content)
 | 
					        rendered_content = render_markdown(msg, content)
 | 
				
			||||||
        mention_data = bugdown.MentionData(realm_id, content)
 | 
					        mention_data = MentionData(realm_id, content)
 | 
				
			||||||
        do_update_message(hamlet, msg, None, None, "change_one", False, False, content,
 | 
					        do_update_message(hamlet, msg, None, None, "change_one", False, False, content,
 | 
				
			||||||
                          rendered_content, set(), set(), mention_data=mention_data)
 | 
					                          rendered_content, set(), set(), mention_data=mention_data)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user