From 0f97958fd5cd33e616a525d9cff222754917cffd Mon Sep 17 00:00:00 2001 From: On Freund Date: Mon, 1 Jun 2026 21:02:54 -0400 Subject: [PATCH] fix: route repeat/shuffle through ControllerGroupRole in metadata scenario MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit aiosendspin #244 removed repeat and shuffle from MetadataGroupRole.update() — they now live in ControllerGroupRole.set_repeat() / set_shuffle(). The metadata scenario was crashing with 'unexpected keyword argument repeat'. Fix: drop repeat= and shuffle= from metadata_group_role.update(), and call controller_group_role.set_repeat() / set_shuffle() instead. The controller role already mirrors those values back into metadata state for v1 back-compat via _mirror_to_metadata_back_compat(), so clients still receive them in the metadata payload and assertions continue to match. Co-Authored-By: Claude Sonnet 4.6 --- src/conformance/adapters/aiosendspin_server.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/conformance/adapters/aiosendspin_server.py b/src/conformance/adapters/aiosendspin_server.py index f8bff56..1b7024f 100644 --- a/src/conformance/adapters/aiosendspin_server.py +++ b/src/conformance/adapters/aiosendspin_server.py @@ -436,13 +436,17 @@ def send_binary_wrapper( async def _run_metadata_scenario(args: argparse.Namespace, *, client: Any) -> dict[str, Any]: from aiosendspin.models.types import RepeatMode + from aiosendspin.server.roles.controller import ControllerGroupRole from aiosendspin.server.roles.metadata import MetadataGroupRole metadata_group_role = client.group.group_role("metadata") if not isinstance(metadata_group_role, MetadataGroupRole): raise RuntimeError("Metadata group role is not active for this client") - repeat = RepeatMode(args.metadata_repeat) + controller_group_role = client.group.group_role("controller") + if not isinstance(controller_group_role, ControllerGroupRole): + raise RuntimeError("Controller group role is not active for this client") + expected = _metadata_snapshot(args) metadata_group_role.update( title=args.metadata_title, @@ -452,12 +456,14 @@ async def _run_metadata_scenario(args: argparse.Namespace, *, client: Any) -> di artwork_url=args.metadata_artwork_url, year=args.metadata_year, track=args.metadata_track, - repeat=repeat, - shuffle=_bool_from_cli(args.metadata_shuffle), track_progress=args.metadata_track_progress, track_duration=args.metadata_track_duration, playback_speed=args.metadata_playback_speed, ) + # repeat/shuffle moved to ControllerGroupRole in aiosendspin #244; + # the controller role mirrors them into metadata state for v1 back-compat. + controller_group_role.set_repeat(RepeatMode(args.metadata_repeat)) + controller_group_role.set_shuffle(_bool_from_cli(args.metadata_shuffle)) await asyncio.sleep(0.5) await _disconnect_client(client) return {"metadata": {"expected": expected}}