diff --git a/src/pipecat/transports/services/helpers/daily_rest.py b/src/pipecat/transports/services/helpers/daily_rest.py index 840222290..584cd7d67 100644 --- a/src/pipecat/transports/services/helpers/daily_rest.py +++ b/src/pipecat/transports/services/helpers/daily_rest.py @@ -70,9 +70,13 @@ class DailyRESTHelper: self.daily_api_url = daily_api_url self.aiohttp_session = aiohttp_session - def _get_name_from_url(self, room_url: str) -> str: + def get_name_from_url(self, room_url: str) -> str: return urlparse(room_url).path[1:] + async def get_room_from_url(self, room_url: str) -> DailyRoomObject: + room_name = self.get_name_from_url(room_url) + return await self._get_room_from_name(room_name) + async def create_room(self, params: DailyRoomParams) -> DailyRoomObject: headers = {"Authorization": f"Bearer {self.daily_api_key}"} json = {**params.model_dump(exclude_none=True)} @@ -90,25 +94,6 @@ class DailyRESTHelper: return room - async def _get_room_from_name(self, room_name: str) -> DailyRoomObject: - headers = {"Authorization": f"Bearer {self.daily_api_key}"} - async with self.aiohttp_session.get(f"{self.daily_api_url}/rooms/{room_name}", headers=headers) as r: - if r.status != 200: - raise Exception(f"Room not found: {room_name}") - - data = await r.json() - - try: - room = DailyRoomObject(**data) - except ValidationError as e: - raise Exception(f"Invalid response: {e}") - - return room - - async def get_room_from_url(self, room_url: str,) -> DailyRoomObject: - room_name = self._get_name_from_url(room_url) - return await self._get_room_from_name(room_name) - async def get_token( self, room_url: str, @@ -120,7 +105,7 @@ class DailyRESTHelper: expiration: float = time.time() + expiry_time - room_name = self._get_name_from_url(room_url) + room_name = self.get_name_from_url(room_url) headers = {"Authorization": f"Bearer {self.daily_api_key}"} json = { @@ -139,12 +124,29 @@ class DailyRESTHelper: return data["token"] + async def delete_room_by_url(self, room_url: str) -> bool: + room_name = self.get_name_from_url(room_url) + return await self.delete_room_by_name(room_name) + async def delete_room_by_name(self, room_name: str) -> bool: headers = {"Authorization": f"Bearer {self.daily_api_key}"} async with self.aiohttp_session.delete(f"{self.daily_api_url}/rooms/{room_name}", headers=headers) as r: if r.status != 200 and r.status != 404: raise Exception(f"Failed to delete room: {room_name}") + return True + + async def _get_room_from_name(self, room_name: str) -> DailyRoomObject: + headers = {"Authorization": f"Bearer {self.daily_api_key}"} + async with self.aiohttp_session.get(f"{self.daily_api_url}/rooms/{room_name}", headers=headers) as r: + if r.status != 200: + raise Exception(f"Room not found: {room_name}") + data = await r.json() - return True + try: + room = DailyRoomObject(**data) + except ValidationError as e: + raise Exception(f"Invalid response: {e}") + + return room