Améliorer la liste des sets par année (jalons regroupés, liens perso)
This commit is contained in:
parent
08ccc9ae48
commit
3f81f0bbde
@ -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__":
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user