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
2 changes: 2 additions & 0 deletions .tool-versions
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
python 3.13.5
poetry 2.1.3
3 changes: 2 additions & 1 deletion examples/room_manager/arguments.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@ def parse_arguments():
parser.add_argument("--webhook_url", type=str, default=None)
parser.add_argument("--enable_simulcast", type=str, default=True)
parser.add_argument("--max_peers", type=str, default=None)
parser.add_argument("--fishjam_url", type=str, default="http://localhost:5002")
parser.add_argument("--fishjam_url", type=str, default=None)
parser.add_argument("--fishjam_id", type=str, default=None)
parser.add_argument("--management_token", type=str, default="development")

return parser.parse_args()
6 changes: 2 additions & 4 deletions examples/room_manager/room_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,16 +24,15 @@ class PeerAccess:
room: Resource
peer: Resource
peer_token: str
url: str


class RoomService:
def __init__(self, args: Namespace, logger: Logger):
self.fishjam_client = FishjamClient(
fishjam_url=args.fishjam_url,
fishjam_id=args.fishjam_id,
management_token=args.management_token,
fishjam_url=args.fishjam_url,
)
self.url = args.fishjam_url.replace("http", "ws")
self.room_name_to_room_id: dict[str, str] = {}
self.peer_name_to_access: dict[str, PeerAccess] = {}
self.logger = logger
Expand Down Expand Up @@ -105,7 +104,6 @@ def __create_peer(self, room_name: str, peer_name: str) -> PeerAccess:
room=Resource(id=room_id, name=room_name),
peer=Resource(id=peer.id, name=peer_name),
peer_token=token,
url=self.url,
)

self.peer_name_to_access[peer_name] = peer_access
Expand Down
16 changes: 11 additions & 5 deletions fishjam/_ws_notifier.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,21 +21,27 @@
ALLOWED_NOTIFICATIONS,
AllowedNotification,
)
from fishjam.utils import get_fishjam_url


class FishjamNotifier:
"""
Allows for receiving WebSocket messages from Fishjam.
"""

def __init__(self, fishjam_url: str, management_token: str):
def __init__(
self,
fishjam_id: str,
management_token: str,
*,
fishjam_url: str | None = None,
):
"""
Create FishjamNotifier instance, providing the fishjam url and management token.
Create FishjamNotifier instance, providing the fishjam id and management token.
"""

self._fishjam_url = (
f"{fishjam_url.replace('http', 'ws')}/socket/server/websocket"
)
websocket_url = get_fishjam_url(fishjam_id, fishjam_url).replace("http", "ws")
self._fishjam_url = f"{websocket_url}/socket/server/websocket"
self._management_token: str = management_token
self._websocket: client.WebSocketClientProtocol | None = None
self._ready: bool = False
Expand Down
10 changes: 8 additions & 2 deletions fishjam/api/_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,17 @@
from fishjam._openapi_client.models import Error
from fishjam._openapi_client.types import Response
from fishjam.errors import HTTPError
from fishjam.utils import get_fishjam_url


class Client:
def __init__(self, fishjam_url: str, management_token: str):
self.client = AuthenticatedClient(f"{fishjam_url}", token=management_token)
def __init__(
self, fishjam_id: str, management_token: str, *, fishjam_url: str | None = None
):
self.client = AuthenticatedClient(
get_fishjam_url(fishjam_id, fishjam_url),
token=management_token,
)

def _request(self, method, **kwargs):
response = method.sync_detailed(client=self.client, **kwargs)
Expand Down
16 changes: 13 additions & 3 deletions fishjam/api/_fishjam_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -82,11 +82,21 @@ class PeerOptions:
class FishjamClient(Client):
"""Allows for managing rooms"""

def __init__(self, fishjam_url: str, management_token: str):
def __init__(
self,
fishjam_id: str,
management_token: str,
*,
fishjam_url: str | None = None,
):
"""
Create FishjamClient instance, providing the fishjam url and managment token.
Create a FishjamClient instance, providing the fishjam id and management token.
"""
super().__init__(fishjam_url=fishjam_url, management_token=management_token)
super().__init__(
fishjam_id=fishjam_id,
management_token=management_token,
fishjam_url=fishjam_url,
)

