From 3f81f0bbded0f15fd6a0a3f6b07e1f5635414911 Mon Sep 17 00:00:00 2001 From: Richard Dern Date: Wed, 3 Dec 2025 17:08:59 +0100 Subject: [PATCH] =?UTF-8?q?Am=C3=A9liorer=20la=20liste=20des=20sets=20par?= =?UTF-8?q?=20ann=C3=A9e=20(jalons=20regroup=C3=A9s,=20liens=20perso)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/list_sets_by_year.py | 35 ++++++++++++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/scripts/list_sets_by_year.py b/scripts/list_sets_by_year.py index a98ce47..816a8bb 100644 --- a/scripts/list_sets_by_year.py +++ b/scripts/list_sets_by_year.py @@ -7,6 +7,7 @@ from lib.filesystem import ensure_parent_dir SETS_PATH = Path("data/intermediate/sets_enriched.csv") +MILESTONES_PATH = Path("config/milestones.csv") DESTINATION_PATH = Path("data/final/sets_by_year.md") @@ -20,6 +21,21 @@ def load_sets(path: Path) -> list[dict]: return rows +def load_milestones(path: Path) -> dict[str, list[str]]: + """Charge les jalons par année.""" + milestones: dict[str, list[str]] = {} + if not path.exists(): + return milestones + with path.open() as csv_file: + reader = csv.DictReader(csv_file) + for row in reader: + year = row["year"] + milestones.setdefault(year, []).append(row["description"]) + for year, items in milestones.items(): + items.sort() + return milestones + + def group_sets_by_year(rows: list[dict]) -> dict[str, list[dict]]: """Regroupe les sets par année.""" grouped: dict[str, list[dict]] = {} @@ -34,7 +50,16 @@ def group_sets_by_year(rows: list[dict]) -> dict[str, list[dict]]: return grouped -def write_markdown(path: Path, grouped: dict[str, list[dict]]) -> None: +def build_set_label(row: dict) -> str: + """Formate la ligne d'un set avec lien Rebrickable et lien perso si possédé.""" + rebrickable = f"[{row['set_id']}]({row['rebrickable_url']})" + if row["in_collection"] == "true": + personal = f"[{row['name']}](/collections/lego/jurassic-world/{row['set_id']}/)" + return f"- {rebrickable} - {personal}" + return f"- {rebrickable} - {row['name']}" + + +def write_markdown(path: Path, grouped: dict[str, list[dict]], milestones: dict[str, list[str]]) -> None: """Écrit la liste Markdown des sets regroupés par année.""" ensure_parent_dir(path) years = sorted(grouped.keys(), key=int) @@ -42,8 +67,11 @@ def write_markdown(path: Path, grouped: dict[str, list[dict]]) -> None: for year in years: lines.append(f"### {year}") lines.append("") + if year in milestones: + joined = ", ".join(f"_{m}_" for m in milestones[year]) + lines.append(f"- Jalons : {joined}") for row in grouped[year]: - lines.append(f"- [{row['set_num']}]({row['rebrickable_url']}) - {row['name']}") + lines.append(build_set_label(row)) lines.append("") path.write_text("\n".join(lines)) @@ -51,8 +79,9 @@ def write_markdown(path: Path, grouped: dict[str, list[dict]]) -> None: def main() -> None: """Construit le Markdown des sets filtrés classés par année.""" sets_rows = load_sets(SETS_PATH) + milestones = load_milestones(MILESTONES_PATH) grouped = group_sets_by_year(sets_rows) - write_markdown(DESTINATION_PATH, grouped) + write_markdown(DESTINATION_PATH, grouped, milestones) if __name__ == "__main__":