diff --git a/docs/changelog.rst b/docs/changelog.rst index b9a929bf..e1f52a22 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -17,6 +17,10 @@ Version History * Thanks to `@gnikonorov `_ for the PR +* Implement :code:`environment_table_redact_list` to allow for redaction of environment table values. (`#233 `_) + + * Thanks to `@fenchu `_ for reporting and `@gnikonorov `_ for the PR + 3.1.1 (2020-12-13) ~~~~~~~~~~~~~~~~~~ diff --git a/src/pytest_html/html_report.py b/src/pytest_html/html_report.py index e1aa3973..66e10f07 100644 --- a/src/pytest_html/html_report.py +++ b/src/pytest_html/html_report.py @@ -2,6 +2,7 @@ import datetime import json import os +import re import time from collections import defaultdict from collections import OrderedDict @@ -226,6 +227,10 @@ def _generate_environment(self, config): for key in keys: value = metadata[key] + if self._is_redactable_environment_variable(key, config): + black_box_ascii_value = 0x2593 + value = "".join(chr(black_box_ascii_value) for char in str(value)) + if isinstance(value, str) and value.startswith("http"): value = html.a(value, href=value, target="_blank") elif isinstance(value, (list, tuple, set)): @@ -239,6 +244,14 @@ def _generate_environment(self, config): environment.append(html.table(rows, id="environment")) return environment + def _is_redactable_environment_variable(self, environment_variable, config): + redactable_regexes = config.getini("environment_table_redact_list") + for redactable_regex in redactable_regexes: + if re.match(redactable_regex, environment_variable): + return True + + return False + def _save_report(self, report_content): dir_name = os.path.dirname(self.logfile) assets_dir = os.path.join(dir_name, "assets")