mirror of
https://github.com/Abdess/retroarch_system.git
synced 2026-04-13 12:22:33 -05:00
feat: add native_id to scraper output
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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"):
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user