Handle errors from publish_parts

- Fixes: #3892
remove-default-role
David Fischer 2018-04-04 14:49:52 -07:00
parent 786edd46d5
commit fd5ddf111d
No known key found for this signature in database
GPG Key ID: F0C9B0ADA737AB60
2 changed files with 24 additions and 2 deletions

View File

@ -46,6 +46,7 @@ def make_document_url(project, version=None, page=''):
def restructuredtext(value, short=False):
try:
from docutils.core import publish_parts
from docutils import ApplicationError
except ImportError:
if settings.DEBUG:
raise template.TemplateSyntaxError(
@ -59,8 +60,15 @@ def restructuredtext(value, short=False):
'file_insertion_enabled': False,
}
docutils_settings.update(getattr(settings, 'RESTRUCTUREDTEXT_FILTER_SETTINGS', {}))
parts = publish_parts(source=force_bytes(value), writer_name="html4css1",
settings_overrides=docutils_settings)
try:
parts = publish_parts(
source=force_bytes(value),
writer_name="html4css1",
settings_overrides=docutils_settings,
)
except ApplicationError:
return force_text(value)
out = force_text(parts["fragment"])
try:
if short:

View File

@ -180,3 +180,17 @@ class CoreTagsTests(TestCase):
proj.documentation_type = 'mkdocs'
url = core_tags.make_document_url(proj, LATEST, 'index.html')
self.assertEqual(url, 'http://readthedocs.org/docs/pip/en/latest/')
def test_restructured_text(self):
value = '*test*'
result = core_tags.restructuredtext(value)
self.assertIn('<em>test</em>', result)
def test_restructured_text_invalid(self):
value = (
'*******\n'
'Test\n'
'****\n\n'
)
result = core_tags.restructuredtext(value)
self.assertEqual(result, value)