From 3d432f3215d31bde8ccbcc36045d672b229ca39b Mon Sep 17 00:00:00 2001 From: Florian Pfaff <6773539+FlorianPfaff@users.noreply.github.com> Date: Thu, 2 Jul 2026 18:55:47 +0200 Subject: [PATCH 1/2] Return copies from backend capability iterator --- src/pyrecest/_backend/capabilities.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/pyrecest/_backend/capabilities.py b/src/pyrecest/_backend/capabilities.py index 43bade893..cb545daf5 100644 --- a/src/pyrecest/_backend/capabilities.py +++ b/src/pyrecest/_backend/capabilities.py @@ -203,7 +203,9 @@ def get_api_backend_support(api_name: str) -> dict[str, str]: def iter_api_backend_capabilities() -> tuple[tuple[str, dict[str, str]], ...]: """Return public API backend support rows in a stable order.""" - return tuple(sorted(API_BACKEND_CAPABILITIES.items())) + return tuple( + (api_name, dict(row)) for api_name, row in sorted(API_BACKEND_CAPABILITIES.items()) + ) def validate_api_backend_capabilities() -> tuple[str, ...]: From 873fe54347aa397aada8fd09460b2a589d77addb Mon Sep 17 00:00:00 2001 From: Florian Pfaff <6773539+FlorianPfaff@users.noreply.github.com> Date: Thu, 2 Jul 2026 18:55:57 +0200 Subject: [PATCH 2/2] Test backend capability iterator copies --- tests/test_backend_capabilities.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tests/test_backend_capabilities.py b/tests/test_backend_capabilities.py index 3d758e029..8ada79e96 100644 --- a/tests/test_backend_capabilities.py +++ b/tests/test_backend_capabilities.py @@ -20,6 +20,15 @@ def test_api_backend_capability_rows_have_valid_support_levels() -> None: assert support.get("notes") +def test_iter_api_backend_capabilities_returns_row_copies() -> None: + api_name, support = iter_api_backend_capabilities()[0] + original_notes = API_BACKEND_CAPABILITIES[api_name]["notes"] + + support["notes"] = "mutated by caller" + + assert API_BACKEND_CAPABILITIES[api_name]["notes"] == original_notes + + def test_cli_backends_reports_machine_readable_capabilities(capsys) -> None: assert cli_main(["backends"]) == 0 payload = json.loads(capsys.readouterr().out)