Skip to content

Commit 96359be

Browse files
authored
FCE-1780 / accept fishjam id (#33)
* allow using the sdk with fishjam id * parse arguments * adjust tests * add the message to the missing fishjam id error * fix positional fishjam id in notifier
1 parent 7604b08 commit 96359be

File tree

10 files changed

+68
-24
lines changed

10 files changed

+68
-24
lines changed

.tool-versions

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
python 3.13.5
2+
poetry 2.1.3

examples/room_manager/arguments.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ def parse_arguments():
99
parser.add_argument("--webhook_url", type=str, default=None)
1010
parser.add_argument("--enable_simulcast", type=str, default=True)
1111
parser.add_argument("--max_peers", type=str, default=None)
12-
parser.add_argument("--fishjam_url", type=str, default="http://localhost:5002")
12+
parser.add_argument("--fishjam_url", type=str, default=None)
13+
parser.add_argument("--fishjam_id", type=str, default=None)
1314
parser.add_argument("--management_token", type=str, default="development")
1415

1516
return parser.parse_args()

examples/room_manager/room_service.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,16 +24,15 @@ class PeerAccess:
2424
room: Resource
2525
peer: Resource
2626
peer_token: str
27-
url: str
2827

2928

3029
class RoomService:
3130
def __init__(self, args: Namespace, logger: Logger):
3231
self.fishjam_client = FishjamClient(
33-
fishjam_url=args.fishjam_url,
32+
fishjam_id=args.fishjam_id,
3433
management_token=args.management_token,
34+
fishjam_url=args.fishjam_url,
3535
)
36-
self.url = args.fishjam_url.replace("http", "ws")
3736
self.room_name_to_room_id: dict[str, str] = {}
3837
self.peer_name_to_access: dict[str, PeerAccess] = {}
3938
self.logger = logger
@@ -105,7 +104,6 @@ def __create_peer(self, room_name: str, peer_name: str) -> PeerAccess:
105104
room=Resource(id=room_id, name=room_name),
106105
peer=Resource(id=peer.id, name=peer_name),
107106
peer_token=token,
108-
url=self.url,
109107
)
110108

111109
self.peer_name_to_access[peer_name] = peer_access

fishjam/_ws_notifier.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,21 +21,27 @@
2121
ALLOWED_NOTIFICATIONS,
2222
AllowedNotification,
2323
)
24+
from fishjam.utils import get_fishjam_url
2425

2526

2627
class FishjamNotifier:
2728
"""
2829
Allows for receiving WebSocket messages from Fishjam.
2930
"""
3031

31-
def __init__(self, fishjam_url: str, management_token: str):
32+
def __init__(
33+
self,
34+
fishjam_id: str,
35+
management_token: str,
36+
*,
37+
fishjam_url: str | None = None,
38+
):
3239
"""
33-
Create FishjamNotifier instance, providing the fishjam url and management token.
40+
Create FishjamNotifier instance, providing the fishjam id and management token.
3441
"""
3542

36-
self._fishjam_url = (
37-
f"{fishjam_url.replace('http', 'ws')}/socket/server/websocket"
38-
)
43+
websocket_url = get_fishjam_url(fishjam_id, fishjam_url).replace("http", "ws")
44+
self._fishjam_url = f"{websocket_url}/socket/server/websocket"
3945
self._management_token: str = management_token
4046
self._websocket: client.WebSocketClientProtocol | None = None
4147
self._ready: bool = False

fishjam/api/_client.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,17 @@
44
from fishjam._openapi_client.models import Error
55
from fishjam._openapi_client.types import Response
66
from fishjam.errors import HTTPError
7+
from fishjam.utils import get_fishjam_url
78

89

910
class Client:
10-
def __init__(self, fishjam_url: str, management_token: str):
11-
self.client = AuthenticatedClient(f"{fishjam_url}", token=management_token)
11+
def __init__(
12+
self, fishjam_id: str, management_token: str, *, fishjam_url: str | None = None
13+
):
14+
self.client = AuthenticatedClient(
15+
get_fishjam_url(fishjam_id, fishjam_url),
16+
token=management_token,
17+
)
1218

1319
def _request(self, method, **kwargs):
1420
response = method.sync_detailed(client=self.client, **kwargs)

fishjam/api/_fishjam_client.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -82,11 +82,21 @@ class PeerOptions:
8282
class FishjamClient(Client):
8383
"""Allows for managing rooms"""
8484

85-
def __init__(self, fishjam_url: str, management_token: str):
85+
def __init__(
86+
self,
87+
fishjam_id: str,
88+
management_token: str,
89+
*,
90+
fishjam_url: str | None = None,
91+
):
8692
"""
87-
Create FishjamClient instance, providing the fishjam url and managment token.
93+
Create a FishjamClient instance, providing the fishjam id and management token.
8894
"""
89-
super().__init__(fishjam_url=fishjam_url, management_token=management_token)
95+
super().__init__(
96+
fishjam_id=fishjam_id,
97+
management_token=management_token,
98+
fishjam_url=fishjam_url,
99+
)
90100

