Merge pull request #3434 from rommapp/copilot/fix-region-specific-release-date

Use region-prioritized release dates from ScreenScraper
This commit is contained in:
Georges-Antoine Assi
2026-05-26 21:14:21 -04:00
committed by GitHub
2 changed files with 54 additions and 7 deletions

View File

@@ -400,19 +400,36 @@ def extract_metadata_from_ss_rom(rom: Rom, game: SSGame) -> SSMetadata:
except (ValueError, TypeError):
return ""
def _get_lowest_date(dates: list[SSGameDate]) -> int | None:
lowest_date = min(dates, default=None, key=lambda v: v.get("text", ""))
if not lowest_date:
return None
def _parse_date(date_text: str) -> int | None:
try:
return int(datetime.strptime(lowest_date["text"], "%Y-%m-%d").timestamp())
return int(datetime.strptime(date_text, "%Y-%m-%d").timestamp())
except ValueError:
try:
return int(datetime.strptime(lowest_date["text"], "%Y").timestamp())
return int(datetime.strptime(date_text, "%Y").timestamp())
except ValueError:
return None
def _get_lowest_date(dates: list[SSGameDate]) -> int | None:
if not dates:
return None
for region in get_preferred_regions(rom):
region_dates = sorted(
(d for d in dates if d.get("region", "unk") == region),
key=lambda v: v.get("text", ""),
)
for region_date in region_dates:
parsed_date = _parse_date(region_date.get("text", ""))
if parsed_date is not None:
return parsed_date
for date in sorted(dates, key=lambda v: v.get("text", "")):
parsed_date = _parse_date(date.get("text", ""))
if parsed_date is not None:
return parsed_date
return None
def _get_genres(game: SSGame) -> list[str]:
return [
genre_name["text"]

View File

@@ -14,6 +14,7 @@ from handler.metadata.ss_handler import (
_is_notgame,
add_ss_auth_to_url,
extract_media_from_ss_game,
extract_metadata_from_ss_rom,
get_preferred_regions,
)
@@ -203,6 +204,35 @@ class TestExtractMediaFromSsGame:
assert "box-2D(us)" in result["box2d_url"]
class TestExtractMetadataFromSsRom:
def _make_rom(self, regions: list[str] | None = None) -> MagicMock:
rom = MagicMock()
rom.platform_id = 1
rom.id = 100
rom.regions = regions
return rom
def test_release_date_prefers_tagged_region(self):
config = _make_config(region_priority=[])
rom = self._make_rom(regions=["Japan", "USA"])
game = cast(
SSGame,
{
"dates": [
{"region": "us", "text": "1990-02-12"},
{"region": "jp", "text": "1988-10-23"},
{"region": "eu", "text": "1991-08-29"},
],
"medias": [],
},
)
with patch("handler.metadata.ss_handler.cm.get_config", return_value=config):
metadata = extract_metadata_from_ss_rom(rom, game)
assert metadata["first_release_date"] == 593568000
class TestIsNotgame:
def _game(self, notgame: str = "false", names: list[str] | None = None) -> SSGame:
return cast(