1

Améliorer la liste des sets par année (jalons regroupés, liens perso)

This commit is contained in:
Richard Dern 2025-12-03 17:08:59 +01:00
parent 08ccc9ae48
commit 3f81f0bbde

View File

@ -7,6 +7,7 @@ from lib.filesystem import ensure_parent_dir
SETS_PATH = Path("data/intermediate/sets_enriched.csv") SETS_PATH = Path("data/intermediate/sets_enriched.csv")
MILESTONES_PATH = Path("config/milestones.csv")
DESTINATION_PATH = Path("data/final/sets_by_year.md") DESTINATION_PATH = Path("data/final/sets_by_year.md")
@ -20,6 +21,21 @@ def load_sets(path: Path) -> list[dict]:
return rows 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]]: def group_sets_by_year(rows: list[dict]) -> dict[str, list[dict]]:
"""Regroupe les sets par année.""" """Regroupe les sets par année."""
grouped: dict[str, list[dict]] = {} grouped: dict[str, list[dict]] = {}
@ -34,7 +50,16 @@ def group_sets_by_year(rows: list[dict]) -> dict[str, list[dict]]:
return grouped 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.""" """Écrit la liste Markdown des sets regroupés par année."""
ensure_parent_dir(path) ensure_parent_dir(path)
years = sorted(grouped.keys(), key=int) 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: for year in years:
lines.append(f"### {year}") lines.append(f"### {year}")
lines.append("") 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]: for row in grouped[year]:
lines.append(f"- [{row['set_num']}]({row['rebrickable_url']}) - {row['name']}") lines.append(build_set_label(row))
lines.append("") lines.append("")
path.write_text("\n".join(lines)) path.write_text("\n".join(lines))
@ -51,8 +79,9 @@ def write_markdown(path: Path, grouped: dict[str, list[dict]]) -> None:
def main() -> None: def main() -> None:
"""Construit le Markdown des sets filtrés classés par année.""" """Construit le Markdown des sets filtrés classés par année."""
sets_rows = load_sets(SETS_PATH) sets_rows = load_sets(SETS_PATH)
milestones = load_milestones(MILESTONES_PATH)
grouped = group_sets_by_year(sets_rows) grouped = group_sets_by_year(sets_rows)
write_markdown(DESTINATION_PATH, grouped) write_markdown(DESTINATION_PATH, grouped, milestones)
if __name__ == "__main__": if __name__ == "__main__":