# uv run python -m utils.generate_supported_platforms from typing import TypedDict from urllib.parse import quote from handler.metadata import ( meta_flashpoint_handler, meta_hasheous_handler, meta_hltb_handler, meta_igdb_handler, meta_launchbox_handler, meta_libretro_handler, meta_moby_handler, meta_ra_handler, meta_ss_handler, ) from handler.metadata.base_handler import UniversalPlatformSlug class SupportedPlatform(TypedDict): name: str folder: str igdb_slug: str | None moby_slug: str | None ss_id: int | None launchbox_id: int | None hasheous_id: int | None ra_id: int | None flashpoint_id: int | None hltb_slug: str | None libretro_slug: str | None if __name__ == "__main__": supported_platforms: dict[str, SupportedPlatform] = {} for upl in UniversalPlatformSlug: slug_lower = upl.value.lower() igdb_platform = meta_igdb_handler.get_platform(slug_lower) moby_platform = meta_moby_handler.get_platform(slug_lower) ss_platform = meta_ss_handler.get_platform(slug_lower) launchbox_platform = meta_launchbox_handler.get_platform(slug_lower) hasheous_platform = meta_hasheous_handler.get_platform(slug_lower) ra_platform = meta_ra_handler.get_platform(slug_lower) flashpoint_platform = meta_flashpoint_handler.get_platform(slug_lower) hltb_platform = meta_hltb_handler.get_platform(slug_lower) libretro_platform = meta_libretro_handler.get_platform(slug_lower) supported_platforms[slug_lower] = { "name": igdb_platform.get("name", None) or moby_platform.get("name", None) or ss_platform.get("name", None) or launchbox_platform.get("name", None) or hasheous_platform.get("name", None) or ra_platform.get("name", None) or flashpoint_platform.get("name", None) or hltb_platform.get("name", None) or slug_lower.replace("-", " ").title(), "folder": slug_lower, "igdb_slug": igdb_platform.get("igdb_slug", None), "moby_slug": moby_platform.get("moby_slug", None), "ss_id": ss_platform["ss_id"], "launchbox_id": launchbox_platform["launchbox_id"], "hasheous_id": hasheous_platform["hasheous_id"], "ra_id": ra_platform["ra_id"], "flashpoint_id": flashpoint_platform["flashpoint_id"], "hltb_slug": hltb_platform.get("hltb_slug", None), "libretro_slug": libretro_platform.get("libretro_slug", None), } # Sort platforms by name field supported_platforms = dict( sorted(supported_platforms.items(), key=lambda item: item[1]["name"].lower()) ) print("""|Platform Name|Folder Name|Metadata Providers| |---|---|---|""") for platform in supported_platforms.values(): print( f'| {platform["name"]} |', f'`{platform["folder"]}` |', ( f'igdb logo' if platform["igdb_slug"] else "" ), ( f'screenscraper logo' if platform["ss_id"] else "" ), ( f'mobygames logo' if platform["moby_slug"] else "" ), ( f'launchbox logo' if platform["launchbox_id"] else "" ), ( f'hasheous logo' if platform["hasheous_id"] else "" ), ( f'retroachivements logo' if platform["ra_id"] else "" ), ( f'flashpoint logo' if platform["flashpoint_id"] else "" ), ( 'howlongtobeat logo' if platform["hltb_slug"] else "" ), ( f'libretro logo' if platform["libretro_slug"] else "" ), " |", )