From 1a52c3a6d766acac5f161578e072d3cdf969de83 Mon Sep 17 00:00:00 2001 From: Mike McLaughlin Date: Mon, 8 Sep 2025 15:10:44 -0500 Subject: [PATCH] fix(rtc): raise error from Rust SDK in participant methods --- livekit-rtc/livekit/rtc/participant.py | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/livekit-rtc/livekit/rtc/participant.py b/livekit-rtc/livekit/rtc/participant.py index 22b07435..06616174 100644 --- a/livekit-rtc/livekit/rtc/participant.py +++ b/livekit-rtc/livekit/rtc/participant.py @@ -80,6 +80,10 @@ def __init__(self, message: str) -> None: self.message = message +class ParticipantError(Exception): + def __init__(self, message: str) -> None: + self.message = message + class Participant(ABC): def __init__(self, owned_info: proto_participant.OwnedParticipant) -> None: self._info = owned_info.info @@ -491,9 +495,11 @@ async def set_metadata(self, metadata: str) -> None: queue = FfiClient.instance.queue.subscribe() try: resp = FfiClient.instance.request(req) - await queue.wait_for( + cb: proto_ffi.FfiEvent = await queue.wait_for( lambda e: e.set_local_metadata.async_id == resp.set_local_metadata.async_id ) + if cb.set_local_metadata.error: + raise ParticipantError(cb.set_local_metadata.error) finally: FfiClient.instance.queue.unsubscribe(queue) @@ -513,9 +519,12 @@ async def set_name(self, name: str) -> None: queue = FfiClient.instance.queue.subscribe() try: resp = FfiClient.instance.request(req) - await queue.wait_for( + cb: proto_ffi.FfiEvent = await queue.wait_for( lambda e: e.set_local_name.async_id == resp.set_local_name.async_id ) + + if cb.set_local_name.error: + raise ParticipantError(cb.set_local_name.error) finally: FfiClient.instance.queue.unsubscribe(queue) @@ -543,9 +552,13 @@ async def set_attributes(self, attributes: dict[str, str]) -> None: queue = FfiClient.instance.queue.subscribe() try: resp = FfiClient.instance.request(req) - await queue.wait_for( + cb: proto_ffi.FfiEvent = await queue.wait_for( lambda e: e.set_local_attributes.async_id == resp.set_local_attributes.async_id ) + + if cb.set_local_attributes.error: + raise ParticipantError(cb.set_local_attributes.error) + finally: FfiClient.instance.queue.unsubscribe(queue)