diff --git a/examples/room_api.py b/examples/room_api.py index 7888780..a08d33e 100644 --- a/examples/room_api.py +++ b/examples/room_api.py @@ -14,8 +14,8 @@ print((jellyfish_address, room)) # Add peer to the room -peer_token, peer_webrtc = room_api.add_peer(room.id, options=PeerOptionsWebRTC()) -print((peer_token, peer_webrtc)) +result = room_api.add_peer(room.id, options=PeerOptionsWebRTC()) +print((result.token, result.peer, result.peer_websocket_url)) # Add component to the room component_hls = room_api.add_component(room.id, options=ComponentOptionsHLS()) diff --git a/jellyfish/_openapi_client/models/component_details_response.py b/jellyfish/_openapi_client/models/component_details_response.py index b2d91b6..1b91dfb 100644 --- a/jellyfish/_openapi_client/models/component_details_response.py +++ b/jellyfish/_openapi_client/models/component_details_response.py @@ -1,12 +1,4 @@ -from typing import ( - TYPE_CHECKING, - Any, - Dict, - List, - Type, - TypeVar, - Union, -) +from typing import TYPE_CHECKING, Any, Dict, List, Type, TypeVar, Union from attrs import define as _attrs_define from attrs import field as _attrs_field diff --git a/jellyfish/_openapi_client/models/peer_details_response_data.py b/jellyfish/_openapi_client/models/peer_details_response_data.py index fb298ca..ad5434a 100644 --- a/jellyfish/_openapi_client/models/peer_details_response_data.py +++ b/jellyfish/_openapi_client/models/peer_details_response_data.py @@ -1,8 +1,10 @@ -from typing import TYPE_CHECKING, Any, Dict, List, Type, TypeVar +from typing import TYPE_CHECKING, Any, Dict, List, Type, TypeVar, Union from attrs import define as _attrs_define from attrs import field as _attrs_field +from ..types import UNSET, Unset + if TYPE_CHECKING: from ..models.peer import Peer @@ -18,6 +20,8 @@ class PeerDetailsResponseData: """Describes peer status""" token: str """Token for authorizing websocket connection""" + peer_websocket_url: Union[Unset, str] = UNSET + """Websocket URL to which peer has to connect""" additional_properties: Dict[str, Any] = _attrs_field(init=False, factory=dict) """@private""" @@ -26,6 +30,7 @@ def to_dict(self) -> Dict[str, Any]: peer = self.peer.to_dict() token = self.token + peer_websocket_url = self.peer_websocket_url field_dict: Dict[str, Any] = {} field_dict.update(self.additional_properties) @@ -35,6 +40,8 @@ def to_dict(self) -> Dict[str, Any]: "token": token, } ) + if peer_websocket_url is not UNSET: + field_dict["peer_websocket_url"] = peer_websocket_url return field_dict @@ -48,9 +55,12 @@ def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T: token = d.pop("token") + peer_websocket_url = d.pop("peer_websocket_url", UNSET) + peer_details_response_data = cls( peer=peer, token=token, + peer_websocket_url=peer_websocket_url, ) peer_details_response_data.additional_properties = d diff --git a/jellyfish/api/_room_api.py b/jellyfish/api/_room_api.py index 5ae754c..1da2edc 100644 --- a/jellyfish/api/_room_api.py +++ b/jellyfish/api/_room_api.py @@ -29,7 +29,7 @@ ComponentRTSP, ComponentSIP, DialConfig, - Peer, + PeerDetailsResponseData, PeerOptionsWebRTC, Room, RoomConfig, @@ -110,7 +110,9 @@ def get_room(self, room_id: str) -> Room: return self._request(room_get_room, room_id=room_id).data - def add_peer(self, room_id: str, options: PeerOptionsWebRTC) -> Tuple[str, Peer]: + def add_peer( + self, room_id: str, options: PeerOptionsWebRTC + ) -> PeerDetailsResponseData: """ Creates peer in the room @@ -126,7 +128,11 @@ def add_peer(self, room_id: str, options: PeerOptionsWebRTC) -> Tuple[str, Peer] json_body = AddPeerJsonBody(type=peer_type, options=options) resp = self._request(room_add_peer, room_id=room_id, json_body=json_body) - return (resp.data.token, resp.data.peer) + return PeerDetailsResponseData( + peer=resp.data.peer, + token=resp.data.token, + peer_websocket_url=resp.data.peer_websocket_url, + ) def delete_peer(self, room_id: str, peer_id: str) -> None: """Deletes peer""" diff --git a/tests/support/peer_socket.py b/tests/support/peer_socket.py index c6d401b..198debb 100644 --- a/tests/support/peer_socket.py +++ b/tests/support/peer_socket.py @@ -14,17 +14,15 @@ class PeerSocket: - def __init__(self, server_address, auto_close=False): - self._server_address = server_address + def __init__(self, socket_address, auto_close=False): + self._socket_address = socket_address self._ready = False self._ready_event = None self._auto_close = auto_close async def connect(self, token): - async with client.connect( - f"ws://{self._server_address}/socket/peer/websocket" - ) as websocket: + async with client.connect(f"ws://{self._socket_address}") as websocket: msg = PeerMessage(auth_request=PeerMessageAuthRequest(token=token)) await websocket.send(bytes(msg)) diff --git a/tests/test_notifier.py b/tests/test_notifier.py index 260f91a..b996c17 100644 --- a/tests/test_notifier.py +++ b/tests/test_notifier.py @@ -132,14 +132,14 @@ async def test_peer_connected_disconnected( _, room = room_api.create_room(webhook_url=WEBHOOK_URL) - peer_token, peer = room_api.add_peer(room.id, options=PeerOptionsWebRTC()) + result = room_api.add_peer(room.id, options=PeerOptionsWebRTC()) - peer_socket = PeerSocket(server_address=SERVER_ADDRESS) - peer_task = asyncio.create_task(peer_socket.connect(peer_token)) + peer_socket = PeerSocket(socket_address=result.peer_websocket_url) + peer_task = asyncio.create_task(peer_socket.connect(result.token)) await peer_socket.wait_ready() - room_api.delete_peer(room.id, peer.id) + room_api.delete_peer(room.id, result.peer.id) room_api.delete_room(room.id) @@ -172,10 +172,12 @@ async def test_peer_connected_disconnected_deleted( peer_disconnected_timeout=1, ) - peer_token, peer = room_api.add_peer(room.id, options=PeerOptionsWebRTC()) + result = room_api.add_peer(room.id, options=PeerOptionsWebRTC()) - peer_socket = PeerSocket(server_address=SERVER_ADDRESS, auto_close=True) - peer_task = asyncio.create_task(peer_socket.connect(peer_token)) + peer_socket = PeerSocket( + socket_address=result.peer_websocket_url, auto_close=True + ) + peer_task = asyncio.create_task(peer_socket.connect(result.token)) await peer_socket.wait_ready() @@ -201,10 +203,10 @@ async def test_peer_connected_room_deleted( await notifier.wait_ready() _, room = room_api.create_room(webhook_url=WEBHOOK_URL) - peer_token, _peer = room_api.add_peer(room.id, options=PeerOptionsWebRTC()) + result = room_api.add_peer(room.id, options=PeerOptionsWebRTC()) - peer_socket = PeerSocket(server_address=SERVER_ADDRESS) - peer_task = asyncio.create_task(peer_socket.connect(peer_token)) + peer_socket = PeerSocket(socket_address=result.peer_websocket_url) + peer_task = asyncio.create_task(peer_socket.connect(result.token)) await peer_socket.wait_ready() @@ -253,10 +255,10 @@ class TestReceivingMetrics: @pytest.mark.asyncio async def test_metrics_with_one_peer(self, room_api: RoomApi, notifier: Notifier): _, room = room_api.create_room() - peer_token, _peer = room_api.add_peer(room.id, PeerOptionsWebRTC()) + result = room_api.add_peer(room.id, PeerOptionsWebRTC()) - peer_socket = PeerSocket(server_address=SERVER_ADDRESS) - peer_task = asyncio.create_task(peer_socket.connect(peer_token)) + peer_socket = PeerSocket(socket_address=result.peer_websocket_url) + peer_task = asyncio.create_task(peer_socket.connect(result.token)) await peer_socket.wait_ready() diff --git a/tests/test_room_api.py b/tests/test_room_api.py index f0dde83..05d5c49 100644 --- a/tests/test_room_api.py +++ b/tests/test_room_api.py @@ -405,23 +405,23 @@ def _assert_peer_created(self, room_api, webrtc_peer, room_id): def test_with_specified_options(self, room_api: RoomApi): _, room = room_api.create_room() - _token, peer = room_api.add_peer( + peer = room_api.add_peer( room.id, options=PeerOptionsWebRTC(enable_simulcast=True) - ) + ).peer self._assert_peer_created(room_api, peer, room.id) def test_default_options(self, room_api: RoomApi): _, room = room_api.create_room() - _token, peer = room_api.add_peer(room.id, options=PeerOptionsWebRTC()) + peer = room_api.add_peer(room.id, options=PeerOptionsWebRTC()).peer self._assert_peer_created(room_api, peer, room.id) def test_peer_limit_reached(self, room_api: RoomApi): _, room = room_api.create_room(max_peers=1) - _token, peer = room_api.add_peer(room.id, options=PeerOptionsWebRTC()) + peer = room_api.add_peer(room.id, options=PeerOptionsWebRTC()).peer self._assert_peer_created(room_api, peer, room.id) @@ -432,10 +432,12 @@ def test_peer_limit_reached(self, room_api: RoomApi): class TestDeletePeer: def test_valid(self, room_api: RoomApi): _, room = room_api.create_room() - _, peer = room_api.add_peer( + result = room_api.add_peer( room.id, options=PeerOptionsWebRTC(enable_simulcast=True) ) + peer = result.peer + room_api.delete_peer(room.id, peer.id) assert [] == room_api.get_room(room.id).peers