mirror of
https://github.com/zulip/zulip.git
synced 2025-11-06 06:53:25 +00:00
bugdown: Raise BugdownRenderingException.
We now raise an exception in bugdown.do_convert() if rendering fails, to avoid silent failures, and then calling code can convert the exception to a JsonableError.
This commit is contained in:
@@ -9,6 +9,7 @@ from django.utils.translation import ugettext as _
|
|||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.core import validators
|
from django.core import validators
|
||||||
from django.contrib.sessions.models import Session
|
from django.contrib.sessions.models import Session
|
||||||
|
from zerver.lib.bugdown import BugdownRenderingException
|
||||||
from zerver.lib.cache import flush_user_profile
|
from zerver.lib.cache import flush_user_profile
|
||||||
from zerver.lib.context_managers import lockfile
|
from zerver.lib.context_managers import lockfile
|
||||||
from zerver.models import Realm, RealmEmoji, Stream, UserProfile, UserActivity, \
|
from zerver.models import Realm, RealmEmoji, Stream, UserProfile, UserActivity, \
|
||||||
@@ -1064,7 +1065,9 @@ def check_message(sender, client, message_type_name, message_to,
|
|||||||
message.pub_date = timezone.now()
|
message.pub_date = timezone.now()
|
||||||
message.sending_client = client
|
message.sending_client = client
|
||||||
|
|
||||||
if not message.maybe_render_content(realm.domain):
|
try:
|
||||||
|
message.maybe_render_content(realm.domain)
|
||||||
|
except BugdownRenderingException:
|
||||||
raise JsonableError(_("Unable to render message"))
|
raise JsonableError(_("Unable to render message"))
|
||||||
|
|
||||||
if client.name == "zephyr_mirror":
|
if client.name == "zephyr_mirror":
|
||||||
|
|||||||
@@ -57,6 +57,9 @@ if False:
|
|||||||
# mypy requires the Optional to be inside Union
|
# mypy requires the Optional to be inside Union
|
||||||
ElementStringNone = Union[Element, Optional[text_type]]
|
ElementStringNone = Union[Element, Optional[text_type]]
|
||||||
|
|
||||||
|
class BugdownRenderingException(Exception):
|
||||||
|
pass
|
||||||
|
|
||||||
def unescape(s):
|
def unescape(s):
|
||||||
# type: (text_type) -> (text_type)
|
# type: (text_type) -> (text_type)
|
||||||
if six.PY2:
|
if six.PY2:
|
||||||
@@ -1177,7 +1180,7 @@ def do_convert(md, realm_domain=None, message=None):
|
|||||||
mail.mail_admins(subject, "Failed message: %s\n\n%s\n\n" % (
|
mail.mail_admins(subject, "Failed message: %s\n\n%s\n\n" % (
|
||||||
cleaned, traceback.format_exc()),
|
cleaned, traceback.format_exc()),
|
||||||
fail_silently=False)
|
fail_silently=False)
|
||||||
return None
|
raise BugdownRenderingException()
|
||||||
finally:
|
finally:
|
||||||
current_message = None
|
current_message = None
|
||||||
db_data = None
|
db_data = None
|
||||||
|
|||||||
@@ -570,8 +570,8 @@ class BugdownErrorTests(ZulipTestCase):
|
|||||||
def test_bugdown_error_handling(self):
|
def test_bugdown_error_handling(self):
|
||||||
# type: () -> None
|
# type: () -> None
|
||||||
with self.simulated_markdown_failure():
|
with self.simulated_markdown_failure():
|
||||||
rendered_message = bugdown.convert('', 'zulip.com')
|
with self.assertRaises(bugdown.BugdownRenderingException):
|
||||||
self.assertEqual(rendered_message, None)
|
bugdown.convert('', 'zulip.com')
|
||||||
|
|
||||||
def test_send_message_errors(self):
|
def test_send_message_errors(self):
|
||||||
# type: () -> None
|
# type: () -> None
|
||||||
|
|||||||
Reference in New Issue
Block a user