From 1201c19dfea7ac05bd15a6f7d06f1a4ebf438ee8 Mon Sep 17 00:00:00 2001 From: tligui_y Date: Wed, 16 Jul 2025 01:52:28 +0200 Subject: [PATCH] Update json_to_md.py --- json_to_md.py | 66 +++++++++++++++++++++++++++++++++++---------------- 1 file changed, 46 insertions(+), 20 deletions(-) diff --git a/json_to_md.py b/json_to_md.py index 894b1dae9..965b8c9c4 100644 --- a/json_to_md.py +++ b/json_to_md.py @@ -37,11 +37,19 @@ def get_details_block(summary, body, level=0, params_str=None): border = f"border-left: 2px solid #eee;" if level > 0 else "" if params_str: summary = f"{summary} parameters: [{params_str}]" - return (f'
\n' - f"
\n{summary}\n\n" - f"{body}\n" - f"
\n" - f"
\n\n") + return (f'
+' + f"
+{summary} + +" + f"{body} +" + f"
+" + f"
+ +") def make_test_block(test, status, emoji, level): nodeid = test.get("nodeid", "") @@ -58,7 +66,10 @@ def make_test_block(test, status, emoji, level): if value is None: phase_body += f"- **{field.capitalize()}:** None\n" else: - details_body = "```\n" + stringify(value) + "\n```\n" + details_body = "``` +" + stringify(value) + " +``` +" phase_body += get_details_block(f"๐Ÿ“Œ {field.capitalize()}", details_body, level+2) if phase_body: body_test += f"\n### ๐Ÿ”ง {phase.capitalize()} Phase\n\n" + phase_body @@ -72,6 +83,8 @@ def json_to_md_nested(json_path, md_path): f.write(f"# ๐Ÿงช Test Report\n") f.write(f"*Generated on {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}*\n\n") + known = {'summary', 'tests', 'collectors'} + if 'summary' in data: f.write("## ๐Ÿ“‹ Summary\n") for key, value in data['summary'].items(): @@ -80,7 +93,7 @@ def json_to_md_nested(json_path, md_path): f.write(f"- **Total Duration**: {duration:.3f}s\n" if duration else "- **Total Duration**: None\n") f.write("\n") - if "tests" in data and "summary" in data: + if "tests" in data: f.write("## ๐Ÿ”Ž Tests\n") for test in data["tests"]: f.write(make_test_block(test, test.get("outcome", "unknown"), "โœ…" if test.get("outcome") == "passed" else "โŒ", level=0)) @@ -93,7 +106,8 @@ def json_to_md_nested(json_path, md_path): result = collector.get("result", []) result_block = "" if result: - result_block += "```\n" + result_block += "``` +" for item in result: if isinstance(item, dict): for k, v in item.items(): @@ -103,14 +117,20 @@ def json_to_md_nested(json_path, md_path): result_block += "```" f.write(get_details_block(f"{emoji} {nodeid}", result_block, level=1)) - if 'warnings' in data and data['warnings']: - f.write("## โš ๏ธ Warnings\n\n") - for i, warning in enumerate(data['warnings'], 1): - warn_body = "```\n" - for k, v in warning.items(): - warn_body += f"{k}: {v}\n" - warn_body += "```\n" - f.write(get_details_block(f"Warning #{i}", warn_body, level=1)) + for key, value in data.items(): + if key not in known: + block = "" + if isinstance(value, list): + block += "``` +" + for item in value: + block += stringify(item) + "\n" + block += "```" + else: + block = f"``` +{stringify(value)} +```" + f.write(get_details_block(f"๐Ÿ”ง {key.capitalize()}", block, level=0)) def run_pytest_and_generate_banner_with_logs(md_path, log_path, exit_code): if exit_code == 0 or exit_code == 1: @@ -163,10 +183,16 @@ def run_pytest_and_generate_banner_with_logs(md_path, log_path, exit_code): return full_banner = ( banner + - "
\n๐Ÿ“‹ Short test summary info\n\n" + - "```\n" + "".join(short_summary_lines) + "```\n
\n\n" + - "
\n๐Ÿชต Full raw pytest log\n\n" + - "```\n" + "".join(log_lines) + "```\n
\n\n" + + "
๐Ÿ“‹ Short test summary info\n\n" + + "``` +" + "".join(short_summary_lines) + "``` +" + + "
\n\n" + + "
๐Ÿชต Full raw pytest log\n\n" + + "``` +" + "".join(log_lines) + "``` +" + + "
\n\n" + "---\n\n" ) try: