mirror of
https://github.com/paperless-ngx/paperless-ngx.git
synced 2025-04-02 13:45:10 -05:00
Use Django templating engine
This commit is contained in:
parent
538a4219bd
commit
f6a70b85f4
@ -229,21 +229,14 @@ class MailDocumentParser(DocumentParser):
|
|||||||
data["date"] = clean_html(mail.date.astimezone().strftime("%Y-%m-%d %H:%M"))
|
data["date"] = clean_html(mail.date.astimezone().strftime("%Y-%m-%d %H:%M"))
|
||||||
data["content"] = clean_html(mail.text.strip())
|
data["content"] = clean_html(mail.text.strip())
|
||||||
|
|
||||||
html_file = os.path.join(os.path.dirname(__file__), "mail_template/index.html")
|
|
||||||
placeholder_pattern = re.compile(r"{{(.+)}}")
|
|
||||||
|
|
||||||
html = StringIO()
|
html = StringIO()
|
||||||
|
|
||||||
with open(html_file) as html_template_handle:
|
from django.template.loader import render_to_string
|
||||||
for line in html_template_handle.readlines():
|
|
||||||
for placeholder in placeholder_pattern.findall(line):
|
rendered = render_to_string("email_msg_template.html", context=data)
|
||||||
line = re.sub(
|
|
||||||
"{{" + placeholder + "}}",
|
html.write(rendered)
|
||||||
data.get(placeholder.strip(), ""),
|
html.seek(0)
|
||||||
line,
|
|
||||||
)
|
|
||||||
html.write(line)
|
|
||||||
html.seek(0)
|
|
||||||
|
|
||||||
return html
|
return html
|
||||||
|
|
||||||
@ -252,12 +245,12 @@ class MailDocumentParser(DocumentParser):
|
|||||||
url = self.gotenberg_server + "/forms/chromium/convert/html"
|
url = self.gotenberg_server + "/forms/chromium/convert/html"
|
||||||
self.log("info", "Converting mail to PDF")
|
self.log("info", "Converting mail to PDF")
|
||||||
|
|
||||||
css_file = os.path.join(os.path.dirname(__file__), "mail_template/output.css")
|
css_file = os.path.join(os.path.dirname(__file__), "templates/output.css")
|
||||||
|
|
||||||
with open(css_file, "rb") as css_handle:
|
with open(css_file, "rb") as css_handle:
|
||||||
|
|
||||||
files = {
|
files = {
|
||||||
"html": ("index.html", self.mail_to_html(mail)),
|
"html": ("email_msg_template.html", self.mail_to_html(mail)),
|
||||||
"css": ("output.css", css_handle),
|
"css": ("output.css", css_handle),
|
||||||
}
|
}
|
||||||
headers = {}
|
headers = {}
|
||||||
@ -302,7 +295,7 @@ class MailDocumentParser(DocumentParser):
|
|||||||
files.append((name_clean, BytesIO(a.payload)))
|
files.append((name_clean, BytesIO(a.payload)))
|
||||||
html_clean = html_clean.replace(name_cid, name_clean)
|
html_clean = html_clean.replace(name_cid, name_clean)
|
||||||
|
|
||||||
files.append(("index.html", StringIO(html_clean)))
|
files.append(("email_msg_template.html", StringIO(html_clean)))
|
||||||
|
|
||||||
return files
|
return files
|
||||||
|
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
{% autoescape off %}
|
||||||
<!doctype html>
|
<!doctype html>
|
||||||
<html>
|
<html>
|
||||||
|
|
||||||
@ -43,3 +44,5 @@
|
|||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
|
|
||||||
|
{% endautoescape %}
|
@ -369,6 +369,7 @@ class TestParser(TestCase):
|
|||||||
os.path.join(self.SAMPLE_FILES, "html.eml.html"),
|
os.path.join(self.SAMPLE_FILES, "html.eml.html"),
|
||||||
) as html_expected_handle:
|
) as html_expected_handle:
|
||||||
html_expected = html_expected_handle.read()
|
html_expected = html_expected_handle.read()
|
||||||
|
|
||||||
self.assertHTMLEqual(html_expected, html_received)
|
self.assertHTMLEqual(html_expected, html_received)
|
||||||
|
|
||||||
@mock.patch("paperless_mail.parsers.requests.post")
|
@mock.patch("paperless_mail.parsers.requests.post")
|
||||||
@ -436,7 +437,7 @@ class TestParser(TestCase):
|
|||||||
result = self.parser.transform_inline_html(html, attachments)
|
result = self.parser.transform_inline_html(html, attachments)
|
||||||
|
|
||||||
resulting_html = result[-1][1].read()
|
resulting_html = result[-1][1].read()
|
||||||
self.assertTrue(result[-1][0] == "index.html")
|
self.assertTrue(result[-1][0] == "email_msg_template.html")
|
||||||
self.assertTrue(result[0][0] in resulting_html)
|
self.assertTrue(result[0][0] in resulting_html)
|
||||||
self.assertFalse("<script" in resulting_html.lower())
|
self.assertFalse("<script" in resulting_html.lower())
|
||||||
|
|
||||||
@ -484,7 +485,7 @@ class TestParser(TestCase):
|
|||||||
mock_post.call_args.kwargs["files"]["cidpart1pNdUSz0sD3NqVtPgexamplede"][
|
mock_post.call_args.kwargs["files"]["cidpart1pNdUSz0sD3NqVtPgexamplede"][
|
||||||
1
|
1
|
||||||
].read()
|
].read()
|
||||||
mock_post.call_args.kwargs["files"]["index.html"][1].read()
|
mock_post.call_args.kwargs["files"]["email_msg_template.html"][1].read()
|
||||||
|
|
||||||
mock_response.raise_for_status.assert_called_once()
|
mock_response.raise_for_status.assert_called_once()
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user