From 0630ee973be495768cadded90faa2f45333b27e1 Mon Sep 17 00:00:00 2001 From: Vinta Chen Date: Sun, 19 Apr 2026 22:04:14 +0800 Subject: [PATCH] refactor(build): flatten extract_entries and annotate result dict Collapse the if-seen/else-new branches so the category/group/subcategory merge logic runs once per entry unconditionally, appending to empty lists on first sight instead of duplicating the append logic in the else branch. Annotate seen and entries as dict[str, Any] so ty can resolve the mixed value types (str, list, None) in each entry dict. Co-Authored-By: Claude --- website/build.py | 52 ++++++++++++++++++++++-------------------------- 1 file changed, 24 insertions(+), 28 deletions(-) diff --git a/website/build.py b/website/build.py index 8689ca90..c223ef18 100644 --- a/website/build.py +++ b/website/build.py @@ -6,6 +6,7 @@ import re import shutil from datetime import UTC, datetime from pathlib import Path +from typing import Any from jinja2 import Environment, FileSystemLoader from readme_parser import ParsedGroup, ParsedSection, parse_readme, parse_sponsors @@ -75,45 +76,40 @@ def extract_entries( Entries appearing in multiple categories are merged into a single entry with lists of categories and groups. """ - cat_to_group: dict[str, str] = {} - for group in groups: - for cat in group["categories"]: - cat_to_group[cat["name"]] = group["name"] + cat_to_group = {cat["name"]: group["name"] for group in groups for cat in group["categories"]} - seen: dict[tuple[str, str], dict] = {} # (url, name) -> entry - entries: list[dict] = [] + seen: dict[tuple[str, str], dict[str, Any]] = {} # (url, name) -> entry + entries: list[dict[str, Any]] = [] for cat in categories: group_name = cat_to_group.get(cat["name"], "Other") for entry in cat["entries"]: - url = entry["url"] - key = (url, entry["name"]) - if key in seen: - existing = seen[key] - if cat["name"] not in existing["categories"]: - existing["categories"].append(cat["name"]) - if group_name not in existing["groups"]: - existing["groups"].append(group_name) - subcat = entry["subcategory"] - if subcat: - scoped = f"{cat['name']} > {subcat}" - if not any(s["value"] == scoped for s in existing["subcategories"]): - existing["subcategories"].append({"name": subcat, "value": scoped}) - else: - merged = { + key = (entry["url"], entry["name"]) + existing: dict[str, Any] | None = seen.get(key) + if existing is None: + existing = { "name": entry["name"], - "url": url, + "url": entry["url"], "description": entry["description"], - "categories": [cat["name"]], - "groups": [group_name], - "subcategories": [{"name": entry["subcategory"], "value": f"{cat['name']} > {entry['subcategory']}"}] if entry["subcategory"] else [], + "categories": [], + "groups": [], + "subcategories": [], "stars": None, "owner": None, "last_commit_at": None, - "source_type": detect_source_type(url), + "source_type": detect_source_type(entry["url"]), "also_see": entry["also_see"], } - seen[key] = merged - entries.append(merged) + seen[key] = existing + entries.append(existing) + if cat["name"] not in existing["categories"]: + existing["categories"].append(cat["name"]) + if group_name not in existing["groups"]: + existing["groups"].append(group_name) + subcat = entry["subcategory"] + if subcat: + scoped = f"{cat['name']} > {subcat}" + if not any(s["value"] == scoped for s in existing["subcategories"]): + existing["subcategories"].append({"name": subcat, "value": scoped}) return entries