def create_peer(
self, room_id: str, options: PeerOptions | None = None
Expand Down
6 changes: 6 additions & 0 deletions fishjam/errors.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,3 +61,9 @@ class InternalServerError(HTTPError):
def __init__(self, errors):
"""@private"""
super().__init__(errors)


class MissingFishjamIdError(Exception):
def __init__(self, message: str = "Missing Fishjam ID"):
"""@private"""
super().__init__(message)
11 changes: 11 additions & 0 deletions fishjam/utils.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
from fishjam.errors import MissingFishjamIdError


def get_fishjam_url(fishjam_id: str | None, fishjam_url: str | None) -> str:
if not fishjam_url and not fishjam_id:
raise MissingFishjamIdError

if fishjam_url:
return fishjam_url

return f"https://fishjam.io/api/v1/connect/{fishjam_id}"
13 changes: 9 additions & 4 deletions tests/test_notifier.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@

HOST = "fishjam" if os.getenv("DOCKER_TEST") == "TRUE" else "localhost"
FISHJAM_URL = f"http://{HOST}:5002"
FISHJAM_ID = ""
SERVER_API_TOKEN = "development"
WEBHOOK_ADDRESS = "test" if os.getenv("DOCKER_TEST") == "TRUE" else "localhost"
WEBHOOK_URL = f"http://{WEBHOOK_ADDRESS}:5000/webhook"
Expand Down Expand Up @@ -56,7 +57,9 @@ class TestConnectingToServer:
@pytest.mark.asyncio
async def test_valid_credentials(self):
notifier = FishjamNotifier(
fishjam_url=FISHJAM_URL, management_token=SERVER_API_TOKEN
fishjam_id=FISHJAM_ID,
management_token=SERVER_API_TOKEN,
fishjam_url=FISHJAM_URL,
)

@notifier.on_server_notification
Expand All @@ -73,7 +76,7 @@ def handle_notitifcation(_notification):
@pytest.mark.asyncio
async def test_invalid_credentials(self):
notifier = FishjamNotifier(
fishjam_url=FISHJAM_URL, management_token="wrong_token"
fishjam_id="", management_token="wrong_token", fishjam_url=FISHJAM_URL
)

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

@pytest.fixture
def room_api():
return FishjamClient(fishjam_url=FISHJAM_URL, management_token=SERVER_API_TOKEN)
return FishjamClient(FISHJAM_ID, SERVER_API_TOKEN, fishjam_url=FISHJAM_URL)


@pytest.fixture
def notifier():
notifier = FishjamNotifier(
fishjam_url=FISHJAM_URL, management_token=SERVER_API_TOKEN
fishjam_id=FISHJAM_ID,
management_token=SERVER_API_TOKEN,
fishjam_url=FISHJAM_URL,
)

return notifier
Expand Down
9 changes: 4 additions & 5 deletions tests/test_room_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@

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

MAX_PEERS = 10
Expand All @@ -37,15 +38,13 @@

class TestAuthentication:
def test_invalid_token(self):
room_api = FishjamClient(fishjam_url=FISHJAM_URL, management_token="invalid")
room_api = FishjamClient(FISHJAM_ID, "invalid", fishjam_url=FISHJAM_URL)

with pytest.raises(UnauthorizedError):
room_api.create_room()

def test_valid_token(self):
room_api = FishjamClient(
fishjam_url=FISHJAM_URL, management_token=MANAGEMENT_TOKEN
)
room_api = FishjamClient(FISHJAM_ID, MANAGEMENT_TOKEN, fishjam_url=FISHJAM_URL)

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

@pytest.fixture
def room_api():
return FishjamClient(fishjam_url=FISHJAM_URL, management_token=MANAGEMENT_TOKEN)
return FishjamClient(FISHJAM_ID, MANAGEMENT_TOKEN, fishjam_url=FISHJAM_URL)


class TestCreateRoom:
Expand Down