#!/usr/bin/env python3 import sys import json import os from collections import defaultdict CURRENT_DIR = os.path.dirname(os.path.abspath(__file__)) PARENT_DIR = os.path.abspath(os.path.join(CURRENT_DIR, os.pardir)) if CURRENT_DIR not in sys.path: sys.path.append(CURRENT_DIR) if PARENT_DIR not in sys.path: sys.path.append(PARENT_DIR) from common import load_articles, write_result # noqa: E402 def main(): try: payload = json.load(sys.stdin) except Exception as exc: # noqa: BLE001 print(f"Failed to read JSON: {exc}", file=sys.stderr) sys.exit(1) content_dir = payload.get("contentDir") or "content" output_path = payload.get("outputPath") public_path = payload.get("publicPath") articles = load_articles(content_dir) counts = defaultdict(int) for article in articles: section = article.get("section") or "root" counts[section] += 1 entries = sorted(counts.items(), key=lambda item: item[1], reverse=True) max_slices = 21 top = entries[:max_slices] rest = entries[max_slices:] if rest: rest_sum = sum(v for _, v in rest) top.append(("Others", rest_sum)) labels = [label for label, _ in top] values = [value for _, value in top] try: from render_stats_charts import render_articles_per_section, setup_rcparams except ImportError as exc: # noqa: BLE001 print(f"Failed to import renderer: {exc}", file=sys.stderr) sys.exit(1) setup_rcparams() render_articles_per_section({"labels": labels, "values": values, "title": "Articles par section"}, output_path) write_result( { "image": public_path, "meta": { "sections": len(entries), }, } ) if __name__ == "__main__": main()