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")
|
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__":
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user