From 20937e688bcc9a2e68fbf4baa8a706dc894356ec Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Sun, 4 Oct 2026 22:04:01 +0200 Subject: [PATCH] fix: print platform detail lists as plain text --- scripts/generate_site.py | 15 +++++++++++---- tests/test_site_validation.py | 16 ++++++++++++++++ 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/scripts/generate_site.py b/scripts/generate_site.py index f63d918b..fcda2dd4 100644 --- a/scripts/generate_site.py +++ b/scripts/generate_site.py @@ -2145,16 +2145,23 @@ def _render_platform_details(profile: dict) -> list[str]: if isinstance(pv, dict): lines.append(f" **{pk}:**") for sk, sv in pv.items(): - lines.append(f" - {sk}: {sv}") - elif isinstance(pv, list): - lines.append(f" **{pk}:** {', '.join(str(x) for x in pv)}") + lines.append(f" - {sk}: {_plain_value(sv)}") else: - lines.append(f" **{pk}:** {pv}") + lines.append(f" **{pk}:** {_plain_value(pv)}") lines.append("") return lines +def _plain_value(value: object) -> str: + """A scalar or a list of scalars as a reader writes it, not as Python does.""" + if isinstance(value, bool): + return "yes" if value else "no" + if isinstance(value, (list, tuple)): + return ", ".join(_plain_value(item) for item in value) + return _escape_tags(str(value)) + + def _render_structured_blocks(profile: dict) -> list[str]: """Every remaining structured field, as a collapsible section.""" lines: list[str] = [] diff --git a/tests/test_site_validation.py b/tests/test_site_validation.py index a0f928ee..53dc2263 100644 --- a/tests/test_site_validation.py +++ b/tests/test_site_validation.py @@ -73,6 +73,22 @@ class WikiSourceHeadings(unittest.TestCase): self.assertEqual(offenders, []) +class PlatformDetails(unittest.TestCase): + def test_lists_and_flags_read_as_prose(self): + import generate_site + + lines = generate_site._render_platform_details( + {"platform_details": {"megacd": { + "extensions_tried": [".bin", ".zip"], + "hle_available": False, + "root": "/x", + }}} + ) + self.assertIn(" - extensions_tried: .bin, .zip", lines) + self.assertIn(" - hle_available: no", lines) + self.assertIn(" - root: <system_dir>/x", lines) + + class RenderedSiteValidation(unittest.TestCase): def setUp(self) -> None: self.temp = tempfile.TemporaryDirectory(dir=TMP_ROOT)