1

Enrichit les frises minifigs avec fig_num et possession

This commit is contained in:
Richard Dern 2025-12-02 22:15:19 +01:00
parent bce8b37bb7
commit 4d37323c15
4 changed files with 45 additions and 12 deletions

View File

@ -351,3 +351,4 @@ Le script lit `data/intermediate/minifigs_by_set.csv`, `data/intermediate/sets_e
- `data/intermediate/minifig_character_sets.csv` : apparitions des personnages avec set, identifiant de set, année et fig_num.
- `figures/step32/minifig_characters/{personnage}.png` : frise horizontale par personnage, composée des visuels de minifigs dans lordre chronologique, annotés avec lannée et le numéro de set. Les minifigs dont limage nest pas disponible sont remplacées par un rectangle neutre pour matérialiser le manque.
- Les étiquettes affichent aussi lidentifiant de la minifig (`fig-*`) et un astérisque à côté du set (`set_num*`) lorsquil est présent dans la collection.

View File

@ -67,7 +67,8 @@ def build_character_collage(
cells: List[Image.Image] = []
for row in entries:
image_path = resources_dir / row["set_id"] / sanitized / "minifig.jpg"
label = f"{row['year']} - {row['set_num']}"
owned = "*" if row.get("in_collection", "").lower() == "true" else ""
label = f"{row['year']} - {row['set_num']}{owned} ({row['fig_num']})"
if str(image_path) in missing:
image = build_placeholder(image_height)
else:

View File

@ -48,17 +48,20 @@ def build_character_sets(
"set_id": set_row["set_id"],
"year": set_row["year"],
"fig_num": fig_num,
"in_collection": set_row["in_collection"],
}
)
seen.add(key)
character_sets.sort(key=lambda row: (row["known_character"], int(row["year"]), row["set_num"], row["fig_num"]))
character_sets.sort(
key=lambda row: (row["known_character"], int(row["year"]), row["set_num"], row["fig_num"])
)
return character_sets
def write_character_sets(destination_path: Path, rows: Sequence[dict]) -> None:
"""Écrit le CSV listant les sets par personnage."""
ensure_parent_dir(destination_path)
fieldnames = ["known_character", "set_num", "set_id", "year", "fig_num"]
fieldnames = ["known_character", "set_num", "set_id", "year", "fig_num", "in_collection"]
with destination_path.open("w", newline="") as csv_file:
writer = csv.DictWriter(csv_file, fieldnames=fieldnames)
writer.writeheader()

View File

@ -26,19 +26,47 @@ def test_build_character_sets_and_collages(tmp_path: Path) -> None:
{"set_num": "1003-1", "known_character": "Figurant", "fig_num": "fig-4"},
]
sets_lookup = {
"1000-1": {"set_id": "1000", "year": "2020"},
"1001-1": {"set_id": "1001", "year": "2021"},
"1002-1": {"set_id": "1002", "year": "2022"},
"1003-1": {"set_id": "1003", "year": "2023"},
"1004-1": {"set_id": "1004", "year": "2024"},
"1000-1": {"set_id": "1000", "year": "2020", "in_collection": "true"},
"1001-1": {"set_id": "1001", "year": "2021", "in_collection": "false"},
"1002-1": {"set_id": "1002", "year": "2022", "in_collection": "false"},
"1003-1": {"set_id": "1003", "year": "2023", "in_collection": "false"},
"1004-1": {"set_id": "1004", "year": "2024", "in_collection": "true"},
}
character_sets = build_character_sets(minifigs_rows, sets_lookup, excluded_characters=["Figurant"])
assert character_sets == [
{"known_character": "Alice", "set_num": "1000-1", "set_id": "1000", "year": "2020", "fig_num": "fig-1"},
{"known_character": "Bob", "set_num": "1001-1", "set_id": "1001", "year": "2021", "fig_num": "fig-2"},
{"known_character": "Bob", "set_num": "1002-1", "set_id": "1002", "year": "2022", "fig_num": "fig-3"},
{"known_character": "Claire Dearing", "set_num": "1004-1", "set_id": "1004", "year": "2024", "fig_num": "fig-5"},
{
"known_character": "Alice",
"set_num": "1000-1",
"set_id": "1000",
"year": "2020",
"fig_num": "fig-1",
"in_collection": "true",
},
{
"known_character": "Bob",
"set_num": "1001-1",
"set_id": "1001",
"year": "2021",
"fig_num": "fig-2",
"in_collection": "false",
},
{
"known_character": "Bob",
"set_num": "1002-1",
"set_id": "1002",
"year": "2022",
"fig_num": "fig-3",
"in_collection": "false",
},
{
"known_character": "Claire Dearing",
"set_num": "1004-1",
"set_id": "1004",
"year": "2024",
"fig_num": "fig-5",
"in_collection": "true",
},
]
resources_dir = tmp_path / "resources"