"""Calcule les pièces rares en comparant les sets filtrés au reste du catalogue.""" from pathlib import Path from lib.rebrickable.part_rarity import build_part_rarity, select_until_reused, write_part_rarity PARTS_FILTERED_PATH = Path("data/intermediate/parts_filtered.csv") INVENTORIES_PATH = Path("data/raw/inventories.csv") INVENTORY_PARTS_PATH = Path("data/raw/inventory_parts.csv") PARTS_CATALOG_PATH = Path("data/raw/parts.csv") PART_CATEGORIES_PATH = Path("data/raw/part_categories.csv") FILTERED_SETS_PATH = Path("data/intermediate/sets_enriched.csv") DESTINATION_PATH = Path("data/intermediate/part_rarity.csv") DESTINATION_PRINTED_EXCLUDED_PATH = Path("data/intermediate/part_rarity_no_print.csv") TOP_DESTINATION_PATH = Path("data/intermediate/part_rarity_exclusive.csv") TOP_PRINTED_EXCLUDED_PATH = Path("data/intermediate/part_rarity_exclusive_no_print.csv") def main() -> None: """Construit les CSV complets et top 10 des pièces les plus rares.""" rows = build_part_rarity( PARTS_FILTERED_PATH, INVENTORIES_PATH, INVENTORY_PARTS_PATH, PARTS_CATALOG_PATH, PART_CATEGORIES_PATH, FILTERED_SETS_PATH, ) write_part_rarity(DESTINATION_PATH, rows) top_rows = select_until_reused(rows) write_part_rarity(TOP_DESTINATION_PATH, top_rows) rows_no_print = build_part_rarity( PARTS_FILTERED_PATH, INVENTORIES_PATH, INVENTORY_PARTS_PATH, PARTS_CATALOG_PATH, PART_CATEGORIES_PATH, FILTERED_SETS_PATH, exclude_printed=True, ) write_part_rarity(DESTINATION_PRINTED_EXCLUDED_PATH, rows_no_print) top_rows_no_print = select_until_reused(rows_no_print) write_part_rarity(TOP_PRINTED_EXCLUDED_PATH, top_rows_no_print) if __name__ == "__main__": main()