Skip to content

Commit 7992d49

Browse files
authored
Fix: results table html hook (#669)
1 parent 15356c8 commit 7992d49

File tree

3 files changed

+32
-51
lines changed

3 files changed

+32
-51
lines changed

src/pytest_html/basereport.py

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
from pytest_html import __version__
1717
from pytest_html import extras
1818
from pytest_html.table import Header
19-
from pytest_html.table import Html
2019
from pytest_html.table import Row
2120
from pytest_html.util import _ansi_styles
2221
from pytest_html.util import cleanup_unserializable
@@ -210,15 +209,18 @@ def pytest_runtest_logreport(self, report):
210209
if row_cells.html is None:
211210
return
212211
data["resultsTableRow"] = row_cells.html
212+
for sortable, value in row_cells.sortables.items():
213+
data[sortable] = value
213214

214-
table_html = Html()
215-
self._config.hook.pytest_html_results_table_html(report=report, data=table_html)
216-
data["tableHtml"] = table_html.html["html"]
215+
processed_logs = _process_logs(report)
216+
self._config.hook.pytest_html_results_table_html(
217+
report=report, data=processed_logs
218+
)
217219

218220
data["result"] = _process_outcome(report)
219221
data["extras"] = self._process_extras(report, test_id)
220222

221-
if self._report.add_test(data, report, row_cells, table_html.replace_log):
223+
if self._report.add_test(data, report, processed_logs):
222224
self._generate_report()
223225

224226

@@ -252,6 +254,24 @@ def _is_error(report):
252254
return report.when in ["setup", "teardown"] and report.outcome == "failed"
253255

254256

257+
def _process_logs(report):
258+
log = []
259+
if report.longreprtext:
260+
log.append(report.longreprtext.replace("<", "&lt;").replace(">", "&gt;") + "\n")
261+
for section in report.sections:
262+
header, content = section
263+
log.append(f"{' ' + header + ' ':-^80}\n{content}")
264+
265+
# weird formatting related to logs
266+
if "log" in header:
267+
log.append("")
268+
if "call" in header:
269+
log.append("")
270+
if not log:
271+
log.append("No log output captured.")
272+
return log
273+
274+
255275
def _process_outcome(report):
256276
if _is_error(report):
257277
return "Error"

src/pytest_html/report_data.py

Lines changed: 4 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -52,21 +52,16 @@ def data(self):
5252
def set_data(self, key, value):
5353
self._data[key] = value
5454

55-
def add_test(self, test_data, report, row, remove_log=False):
56-
for sortable, value in row.sortables.items():
57-
test_data[sortable] = value
58-
55+
def add_test(self, test_data, report, logs):
5956
# regardless of pass or fail we must add teardown logging to "call"
60-
if report.when == "teardown" and not remove_log:
57+
if report.when == "teardown":
6158
self.update_test_log(report)
6259

6360
# passed "setup" and "teardown" are not added to the html
6461
if report.when == "call" or (
6562
report.when in ["setup", "teardown"] and report.outcome != "passed"
6663
):
67-
if not remove_log:
68-
processed_logs = _process_logs(report)
69-
test_data["log"] = _handle_ansi(processed_logs)
64+
test_data["log"] = _handle_ansi("\n".join(logs))
7065
self._data["tests"][report.nodeid].append(test_data)
7166
return True
7267

@@ -79,25 +74,5 @@ def update_test_log(self, report):
7974
for section in report.sections:
8075
header, content = section
8176
if "teardown" in header:
82-
log.append(f"{' ' + header + ' ':-^80}")
83-
log.append(content)
77+
log.append(f"{' ' + header + ' ':-^80}\n{content}")
8478
test["log"] += _handle_ansi("\n".join(log))
85-
86-
87-
def _process_logs(report):
88-
log = []
89-
if report.longreprtext:
90-
log.append(report.longreprtext.replace("<", "&lt;").replace(">", "&gt;") + "\n")
91-
for section in report.sections:
92-
header, content = section
93-
log.append(f"{' ' + header + ' ':-^80}")
94-
log.append(content)
95-
96-
# weird formatting related to logs
97-
if "log" in header:
98-
log.append("")
99-
if "call" in header:
100-
log.append("")
101-
if not log:
102-
log.append("No log output captured.")
103-
return "\n".join(log)

src/pytest_html/table.py

Lines changed: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -13,23 +13,9 @@ def __init__(self):
1313
def html(self):
1414
return self._html
1515

16-
17-
class Html(Table):
18-
def __init__(self):
19-
super().__init__()
20-
self.html.setdefault("html", [])
21-
self._replace_log = False
22-
23-
def __delitem__(self, key):
24-
# This means the log should be removed
25-
self._replace_log = True
26-
27-
@property
28-
def replace_log(self):
29-
return self._replace_log
30-
31-
def append(self, html):
32-
self.html["html"].append(html)
16+
@html.setter
17+
def html(self, value):
18+
self._html = value
3319

3420

3521
class Cell(Table):

0 commit comments

Comments
 (0)