From cfcea1fad94d63dcb8eb85ddf06a1b43d0936320 Mon Sep 17 00:00:00 2001 From: tligui_y Date: Thu, 10 Jul 2025 11:46:56 +0200 Subject: [PATCH] Update json_to_md.py --- json_to_md.py | 71 ++++++++++++++++++++------------------------------- 1 file changed, 28 insertions(+), 43 deletions(-) diff --git a/json_to_md.py b/json_to_md.py index 6947ec0ca..e02abe83a 100644 --- a/json_to_md.py +++ b/json_to_md.py @@ -14,41 +14,26 @@ def stringify(obj): return f"`{str(obj)}`" def extract_params(test): - # 1. Cas où les params sont déjà extraits dans l'objet test - if "params" in test and test["params"]: - params = test["params"] - if isinstance(params, dict): - return "\n".join(f" - `{k}` = `{v}`" for k, v in params.items()) - return f" - `{params}`" - - # 2. Extraction depuis le nodeid (format: test_name[params]) + if "params" in test: + return stringify(test["params"]) nodeid = test.get("nodeid", "") if "[" not in nodeid: return None - - params_str = nodeid.split("[")[-1].rstrip("]") - if not params_str: - return None - - # Détection du format (nommé ou positionnel) + raw_params = nodeid.split("[")[-1].rstrip("]") lines = [] - if "=" in params_str: # Format nommé: key=value - for param in params_str.split("-"): + named = all("=" in p for p in raw_params.split("-")) + if named: + for param in raw_params.split("-"): if "=" in param: - key, val = param.split("=", 1) - lines.append(f" - `{key.strip()}` = `{val.strip()}`") + name, value = param.split("=", 1) + lines.append(f" - `{name.strip()}`: `{value.strip()}`") else: - lines.append(f" - `{param.strip()}`") - else: # Format positionnel: value1-value2 - for i, val in enumerate(params_str.split("-"), 1): - lines.append(f" - Param {i}: `{val.strip()}`") - + lines.append(f" - `{param.strip()}`") + else: + for i, value in enumerate(raw_params.split("-"), 1): + lines.append(f" - Param {i}: `{value.strip()}`") return "\n".join(lines) -def clean_filename(filename): - """Enlève le préfixe tests\ des noms de fichiers""" - return filename.replace("tests\\", "").replace("tests/", "") - def json_to_md_nested(json_path, md_path): with open(json_path) as f: data = json.load(f) @@ -71,40 +56,40 @@ def json_to_md_nested(json_path, md_path): for test in data["tests"]: nodeid = test.get("nodeid", "") parts = nodeid.split("::") - filename = clean_filename(parts[0]) + filename = parts[0] funcname = parts[1].split("[")[0] grouped[filename][funcname].append(test) for filename, funcs in grouped.items(): - f.write(f"
\n 📁 {filename}\n\n") + f.write(f"
\n📁 {filename}\n\n") for funcname, tests in funcs.items(): - f.write(f"
\n 🔧 Fonction: `{funcname}`\n\n") + f.write(f"
\n🔧 Fonction: `{funcname}`\n\n") for idx, test in enumerate(tests, 1): outcome = test.get("outcome", "unknown") icons = {"passed": "✅", "failed": "❌", "skipped": "⏭️", "error": "❗"} emoji = icons.get(outcome, "❔") - f.write(f"
\n {emoji} #{idx}\n\n") + f.write(f"
\n{emoji} #{idx}\n\n") param_string = extract_params(test) if param_string: - f.write(f" - **Paramètres:**\n{param_string}\n") + f.write(f"- **Paramètres:**\n{param_string}\n") - f.write(f" - **Statut:** {emoji} `{outcome}`\n") + f.write(f"- **Statut:** {emoji} `{outcome}`\n") duration = test.get("call", {}).get("duration") - f.write(f" - **Durée:** `{duration:.6f}` s\n" if duration else " - **Durée:** `None`\n") + f.write(f"- **Durée:** `{duration:.6f}` s\n" if duration else "- **Durée:** `None`\n") if outcome != "passed": - f.write(" - **Détails:**\n") - f.write("
\n Détails\n\n") + f.write("- **Détails:**\n") + f.write("
\nDétails\n\n") for key in ['duration', 'outcome', 'crash', 'traceback', 'longrepr']: value = test.get("call", {}).get(key) - f.write(f" - **{key}:**\n") - f.write(" ```\n") - f.write(f" {value if value else 'None'}\n") - f.write(" ```\n\n") - f.write("
\n") - f.write("
\n\n") - f.write("
\n\n") + f.write(f"- **{key}:**\n") + f.write("```\n") + f.write(f"{value if value else 'None'}\n") + f.write("```\n\n") + f.write("
\n") + f.write("
\n\n") + f.write("
\n\n") f.write("
\n\n") def main():