Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions examples/room_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -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())
Expand Down
10 changes: 1 addition & 9 deletions jellyfish/_openapi_client/models/component_details_response.py
Original file line number Diff line number Diff line change
@@ -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
Expand Down
12 changes: 11 additions & 1 deletion jellyfish/_openapi_client/models/peer_details_response_data.py
Original file line number Diff line number Diff line change
@@ -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

Expand All @@ -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"""

Expand All @@ -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)
Expand All @@ -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

Expand All @@ -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
Expand Down
12 changes: 9 additions & 3 deletions jellyfish/api/_room_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
ComponentRTSP,
ComponentSIP,
DialConfig,
Peer,
PeerDetailsResponseData,
PeerOptionsWebRTC,
Room,
RoomConfig,
Expand Down Expand Up @@ -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

Expand All @@ -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"""
Expand Down
8 changes: 3 additions & 5 deletions tests/support/peer_socket.py
Original file line number Diff line number Diff line change
Expand Up @@ -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))

Expand Down
28 changes: 15 additions & 13 deletions tests/test_notifier.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand Down Expand Up @@ -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()

Expand All @@ -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()

Expand Down Expand Up @@ -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()

Expand Down
12 changes: 7 additions & 5 deletions tests/test_room_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand All @@ -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
Expand Down