diff --git a/json_to_md.py b/json_to_md.py index 008e3a58..0c56066b 100644 --- a/json_to_md.py +++ b/json_to_md.py @@ -7,23 +7,51 @@ import re from collections import defaultdict import os -def build_tree(nodeids): - tree = lambda: defaultdict(tree) - root = tree() - for nid in nodeids: - parts = nid.replace("\\", "/").split("/") # normalize path - current = root - for part in parts: - current = current[part] - return root -def write_tree(f, subtree, path=""): - for key in sorted(subtree): - full_path = f"{path}/{key}" if path else key - f.write(f"
\n📁 `{full_path}`\n\n") - if subtree[key]: # has children - write_tree(f, subtree[key], full_path) - f.write("
\n\n") +def build_tree(collectors): + tree = {} + file_map = {} + + for collector in collectors: + nodeid = collector.get("nodeid", "") + parts = nodeid.split("/") + current = tree + + for part in parts[:-1]: + current = current.setdefault(part, {}) + + last = parts[-1] + current[last] = collector # Feuille contient le collector complet + file_map[nodeid] = collector + + return tree + +def write_tree(f, tree, prefix=""): + for name, content in sorted(tree.items()): + path = os.path.join(prefix, name) + if isinstance(content, dict): + f.write(f"
\n📁 `{path}`\n\n") + write_tree(f, content, path) + f.write(f"
\n\n") + else: + # C’est une feuille : afficher infos collector + outcome = content.get("outcome", "unknown") + emoji = "✅" if outcome == "passed" else "❌" + f.write(f"- **outcome:** `{outcome}`\n") + results = content.get("result", []) + if results: + f.write("- **result:**\n```\n") + for item in results: + if isinstance(item, dict): + for k, v in item.items(): + f.write(f"{k}: {v}\n") + f.write("\n") + else: + f.write(f"{item}\n") + f.write("```\n") + else: + f.write("- **result:** `None`\n") + f.write("\n") def stringify(obj): if obj is None or obj == "": @@ -92,38 +120,9 @@ def json_to_md_nested(json_path, md_path, allure_dir=None): if "collectors" in data: f.write("## 📚 Collectés\n") + tree = build_tree(data["collectors"]) + write_tree(f, tree) - # 1. Collect all nodeids that represent paths - nodeids = [collector.get("nodeid", "unknown").split("::")[0] for collector in data["collectors"]] - - # 2. Build directory tree from paths - dir_tree = build_tree(nodeids) - - # 3. Write the tree recursively - write_tree(f, dir_tree) - - # 4. Ensuite, tu peux afficher les détails pour chaque vrai test (en dehors de la hiérarchie) - for collector in data["collectors"]: - nodeid = collector.get("nodeid", "unknown") - outcome = collector.get("outcome", "unknown") - emoji = "✅" if outcome == "passed" else "❌" - f.write(f"
\n{emoji} `{nodeid}`\n\n") - f.write(f"- **outcome:** `{outcome}`\n") - - results = collector.get("result", []) - if results: - f.write("- **result:**\n```\n") - for item in results: - if isinstance(item, dict): - for k, v in item.items(): - f.write(f"{k}: {v}\n") - f.write("\n") - else: - f.write(f"{item}\n") - f.write("```\n") - else: - f.write("- **result:** `None`\n") - f.write("
\n\n")