From ec360a20abc242d532fe77065eed35a53a080dda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rados=C5=82aw=20Szuma?= Date: Tue, 16 Apr 2024 14:15:10 +0200 Subject: [PATCH 1/6] Use PeerCreationResponse class in RoomApi.add_peer --- .../models/peer_details_response_data.py | 12 ++++++++++- jellyfish/api/_room_api.py | 20 +++++++++++++++++-- tests/support/peer_socket.py | 6 +++--- tests/test_notifier.py | 20 +++++++++---------- tests/test_room_api.py | 12 ++++++----- 5 files changed, 49 insertions(+), 21 deletions(-) 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..0fcbe19 100644 --- a/jellyfish/api/_room_api.py +++ b/jellyfish/api/_room_api.py @@ -39,6 +39,22 @@ from jellyfish.api._base_api import BaseApi +class PeerCreationResponse: + """Contains all information returned by jellyfish after adding Peer""" + + peer: Peer + """Peer structure""" + token: str + """token used for authentication when connecting through websocket to jellyfish""" + ws_url: str + """websocket adress to which this specific peer have to connect""" + + def __init__(self, peer: Peer, token: str, ws_url: str) -> None: + self.peer = peer + self.token = token + self.ws_url = ws_url + + class RoomApi(BaseApi): """Allows for managing rooms""" @@ -110,7 +126,7 @@ 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) -> PeerCreationResponse: """ Creates peer in the room @@ -126,7 +142,7 @@ 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 PeerCreationResponse(resp.data.peer, resp.data.token, 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..41d498f 100644 --- a/tests/support/peer_socket.py +++ b/tests/support/peer_socket.py @@ -14,8 +14,8 @@ class PeerSocket: - def __init__(self, server_address, auto_close=False): - self._server_address = server_address + def __init__(self, socket_addres, auto_close=False): + self._socket_addres = socket_addres self._ready = False self._ready_event = None @@ -23,7 +23,7 @@ def __init__(self, server_address, auto_close=False): async def connect(self, token): async with client.connect( - f"ws://{self._server_address}/socket/peer/websocket" + f"ws://{self._socket_addres}" ) 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..1d8110c 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_addres=result.ws_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) @@ -201,10 +201,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_addres=result.ws_url) + peer_task = asyncio.create_task(peer_socket.connect(result.token)) await peer_socket.wait_ready() @@ -253,10 +253,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_addres=result.ws_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 From c0440c022af8a2d796e636b426d219d04945817c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rados=C5=82aw=20Szuma?= Date: Tue, 16 Apr 2024 14:17:14 +0200 Subject: [PATCH 2/6] Run formatter --- jellyfish/api/_room_api.py | 10 +++++++--- tests/support/peer_socket.py | 4 +--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/jellyfish/api/_room_api.py b/jellyfish/api/_room_api.py index 0fcbe19..0be2313 100644 --- a/jellyfish/api/_room_api.py +++ b/jellyfish/api/_room_api.py @@ -53,7 +53,7 @@ def __init__(self, peer: Peer, token: str, ws_url: str) -> None: self.peer = peer self.token = token self.ws_url = ws_url - + class RoomApi(BaseApi): """Allows for managing rooms""" @@ -126,7 +126,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) -> PeerCreationResponse: + def add_peer( + self, room_id: str, options: PeerOptionsWebRTC + ) -> PeerCreationResponse: """ Creates peer in the room @@ -142,7 +144,9 @@ def add_peer(self, room_id: str, options: PeerOptionsWebRTC) -> PeerCreationResp json_body = AddPeerJsonBody(type=peer_type, options=options) resp = self._request(room_add_peer, room_id=room_id, json_body=json_body) - return PeerCreationResponse(resp.data.peer, resp.data.token, resp.data.peer_websocket_url) + return PeerCreationResponse( + resp.data.peer, resp.data.token, 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 41d498f..e7c9e04 100644 --- a/tests/support/peer_socket.py +++ b/tests/support/peer_socket.py @@ -22,9 +22,7 @@ def __init__(self, socket_addres, auto_close=False): self._auto_close = auto_close async def connect(self, token): - async with client.connect( - f"ws://{self._socket_addres}" - ) as websocket: + async with client.connect(f"ws://{self._socket_addres}") as websocket: msg = PeerMessage(auth_request=PeerMessageAuthRequest(token=token)) await websocket.send(bytes(msg)) From fe38fc68190a555f2951e542117933e0f83a1a8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rados=C5=82aw=20Szuma?= Date: Wed, 17 Apr 2024 15:36:44 +0200 Subject: [PATCH 3/6] Fixes after rebase --- jellyfish/api/_room_api.py | 26 ++++++-------------------- tests/test_notifier.py | 12 ++++++------ 2 files changed, 12 insertions(+), 26 deletions(-) diff --git a/jellyfish/api/_room_api.py b/jellyfish/api/_room_api.py index 0be2313..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, @@ -39,22 +39,6 @@ from jellyfish.api._base_api import BaseApi -class PeerCreationResponse: - """Contains all information returned by jellyfish after adding Peer""" - - peer: Peer - """Peer structure""" - token: str - """token used for authentication when connecting through websocket to jellyfish""" - ws_url: str - """websocket adress to which this specific peer have to connect""" - - def __init__(self, peer: Peer, token: str, ws_url: str) -> None: - self.peer = peer - self.token = token - self.ws_url = ws_url - - class RoomApi(BaseApi): """Allows for managing rooms""" @@ -128,7 +112,7 @@ def get_room(self, room_id: str) -> Room: def add_peer( self, room_id: str, options: PeerOptionsWebRTC - ) -> PeerCreationResponse: + ) -> PeerDetailsResponseData: """ Creates peer in the room @@ -144,8 +128,10 @@ def add_peer( json_body = AddPeerJsonBody(type=peer_type, options=options) resp = self._request(room_add_peer, room_id=room_id, json_body=json_body) - return PeerCreationResponse( - resp.data.peer, resp.data.token, resp.data.peer_websocket_url + 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: diff --git a/tests/test_notifier.py b/tests/test_notifier.py index 1d8110c..4b7a8ca 100644 --- a/tests/test_notifier.py +++ b/tests/test_notifier.py @@ -134,7 +134,7 @@ async def test_peer_connected_disconnected( result = room_api.add_peer(room.id, options=PeerOptionsWebRTC()) - peer_socket = PeerSocket(socket_addres=result.ws_url) + peer_socket = PeerSocket(socket_addres=result.peer_websocket_url) peer_task = asyncio.create_task(peer_socket.connect(result.token)) await peer_socket.wait_ready() @@ -172,10 +172,10 @@ 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_addres=SERVER_ADDRESS, auto_close=True) + peer_task = asyncio.create_task(peer_socket.connect(result.token)) await peer_socket.wait_ready() @@ -203,7 +203,7 @@ async def test_peer_connected_room_deleted( _, room = room_api.create_room(webhook_url=WEBHOOK_URL) result = room_api.add_peer(room.id, options=PeerOptionsWebRTC()) - peer_socket = PeerSocket(socket_addres=result.ws_url) + peer_socket = PeerSocket(socket_addres=result.peer_websocket_url) peer_task = asyncio.create_task(peer_socket.connect(result.token)) await peer_socket.wait_ready() @@ -255,7 +255,7 @@ async def test_metrics_with_one_peer(self, room_api: RoomApi, notifier: Notifier _, room = room_api.create_room() result = room_api.add_peer(room.id, PeerOptionsWebRTC()) - peer_socket = PeerSocket(socket_addres=result.ws_url) + peer_socket = PeerSocket(socket_addres=result.peer_websocket_url) peer_task = asyncio.create_task(peer_socket.connect(result.token)) await peer_socket.wait_ready() From 0b2c48adf2776c475cf98e4ea2cac031e6b43eba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rados=C5=82aw=20Szuma?= Date: Wed, 17 Apr 2024 15:57:33 +0200 Subject: [PATCH 4/6] Fix test --- .../models/component_details_response.py | 10 +--------- tests/test_notifier.py | 2 +- 2 files changed, 2 insertions(+), 10 deletions(-) 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/tests/test_notifier.py b/tests/test_notifier.py index 4b7a8ca..25148de 100644 --- a/tests/test_notifier.py +++ b/tests/test_notifier.py @@ -174,7 +174,7 @@ async def test_peer_connected_disconnected_deleted( result = room_api.add_peer(room.id, options=PeerOptionsWebRTC()) - peer_socket = PeerSocket(socket_addres=SERVER_ADDRESS, auto_close=True) + peer_socket = PeerSocket(socket_addres=result.peer_websocket_url, auto_close=True) peer_task = asyncio.create_task(peer_socket.connect(result.token)) await peer_socket.wait_ready() From cea165075cd9d141240dce5ebdb88b2b38a56dbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rados=C5=82aw=20Szuma?= Date: Wed, 17 Apr 2024 16:05:48 +0200 Subject: [PATCH 5/6] Fix examples --- examples/room_api.py | 4 ++-- tests/test_notifier.py | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) 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/tests/test_notifier.py b/tests/test_notifier.py index 25148de..cb17950 100644 --- a/tests/test_notifier.py +++ b/tests/test_notifier.py @@ -174,7 +174,9 @@ async def test_peer_connected_disconnected_deleted( result = room_api.add_peer(room.id, options=PeerOptionsWebRTC()) - peer_socket = PeerSocket(socket_addres=result.peer_websocket_url, auto_close=True) + peer_socket = PeerSocket( + socket_addres=result.peer_websocket_url, auto_close=True + ) peer_task = asyncio.create_task(peer_socket.connect(result.token)) await peer_socket.wait_ready() From 09bf2b16bf6e62b7e9d74ea7fd1a871fe8150473 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rados=C5=82aw=20Szuma?= Date: Wed, 17 Apr 2024 16:41:46 +0200 Subject: [PATCH 6/6] Fix typo --- tests/support/peer_socket.py | 6 +++--- tests/test_notifier.py | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/tests/support/peer_socket.py b/tests/support/peer_socket.py index e7c9e04..198debb 100644 --- a/tests/support/peer_socket.py +++ b/tests/support/peer_socket.py @@ -14,15 +14,15 @@ class PeerSocket: - def __init__(self, socket_addres, auto_close=False): - self._socket_addres = socket_addres + 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._socket_addres}") 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 cb17950..b996c17 100644 --- a/tests/test_notifier.py +++ b/tests/test_notifier.py @@ -134,7 +134,7 @@ async def test_peer_connected_disconnected( result = room_api.add_peer(room.id, options=PeerOptionsWebRTC()) - peer_socket = PeerSocket(socket_addres=result.peer_websocket_url) + peer_socket = PeerSocket(socket_address=result.peer_websocket_url) peer_task = asyncio.create_task(peer_socket.connect(result.token)) await peer_socket.wait_ready() @@ -175,7 +175,7 @@ async def test_peer_connected_disconnected_deleted( result = room_api.add_peer(room.id, options=PeerOptionsWebRTC()) peer_socket = PeerSocket( - socket_addres=result.peer_websocket_url, auto_close=True + socket_address=result.peer_websocket_url, auto_close=True ) peer_task = asyncio.create_task(peer_socket.connect(result.token)) @@ -205,7 +205,7 @@ async def test_peer_connected_room_deleted( _, room = room_api.create_room(webhook_url=WEBHOOK_URL) result = room_api.add_peer(room.id, options=PeerOptionsWebRTC()) - peer_socket = PeerSocket(socket_addres=result.peer_websocket_url) + peer_socket = PeerSocket(socket_address=result.peer_websocket_url) peer_task = asyncio.create_task(peer_socket.connect(result.token)) await peer_socket.wait_ready() @@ -257,7 +257,7 @@ async def test_metrics_with_one_peer(self, room_api: RoomApi, notifier: Notifier _, room = room_api.create_room() result = room_api.add_peer(room.id, PeerOptionsWebRTC()) - peer_socket = PeerSocket(socket_addres=result.peer_websocket_url) + peer_socket = PeerSocket(socket_address=result.peer_websocket_url) peer_task = asyncio.create_task(peer_socket.connect(result.token)) await peer_socket.wait_ready()