feat: add native_id to scraper output

This commit is contained in:
Abdessamad Derraz
2026-03-29 13:15:57 +02:00
parent 5247512bea
commit 2ce8db1754
5 changed files with 57 additions and 5 deletions

View File

@@ -22,6 +22,7 @@ class BiosRequirement:
destination: str = ""
required: bool = True
zipped_file: str | None = None # If set, md5 is for this ROM inside the ZIP
native_id: str | None = None # Original system name before normalization
@dataclass
@@ -199,7 +200,11 @@ def scraper_cli(scraper_class: type, description: str = "Scrape BIOS requirement
config = {"systems": {}}
for req in reqs:
sys_id = req.system
config["systems"].setdefault(sys_id, {"files": []})
if sys_id not in config["systems"]:
sys_entry: dict = {"files": []}
if req.native_id:
sys_entry["native_id"] = req.native_id
config["systems"][sys_id] = sys_entry
entry = {"name": req.name, "destination": req.destination or req.name, "required": req.required}
if req.sha1:
entry["sha1"] = req.sha1

View File

@@ -265,6 +265,7 @@ class Scraper(BaseScraper):
destination=file_path,
required=True,
zipped_file=zipped_file or None,
native_id=sys_key,
))
return requirements
@@ -284,7 +285,10 @@ class Scraper(BaseScraper):
systems = {}
for req in requirements:
if req.system not in systems:
systems[req.system] = {"files": []}
sys_entry: dict = {"files": []}
if req.native_id:
sys_entry["native_id"] = req.native_id
systems[req.system] = sys_entry
entry = {
"name": req.name,

View File

@@ -112,7 +112,8 @@ class Scraper(BaseScraper):
requirements = []
for rom in roms:
system_slug = SYSTEM_SLUG_MAP.get(rom.system, rom.system.lower().replace(" ", "-"))
native_system = rom.system
system_slug = SYSTEM_SLUG_MAP.get(native_system, native_system.lower().replace(" ", "-"))
destination = rom.name
name = rom.name.split("/")[-1] if "/" in rom.name else rom.name
@@ -130,6 +131,7 @@ class Scraper(BaseScraper):
size=rom.size or None,
destination=destination,
required=True,
native_id=native_system,
))
return requirements
@@ -223,7 +225,9 @@ class Scraper(BaseScraper):
systems = {}
for req in requirements:
if req.system not in systems:
system_entry = {"files": []}
system_entry: dict = {"files": []}
if req.native_id:
system_entry["native_id"] = req.native_id
if req.system in core_meta:
cm = core_meta[req.system]
if cm.get("core"):

View File

@@ -147,6 +147,7 @@ class Scraper(BaseScraper):
md5=all_md5,
destination=primary_path,
required=mandatory,
native_id=platform,
))
return requirements
@@ -203,7 +204,10 @@ class Scraper(BaseScraper):
systems = {}
for req in requirements:
if req.system not in systems:
systems[req.system] = {"files": []}
sys_entry: dict = {"files": []}
if req.native_id:
sys_entry["native_id"] = req.native_id
systems[req.system] = sys_entry
entry = {
"name": req.name,

View File

@@ -3013,5 +3013,40 @@ class TestE2E(unittest.TestCase):
self.assertEqual(hm["scraped_md5"], "scraped_hash")
# ---------------------------------------------------------------
# native_id preservation
# ---------------------------------------------------------------
def test_native_id_preserved_in_platform_config(self):
"""load_platform_config preserves native_id at the system level."""
config = {
"platform": "TestNativeId",
"verification_mode": "existence",
"base_destination": "system",
"systems": {
"sony-playstation": {
"native_id": "Sony - PlayStation",
"files": [
{"name": "scph5501.bin", "destination": "scph5501.bin", "required": True},
],
},
"nintendo-snes": {
"native_id": "snes",
"files": [
{"name": "bs-x.bin", "destination": "bs-x.bin", "required": False},
],
},
},
}
with open(os.path.join(self.platforms_dir, "test_native_id.yml"), "w") as fh:
yaml.dump(config, fh)
loaded = load_platform_config("test_native_id", self.platforms_dir)
psx = loaded["systems"]["sony-playstation"]
self.assertEqual(psx["native_id"], "Sony - PlayStation")
snes = loaded["systems"]["nintendo-snes"]
self.assertEqual(snes["native_id"], "snes")
if __name__ == "__main__":
unittest.main()