Update json_to_md.py
This commit is contained in:
+46
-47
@@ -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"<details>\n<summary>📁 `{full_path}`</summary>\n\n")
|
||||
if subtree[key]: # has children
|
||||
write_tree(f, subtree[key], full_path)
|
||||
f.write("</details>\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"<details>\n<summary>📁 `{path}`</summary>\n\n")
|
||||
write_tree(f, content, path)
|
||||
f.write(f"</details>\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"<details>\n<summary>{emoji} `{nodeid}`</summary>\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("</details>\n\n")
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user