91101
def create_peer(
92102
self, room_id: str, options: PeerOptions | None = None

fishjam/errors.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,3 +61,9 @@ class InternalServerError(HTTPError):
6161
def __init__(self, errors):
6262
"""@private"""
6363
super().__init__(errors)
64+
65+
66+
class MissingFishjamIdError(Exception):
67+
def __init__(self, message: str = "Missing Fishjam ID"):
68+
"""@private"""
69+
super().__init__(message)

fishjam/utils.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
from fishjam.errors import MissingFishjamIdError
2+
3+
4+
def get_fishjam_url(fishjam_id: str | None, fishjam_url: str | None) -> str:
5+
if not fishjam_url and not fishjam_id:
6+
raise MissingFishjamIdError
7+
8+
if fishjam_url:
9+
return fishjam_url
10+
11+
return f"https://fishjam.io/api/v1/connect/{fishjam_id}"

tests/test_notifier.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424

2525
HOST = "fishjam" if os.getenv("DOCKER_TEST") == "TRUE" else "localhost"
2626
FISHJAM_URL = f"http://{HOST}:5002"
27+
FISHJAM_ID = ""
2728
SERVER_API_TOKEN = "development"
2829
WEBHOOK_ADDRESS = "test" if os.getenv("DOCKER_TEST") == "TRUE" else "localhost"
2930
WEBHOOK_URL = f"http://{WEBHOOK_ADDRESS}:5000/webhook"
@@ -56,7 +57,9 @@ class TestConnectingToServer:
5657
@pytest.mark.asyncio
5758
async def test_valid_credentials(self):
5859
notifier = FishjamNotifier(
59-
fishjam_url=FISHJAM_URL, management_token=SERVER_API_TOKEN
60+
fishjam_id=FISHJAM_ID,
61+
management_token=SERVER_API_TOKEN,
62+
fishjam_url=FISHJAM_URL,
6063
)
6164

6265
@notifier.on_server_notification
@@ -73,7 +76,7 @@ def handle_notitifcation(_notification):
7376
@pytest.mark.asyncio
7477
async def test_invalid_credentials(self):
7578
notifier = FishjamNotifier(
76-
fishjam_url=FISHJAM_URL, management_token="wrong_token"
79+
fishjam_id="", management_token="wrong_token", fishjam_url=FISHJAM_URL
7780
)
7881

7982
task = asyncio.create_task(notifier.connect())
@@ -84,13 +87,15 @@ async def test_invalid_credentials(self):
8487

8588
@pytest.fixture
8689
def room_api():
87-
return FishjamClient(fishjam_url=FISHJAM_URL, management_token=SERVER_API_TOKEN)
90+
return FishjamClient(FISHJAM_ID, SERVER_API_TOKEN, fishjam_url=FISHJAM_URL)
8891

8992

9093
@pytest.fixture
9194
def notifier():
9295
notifier = FishjamNotifier(
93-
fishjam_url=FISHJAM_URL, management_token=SERVER_API_TOKEN
96+
fishjam_id=FISHJAM_ID,
97+
management_token=SERVER_API_TOKEN,
98+
fishjam_url=FISHJAM_URL,
9499
)
95100

96101
return notifier

tests/test_room_api.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626

2727
HOST = "fishjam" if os.getenv("DOCKER_TEST") == "TRUE" else "localhost"
2828
FISHJAM_URL = f"http://{HOST}:5002"
29+
FISHJAM_ID = ""
2930
MANAGEMENT_TOKEN = "development"
3031

3132
MAX_PEERS = 10
@@ -37,15 +38,13 @@
3738

3839
class TestAuthentication:
3940
def test_invalid_token(self):
40-
room_api = FishjamClient(fishjam_url=FISHJAM_URL, management_token="invalid")
41+
room_api = FishjamClient(FISHJAM_ID, "invalid", fishjam_url=FISHJAM_URL)
4142

4243
with pytest.raises(UnauthorizedError):
4344
room_api.create_room()
4445

4546
def test_valid_token(self):
46-
room_api = FishjamClient(
47-
fishjam_url=FISHJAM_URL, management_token=MANAGEMENT_TOKEN
48-
)
47+
room_api = FishjamClient(FISHJAM_ID, MANAGEMENT_TOKEN, fishjam_url=FISHJAM_URL)
4948

5049
room = room_api.create_room()
5150
all_rooms = room_api.get_all_rooms()
@@ -55,7 +54,7 @@ def test_valid_token(self):
5554

5655
@pytest.fixture
5756
def room_api():
58-
return FishjamClient(fishjam_url=FISHJAM_URL, management_token=MANAGEMENT_TOKEN)
57+
return FishjamClient(FISHJAM_ID, MANAGEMENT_TOKEN, fishjam_url=FISHJAM_URL)
5958

6059

6160
class TestCreateRoom:

0 commit comments

Comments
 (0)