def render_markdown(message: Message, content: str, realm: Optional[Realm]=None, realm_alert_words_automaton: Optional[ahocorasick.Automaton]=None, mention_data: Optional[bugdown.MentionData]=None, email_gateway: bool=False) -> str: ''' This is basically just a wrapper for do_render_markdown. ''' if realm is None: realm = message.get_realm() sender = get_user_profile_by_id(message.sender_id) sent_by_bot = sender.is_bot translate_emoticons = sender.translate_emoticons rendered_content = do_render_markdown( message=message, content=content, realm=realm, realm_alert_words_automaton=realm_alert_words_automaton, sent_by_bot=sent_by_bot, translate_emoticons=translate_emoticons, mention_data=mention_data, email_gateway=email_gateway, ) return rendered_content
def render_markdown(message: Message, content: Text, realm: Optional[Realm] = None, realm_alert_words: Optional[RealmAlertWords] = None, user_ids: Optional[Set[int]] = None, mention_data: Optional[bugdown.MentionData] = None, email_gateway: Optional[bool] = False) -> Text: """Return HTML for given markdown. Bugdown may add properties to the message object such as `mentions_user_ids`, `mentions_user_group_ids`, and `mentions_wildcard`. These are only on this Django object and are not saved in the database. """ if user_ids is None: message_user_ids = set() # type: Set[int] else: message_user_ids = user_ids if message is not None: message.mentions_wildcard = False message.mentions_user_ids = set() message.mentions_user_group_ids = set() message.alert_words = set() message.links_for_preview = set() if realm is None: realm = message.get_realm() possible_words = set() # type: Set[Text] if realm_alert_words is not None: for user_id, words in realm_alert_words.items(): if user_id in message_user_ids: possible_words.update(set(words)) if message is None: # If we don't have a message, then we are in the compose preview # codepath, so we know we are dealing with a human. sent_by_bot = False else: sent_by_bot = get_user_profile_by_id(message.sender_id).is_bot # DO MAIN WORK HERE -- call bugdown to convert rendered_content = bugdown.convert(content, message=message, message_realm=realm, possible_words=possible_words, sent_by_bot=sent_by_bot, mention_data=mention_data, email_gateway=email_gateway) if message is not None: message.user_ids_with_alert_words = set() if realm_alert_words is not None: for user_id, words in realm_alert_words.items(): if user_id in message_user_ids: if set(words).intersection(message.alert_words): message.user_ids_with_alert_words.add(user_id) return rendered_content
def render_markdown( message: Message, content: str, realm: Optional[Realm] = None, realm_alert_words_automaton: Optional[ahocorasick.Automaton] = None, mention_data: Optional[MentionData] = None, email_gateway: bool = False, ) -> MessageRenderingResult: """ This is basically just a wrapper for do_render_markdown. """ if realm is None: realm = message.get_realm() sender = message.sender sent_by_bot = sender.is_bot translate_emoticons = sender.translate_emoticons rendering_result = markdown_convert( content, realm_alert_words_automaton=realm_alert_words_automaton, message=message, message_realm=realm, sent_by_bot=sent_by_bot, translate_emoticons=translate_emoticons, mention_data=mention_data, email_gateway=email_gateway, ) return rendering_result
def save_message_rendered_content(message: Message, content: str) -> str: rendered_content = render_markdown(message, content, realm=message.get_realm()) message.rendered_content = rendered_content message.rendered_content_version = bugdown.version message.save_rendered_content() return rendered_content
def save_message_rendered_content(message: Message, content: str) -> str: rendering_result = render_markdown(message, content, realm=message.get_realm()) rendered_content = None if rendering_result is not None: rendered_content = rendering_result.rendered_content message.rendered_content = rendered_content message.rendered_content_version = markdown_version message.save_rendered_content() return rendered_content
def render_markdown(message: Message, content: str, realm: Optional[Realm]=None, realm_alert_words: Optional[RealmAlertWords]=None, user_ids: Optional[Set[int]]=None, mention_data: Optional[bugdown.MentionData]=None, email_gateway: Optional[bool]=False) -> str: """Return HTML for given markdown. Bugdown may add properties to the message object such as `mentions_user_ids`, `mentions_user_group_ids`, and `mentions_wildcard`. These are only on this Django object and are not saved in the database. """ if user_ids is None: message_user_ids = set() # type: Set[int] else: message_user_ids = user_ids message.mentions_wildcard = False message.mentions_user_ids = set() message.mentions_user_group_ids = set() message.alert_words = set() message.links_for_preview = set() if realm is None: realm = message.get_realm() possible_words = set() # type: Set[str] if realm_alert_words is not None: for user_id, words in realm_alert_words.items(): if user_id in message_user_ids: possible_words.update(set(words)) sent_by_bot = get_user_profile_by_id(message.sender_id).is_bot # DO MAIN WORK HERE -- call bugdown to convert rendered_content = bugdown.convert( content, message=message, message_realm=realm, possible_words=possible_words, sent_by_bot=sent_by_bot, mention_data=mention_data, email_gateway=email_gateway ) if message is not None: message.user_ids_with_alert_words = set() if realm_alert_words is not None: for user_id, words in realm_alert_words.items(): if user_id in message_user_ids: if set(words).intersection(message.alert_words): message.user_ids_with_alert_words.add(user_id) return rendered_content
def render_markdown(message: Message, content: str, realm: Optional[Realm] = None, realm_alert_words: Optional[RealmAlertWords] = None, user_ids: Optional[Set[int]] = None, mention_data: Optional[bugdown.MentionData] = None, email_gateway: Optional[bool] = False) -> str: ''' This is basically just a wrapper for do_render_markdown. ''' if user_ids is None: message_user_ids = set() # type: Set[int] else: message_user_ids = user_ids if realm is None: realm = message.get_realm() if realm_alert_words is None: realm_alert_words = dict() sender = get_user_profile_by_id(message.sender_id) sent_by_bot = sender.is_bot translate_emoticons = sender.translate_emoticons rendered_content = do_render_markdown( message=message, content=content, realm=realm, realm_alert_words=realm_alert_words, message_user_ids=message_user_ids, sent_by_bot=sent_by_bot, translate_emoticons=translate_emoticons, mention_data=mention_data, email_gateway=email_gateway, ) return rendered_content
def render_markdown(message: Message, content: str, realm: Optional[Realm]=None, realm_alert_words: Optional[RealmAlertWords]=None, user_ids: Optional[Set[int]]=None, mention_data: Optional[bugdown.MentionData]=None, email_gateway: Optional[bool]=False) -> str: ''' This is basically just a wrapper for do_render_markdown. ''' if user_ids is None: message_user_ids = set() # type: Set[int] else: message_user_ids = user_ids if realm is None: realm = message.get_realm() if realm_alert_words is None: realm_alert_words = dict() sender = get_user_profile_by_id(message.sender_id) sent_by_bot = sender.is_bot translate_emoticons = sender.translate_emoticons rendered_content = do_render_markdown( message=message, content=content, realm=realm, realm_alert_words=realm_alert_words, message_user_ids=message_user_ids, sent_by_bot=sent_by_bot, translate_emoticons=translate_emoticons, mention_data=mention_data, email_gateway=email_gateway, ) return rendered_content