import os
import re
import time
+try:
+ from html import escape
+except ImportError:
+ from cgi import escape
from collections import defaultdict
import traceback
# Extract everything between AssertionError and the start
# of the assert statement expansion in the pytest report
msg = match.group(1)
+ elif "AssertionError:" in full_msg:
+ msg = full_msg.split("AssertionError:")[1]
else:
- msg = str(rep.longrepr.reprcrash)
- if "AssertionError:" in msg:
- msg = msg.split("AssertionError:")[1]
+ msg = full_msg
except AttributeError:
msg = str(rep)
worksheet.write(row, 0, str(err_num), normal)
worksheet.write(row, 1, "\n".join(failure.files), normal)
worksheet.write(row, 2, failure.requirement_text(reqs), normal)
- worksheet.write(row, 3, failure.error_message, normal)
+ worksheet.write(row, 3, failure.error_message.replace("\n", "\n\n"), normal)
worksheet.write(row, 4, failure.test_id, normal)
err_num += 1
worksheet.autofilter(
def relative_paths(base_dir, paths):
- return [os.path.relpath(p, base_dir) for p in paths]
+ return [os.path.relpath(p, base_dir) for p in paths if p != ""]
# noinspection PyTypeChecker
{
"file_links": make_href(failure.files, template_path),
"test_id": failure.test_id,
- "error_message": failure.error_message,
- "raw_output": failure.raw_output,
+ "error_message": escape(failure.error_message).replace("\n",
+ "<br/><br/>"),
+ "raw_output": escape(failure.raw_output),
"requirements": docutils.core.publish_parts(
writer_name="html", source=failure.requirement_text(reqs)
)["body"],
:param path: string directory containing files
:return: string MD5 hash code (hex)
"""
- md5 = hashlib.md5()
+ md5 = hashlib.md5() # nosec
for dir_path, sub_dirs, filenames in os.walk(path):
for filename in filenames:
file_path = os.path.join(dir_path, filename)