Adding render_and_extract function to mdrender service

remotes/origin/enhancement/email-actions
Jesús Espino 2014-05-22 13:05:45 +02:00
parent 6a48e28ca4
commit 5e95175654
4 changed files with 51 additions and 16 deletions

View File

@ -63,4 +63,7 @@ class MentionsPattern(Pattern):
a.set('alt', user.get_full_name())
a.set('title', user.get_full_name())
a.set('class', "mention")
self.md.extracted_data['mentions'].append(user)
return a

View File

@ -87,4 +87,7 @@ class TaigaReferencesPattern(Pattern):
a.set('alt', subject)
a.set('title', subject)
a.set('class', html_classes)
self.md.extracted_data['references'].append(instance.content_object)
return a

View File

@ -4,8 +4,7 @@ import functools
from django.core.cache import cache
from django.utils.encoding import force_bytes
from markdown import markdown
from fn import F
from markdown import Markdown
from .extensions.autolink import AutolinkExtension
from .extensions.automail import AutomailExtension
@ -53,12 +52,26 @@ def cache_by_sha(func):
return _decorator
#@cache_by_sha
def render(project, text):
def _get_markdown(project):
wikilinks_config = {"base_url": "#/project/{}/wiki/".format(project.slug),
"end_url": ""}
extensions = _make_extensions_list(wikilinks_config=wikilinks_config, project=project)
return markdown(text, extensions=extensions)
extensions = _make_extensions_list(wikilinks_config=wikilinks_config,
project=project)
md = Markdown(extensions=extensions)
md.extracted_data = {"mentions": [], "references": []}
return md
@cache_by_sha
def render(project, text):
md = _get_markdown(project)
return md.convert(text)
def render_and_extract(project, text):
md = _get_markdown(project)
result = md.convert(text)
return (result, md.extracted_data)
class DiffMatchPatch(diff_match_patch.diff_match_patch):
@ -75,9 +88,10 @@ class DiffMatchPatch(diff_match_patch.diff_match_patch):
html.append("<span>%s</span>" % text)
return "".join(html)
def get_diff_of_htmls(html1, html2):
diffutil = DiffMatchPatch()
diff = diffutil.diff_main(html1, html2)
return diffutil.diff_pretty_html(diff)
__all__ = ['render', 'get_diff_of_htmls']
__all__ = ["render", "get_diff_of_htmls", "render_and_extract"]

View File

@ -5,7 +5,7 @@ import pytest
import taiga.base
from taiga.mdrender.extensions import mentions
from taiga.mdrender.extensions import emojify
from taiga.mdrender.service import render, cache_by_sha, get_diff_of_htmls
from taiga.mdrender.service import render, cache_by_sha, get_diff_of_htmls, render_and_extract
from taiga.projects.references import services
@ -162,3 +162,18 @@ def test_get_diff_of_htmls_deletions():
def test_get_diff_of_htmls_modifications():
result = get_diff_of_htmls("<p>test1</p>", "<p>1test</p>")
assert result == "<span>&lt;p&gt;</span><ins style=\"background:#e6ffe6;\">1</ins><span>test</span><del style=\"background:#ffe6e6;\">1</del><span>&lt;/p&gt;</span>"
def test_render_and_extract_references():
with patch("taiga.mdrender.extensions.references.get_instance_by_ref") as mock:
instance = mock.return_value
instance.content_type.model = "issue"
instance.content_object.subject = "test"
(_, extracted) = render_and_extract(dummy_project, "**#1**")
assert extracted['references'] == [instance.content_object]
def test_render_and_extract_mentions():
with patch("taiga.mdrender.extensions.mentions.User") as mock:
instance = mock.objects.get.return_value
instance.get_full_name.return_value = "test name"
(_, extracted) = render_and_extract(dummy_project, "**@user1**")
assert extracted['mentions'] == [instance]