From 8a7cb2f9c9faa6eeaeb7c2d144b81d10748c85dc Mon Sep 17 00:00:00 2001 From: Tomasz Mazur <47872060+AHGIJMKLKKZNPJKQR@users.noreply.github.com> Date: Thu, 18 Dec 2025 13:37:11 +0100 Subject: [PATCH 1/2] Update openapi --- examples/room_manager/arguments.py | 1 - examples/room_manager/room_service.py | 9 ++-- examples/room_manager/routes.py | 4 +- fishjam/_openapi_client/models/__init__.py | 34 +++++++-------- ...ptions_agent_output.py => agent_output.py} | 42 +++++++------------ ...output_audio_format.py => audio_format.py} | 2 +- ...io_sample_rate.py => audio_sample_rate.py} | 2 +- .../models/peer_options_agent.py | 25 +++++------ .../peer_options_agent_subscribe_mode.py | 11 ----- .../models/peer_options_web_rtc.py | 34 +++++---------- .../peer_options_web_rtc_subscribe_mode.py | 11 ----- fishjam/_openapi_client/models/room_config.py | 22 +++++----- ...{room_config_room_type.py => room_type.py} | 2 +- fishjam/_openapi_client/models/track.py | 20 ++++----- ...k_metadata_type_0.py => track_metadata.py} | 10 ++--- ...m_config_video_codec.py => video_codec.py} | 2 +- ...eb_rtc_metadata.py => web_rtc_metadata.py} | 10 ++--- fishjam/api/_fishjam_client.py | 41 +++++++----------- fishjam/room/__init__.py | 6 +-- pyproject.toml | 2 +- tests/test_room_api.py | 14 +++---- uv.lock | 2 +- 22 files changed, 118 insertions(+), 188 deletions(-) rename fishjam/_openapi_client/models/{peer_options_agent_output.py => agent_output.py} (59%) rename fishjam/_openapi_client/models/{peer_options_agent_output_audio_format.py => audio_format.py} (74%) rename fishjam/_openapi_client/models/{peer_options_agent_output_audio_sample_rate.py => audio_sample_rate.py} (71%) delete mode 100644 fishjam/_openapi_client/models/peer_options_agent_subscribe_mode.py delete mode 100644 fishjam/_openapi_client/models/peer_options_web_rtc_subscribe_mode.py rename fishjam/_openapi_client/models/{room_config_room_type.py => room_type.py} (91%) rename fishjam/_openapi_client/models/{track_metadata_type_0.py => track_metadata.py} (84%) rename fishjam/_openapi_client/models/{room_config_video_codec.py => video_codec.py} (82%) rename fishjam/_openapi_client/models/{peer_options_web_rtc_metadata.py => web_rtc_metadata.py} (81%) diff --git a/examples/room_manager/arguments.py b/examples/room_manager/arguments.py index 4eea389..1b35b1c 100644 --- a/examples/room_manager/arguments.py +++ b/examples/room_manager/arguments.py @@ -7,7 +7,6 @@ def parse_arguments(): parser.add_argument("--port", type=int, default=5000) parser.add_argument("--peerless_purge_timeout", type=int, default=None) 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_id", type=str, required=True) parser.add_argument("--management_token", type=str, default="development") diff --git a/examples/room_manager/room_service.py b/examples/room_manager/room_service.py index 2278ead..92c8be5 100644 --- a/examples/room_manager/room_service.py +++ b/examples/room_manager/room_service.py @@ -6,7 +6,7 @@ import betterproto from fishjam import FishjamClient, PeerOptions, Room, RoomOptions -from fishjam._openapi_client.models import RoomConfigRoomType +from fishjam._openapi_client.models import RoomType from fishjam.events import ServerMessagePeerCrashed as PeerCrashed from fishjam.events import ServerMessagePeerDeleted as PeerDeleted from fishjam.events import ServerMessageRoomCrashed as RoomCrashed @@ -41,7 +41,7 @@ def get_peer_access( self, room_name: str, username: str, - room_type: RoomConfigRoomType | None, + room_type: RoomType | None, ) -> PeerAccess: room = self.__find_or_create_room(room_name, room_type) peer_access = self.peer_name_to_access.get(username) @@ -67,9 +67,7 @@ def handle_notification(self, notification: betterproto.Message): case _: pass - def __find_or_create_room( - self, room_name: str, room_type: RoomConfigRoomType | None - ) -> Room: + def __find_or_create_room(self, room_name: str, room_type: RoomType | None) -> Room: if room_name in self.room_name_to_room_id: self.logger.info("Room %s, already exists in the Fishjam", room_name) @@ -94,7 +92,6 @@ def __create_peer(self, room_name: str, peer_name: str) -> PeerAccess: room_id = self.room_name_to_room_id[room_name] options = PeerOptions( - enable_simulcast=self.config.enable_simulcast, metadata={"username": peer_name}, ) peer, token = self.fishjam_client.create_peer(room_id, options=options) diff --git a/examples/room_manager/routes.py b/examples/room_manager/routes.py index 3270a8d..074f75c 100644 --- a/examples/room_manager/routes.py +++ b/examples/room_manager/routes.py @@ -4,7 +4,7 @@ from room_service import RoomService from fishjam import receive_binary -from fishjam.room import RoomConfigRoomType +from fishjam.room import RoomType def setup_routes(app: Flask, room_service: RoomService): @@ -23,7 +23,7 @@ def get_room_query(): return abort(400) try: - room_type = RoomConfigRoomType(raw_room_type) if raw_room_type else None + room_type = RoomType(raw_room_type) if raw_room_type else None except ValueError: return abort(400) diff --git a/fishjam/_openapi_client/models/__init__.py b/fishjam/_openapi_client/models/__init__.py index 3d2421e..90e0b47 100644 --- a/fishjam/_openapi_client/models/__init__.py +++ b/fishjam/_openapi_client/models/__init__.py @@ -1,32 +1,26 @@ """Contains all the data models used in inputs/outputs""" from .add_peer_body import AddPeerBody +from .agent_output import AgentOutput +from .audio_format import AudioFormat +from .audio_sample_rate import AudioSampleRate from .error import Error from .peer import Peer from .peer_details_response import PeerDetailsResponse from .peer_details_response_data import PeerDetailsResponseData from .peer_metadata import PeerMetadata from .peer_options_agent import PeerOptionsAgent -from .peer_options_agent_output import PeerOptionsAgentOutput -from .peer_options_agent_output_audio_format import PeerOptionsAgentOutputAudioFormat -from .peer_options_agent_output_audio_sample_rate import ( - PeerOptionsAgentOutputAudioSampleRate, -) -from .peer_options_agent_subscribe_mode import PeerOptionsAgentSubscribeMode from .peer_options_web_rtc import PeerOptionsWebRTC -from .peer_options_web_rtc_metadata import PeerOptionsWebRTCMetadata -from .peer_options_web_rtc_subscribe_mode import PeerOptionsWebRTCSubscribeMode from .peer_refresh_token_response import PeerRefreshTokenResponse from .peer_refresh_token_response_data import PeerRefreshTokenResponseData from .peer_status import PeerStatus from .peer_type import PeerType from .room import Room from .room_config import RoomConfig -from .room_config_room_type import RoomConfigRoomType -from .room_config_video_codec import RoomConfigVideoCodec from .room_create_details_response import RoomCreateDetailsResponse from .room_create_details_response_data import RoomCreateDetailsResponseData from .room_details_response import RoomDetailsResponse +from .room_type import RoomType from .rooms_listing_response import RoomsListingResponse from .stream import Stream from .stream_config import StreamConfig @@ -38,39 +32,37 @@ from .subscribe_tracks_body import SubscribeTracksBody from .subscriptions import Subscriptions from .track import Track -from .track_metadata_type_0 import TrackMetadataType0 +from .track_metadata import TrackMetadata from .track_type import TrackType +from .video_codec import VideoCodec from .viewer import Viewer from .viewer_status import ViewerStatus from .viewer_token import ViewerToken +from .web_rtc_metadata import WebRTCMetadata __all__ = ( "AddPeerBody", + "AgentOutput", + "AudioFormat", + "AudioSampleRate", "Error", "Peer", "PeerDetailsResponse", "PeerDetailsResponseData", "PeerMetadata", "PeerOptionsAgent", - "PeerOptionsAgentOutput", - "PeerOptionsAgentOutputAudioFormat", - "PeerOptionsAgentOutputAudioSampleRate", - "PeerOptionsAgentSubscribeMode", "PeerOptionsWebRTC", - "PeerOptionsWebRTCMetadata", - "PeerOptionsWebRTCSubscribeMode", "PeerRefreshTokenResponse", "PeerRefreshTokenResponseData", "PeerStatus", "PeerType", "Room", "RoomConfig", - "RoomConfigRoomType", - "RoomConfigVideoCodec", "RoomCreateDetailsResponse", "RoomCreateDetailsResponseData", "RoomDetailsResponse", "RoomsListingResponse", + "RoomType", "Stream", "StreamConfig", "Streamer", @@ -81,9 +73,11 @@ "SubscribeTracksBody", "Subscriptions", "Track", - "TrackMetadataType0", + "TrackMetadata", "TrackType", + "VideoCodec", "Viewer", "ViewerStatus", "ViewerToken", + "WebRTCMetadata", ) diff --git a/fishjam/_openapi_client/models/peer_options_agent_output.py b/fishjam/_openapi_client/models/agent_output.py similarity index 59% rename from fishjam/_openapi_client/models/peer_options_agent_output.py rename to fishjam/_openapi_client/models/agent_output.py index 1d4faf1..c32db25 100644 --- a/fishjam/_openapi_client/models/peer_options_agent_output.py +++ b/fishjam/_openapi_client/models/agent_output.py @@ -8,34 +8,24 @@ from attrs import define as _attrs_define from attrs import field as _attrs_field -from ..models.peer_options_agent_output_audio_format import ( - PeerOptionsAgentOutputAudioFormat, -) -from ..models.peer_options_agent_output_audio_sample_rate import ( - PeerOptionsAgentOutputAudioSampleRate, -) +from ..models.audio_format import AudioFormat +from ..models.audio_sample_rate import AudioSampleRate from ..types import UNSET, Unset -T = TypeVar("T", bound="PeerOptionsAgentOutput") +T = TypeVar("T", bound="AgentOutput") @_attrs_define -class PeerOptionsAgentOutput: +class AgentOutput: """Output audio options Attributes: - audio_format (Union[Unset, PeerOptionsAgentOutputAudioFormat]): The format of the output audio Default: - PeerOptionsAgentOutputAudioFormat.PCM16. Example: pcm16. - audio_sample_rate (Union[Unset, PeerOptionsAgentOutputAudioSampleRate]): The sample rate of the output audio - Default: PeerOptionsAgentOutputAudioSampleRate.VALUE_16000. Example: 16000. + audio_format (Union[Unset, AudioFormat]): The format of the output audio Example: pcm16. + audio_sample_rate (Union[Unset, AudioSampleRate]): The sample rate of the output audio Example: 16000. """ - audio_format: Union[Unset, PeerOptionsAgentOutputAudioFormat] = ( - PeerOptionsAgentOutputAudioFormat.PCM16 - ) - audio_sample_rate: Union[Unset, PeerOptionsAgentOutputAudioSampleRate] = ( - PeerOptionsAgentOutputAudioSampleRate.VALUE_16000 - ) + audio_format: Union[Unset, AudioFormat] = UNSET + audio_sample_rate: Union[Unset, AudioSampleRate] = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: @@ -61,28 +51,26 @@ def to_dict(self) -> dict[str, Any]: def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) _audio_format = d.pop("audioFormat", UNSET) - audio_format: Union[Unset, PeerOptionsAgentOutputAudioFormat] + audio_format: Union[Unset, AudioFormat] if isinstance(_audio_format, Unset): audio_format = UNSET else: - audio_format = PeerOptionsAgentOutputAudioFormat(_audio_format) + audio_format = AudioFormat(_audio_format) _audio_sample_rate = d.pop("audioSampleRate", UNSET) - audio_sample_rate: Union[Unset, PeerOptionsAgentOutputAudioSampleRate] + audio_sample_rate: Union[Unset, AudioSampleRate] if isinstance(_audio_sample_rate, Unset): audio_sample_rate = UNSET else: - audio_sample_rate = PeerOptionsAgentOutputAudioSampleRate( - _audio_sample_rate - ) + audio_sample_rate = AudioSampleRate(_audio_sample_rate) - peer_options_agent_output = cls( + agent_output = cls( audio_format=audio_format, audio_sample_rate=audio_sample_rate, ) - peer_options_agent_output.additional_properties = d - return peer_options_agent_output + agent_output.additional_properties = d + return agent_output @property def additional_keys(self) -> list[str]: diff --git a/fishjam/_openapi_client/models/peer_options_agent_output_audio_format.py b/fishjam/_openapi_client/models/audio_format.py similarity index 74% rename from fishjam/_openapi_client/models/peer_options_agent_output_audio_format.py rename to fishjam/_openapi_client/models/audio_format.py index 46cef67..61de341 100644 --- a/fishjam/_openapi_client/models/peer_options_agent_output_audio_format.py +++ b/fishjam/_openapi_client/models/audio_format.py @@ -1,7 +1,7 @@ from enum import Enum -class PeerOptionsAgentOutputAudioFormat(str, Enum): +class AudioFormat(str, Enum): """The format of the output audio""" PCM16 = "pcm16" diff --git a/fishjam/_openapi_client/models/peer_options_agent_output_audio_sample_rate.py b/fishjam/_openapi_client/models/audio_sample_rate.py similarity index 71% rename from fishjam/_openapi_client/models/peer_options_agent_output_audio_sample_rate.py rename to fishjam/_openapi_client/models/audio_sample_rate.py index ee4ff98..84c4646 100644 --- a/fishjam/_openapi_client/models/peer_options_agent_output_audio_sample_rate.py +++ b/fishjam/_openapi_client/models/audio_sample_rate.py @@ -1,7 +1,7 @@ from enum import IntEnum -class PeerOptionsAgentOutputAudioSampleRate(IntEnum): +class AudioSampleRate(IntEnum): VALUE_16000 = 16000 VALUE_24000 = 24000 diff --git a/fishjam/_openapi_client/models/peer_options_agent.py b/fishjam/_openapi_client/models/peer_options_agent.py index dd02dc8..713e40f 100644 --- a/fishjam/_openapi_client/models/peer_options_agent.py +++ b/fishjam/_openapi_client/models/peer_options_agent.py @@ -9,11 +9,11 @@ from attrs import define as _attrs_define from attrs import field as _attrs_field -from ..models.peer_options_agent_subscribe_mode import PeerOptionsAgentSubscribeMode +from ..models.subscribe_mode import SubscribeMode from ..types import UNSET, Unset if TYPE_CHECKING: - from ..models.peer_options_agent_output import PeerOptionsAgentOutput + from ..models.agent_output import AgentOutput T = TypeVar("T", bound="PeerOptionsAgent") @@ -24,15 +24,12 @@ class PeerOptionsAgent: """Options specific to the Agent peer Attributes: - output (Union[Unset, PeerOptionsAgentOutput]): Output audio options - subscribe_mode (Union[Unset, PeerOptionsAgentSubscribeMode]): Configuration of peer's subscribing policy - Default: PeerOptionsAgentSubscribeMode.AUTO. + output (Union[Unset, AgentOutput]): Output audio options + subscribe_mode (Union[Unset, SubscribeMode]): Configuration of peer's subscribing policy """ - output: Union[Unset, "PeerOptionsAgentOutput"] = UNSET - subscribe_mode: Union[Unset, PeerOptionsAgentSubscribeMode] = ( - PeerOptionsAgentSubscribeMode.AUTO - ) + output: Union[Unset, "AgentOutput"] = UNSET + subscribe_mode: Union[Unset, SubscribeMode] = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: @@ -56,22 +53,22 @@ def to_dict(self) -> dict[str, Any]: @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: - from ..models.peer_options_agent_output import PeerOptionsAgentOutput + from ..models.agent_output import AgentOutput d = dict(src_dict) _output = d.pop("output", UNSET) - output: Union[Unset, PeerOptionsAgentOutput] + output: Union[Unset, AgentOutput] if isinstance(_output, Unset): output = UNSET else: - output = PeerOptionsAgentOutput.from_dict(_output) + output = AgentOutput.from_dict(_output) _subscribe_mode = d.pop("subscribeMode", UNSET) - subscribe_mode: Union[Unset, PeerOptionsAgentSubscribeMode] + subscribe_mode: Union[Unset, SubscribeMode] if isinstance(_subscribe_mode, Unset): subscribe_mode = UNSET else: - subscribe_mode = PeerOptionsAgentSubscribeMode(_subscribe_mode) + subscribe_mode = SubscribeMode(_subscribe_mode) peer_options_agent = cls( output=output, diff --git a/fishjam/_openapi_client/models/peer_options_agent_subscribe_mode.py b/fishjam/_openapi_client/models/peer_options_agent_subscribe_mode.py deleted file mode 100644 index e0515c5..0000000 --- a/fishjam/_openapi_client/models/peer_options_agent_subscribe_mode.py +++ /dev/null @@ -1,11 +0,0 @@ -from enum import Enum - - -class PeerOptionsAgentSubscribeMode(str, Enum): - """Configuration of peer's subscribing policy""" - - AUTO = "auto" - MANUAL = "manual" - - def __str__(self) -> str: - return str(self.value) diff --git a/fishjam/_openapi_client/models/peer_options_web_rtc.py b/fishjam/_openapi_client/models/peer_options_web_rtc.py index 617602f..c3f4938 100644 --- a/fishjam/_openapi_client/models/peer_options_web_rtc.py +++ b/fishjam/_openapi_client/models/peer_options_web_rtc.py @@ -9,11 +9,11 @@ from attrs import define as _attrs_define from attrs import field as _attrs_field -from ..models.peer_options_web_rtc_subscribe_mode import PeerOptionsWebRTCSubscribeMode +from ..models.subscribe_mode import SubscribeMode from ..types import UNSET, Unset if TYPE_CHECKING: - from ..models.peer_options_web_rtc_metadata import PeerOptionsWebRTCMetadata + from ..models.web_rtc_metadata import WebRTCMetadata T = TypeVar("T", bound="PeerOptionsWebRTC") @@ -24,22 +24,15 @@ class PeerOptionsWebRTC: """Options specific to the WebRTC peer Attributes: - enable_simulcast (Union[Unset, bool]): Enables the peer to use simulcast Default: True. - metadata (Union[Unset, PeerOptionsWebRTCMetadata]): Custom peer metadata - subscribe_mode (Union[Unset, PeerOptionsWebRTCSubscribeMode]): Configuration of peer's subscribing policy - Default: PeerOptionsWebRTCSubscribeMode.AUTO. + metadata (Union[Unset, WebRTCMetadata]): Custom peer metadata + subscribe_mode (Union[Unset, SubscribeMode]): Configuration of peer's subscribing policy """ - enable_simulcast: Union[Unset, bool] = True - metadata: Union[Unset, "PeerOptionsWebRTCMetadata"] = UNSET - subscribe_mode: Union[Unset, PeerOptionsWebRTCSubscribeMode] = ( - PeerOptionsWebRTCSubscribeMode.AUTO - ) + metadata: Union[Unset, "WebRTCMetadata"] = UNSET + subscribe_mode: Union[Unset, SubscribeMode] = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: - enable_simulcast = self.enable_simulcast - metadata: Union[Unset, dict[str, Any]] = UNSET if not isinstance(self.metadata, Unset): metadata = self.metadata.to_dict() @@ -51,8 +44,6 @@ def to_dict(self) -> dict[str, Any]: field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) field_dict.update({}) - if enable_simulcast is not UNSET: - field_dict["enableSimulcast"] = enable_simulcast if metadata is not UNSET: field_dict["metadata"] = metadata if subscribe_mode is not UNSET: @@ -62,27 +53,24 @@ def to_dict(self) -> dict[str, Any]: @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: - from ..models.peer_options_web_rtc_metadata import PeerOptionsWebRTCMetadata + from ..models.web_rtc_metadata import WebRTCMetadata d = dict(src_dict) - enable_simulcast = d.pop("enableSimulcast", UNSET) - _metadata = d.pop("metadata", UNSET) - metadata: Union[Unset, PeerOptionsWebRTCMetadata] + metadata: Union[Unset, WebRTCMetadata] if isinstance(_metadata, Unset): metadata = UNSET else: - metadata = PeerOptionsWebRTCMetadata.from_dict(_metadata) + metadata = WebRTCMetadata.from_dict(_metadata) _subscribe_mode = d.pop("subscribeMode", UNSET) - subscribe_mode: Union[Unset, PeerOptionsWebRTCSubscribeMode] + subscribe_mode: Union[Unset, SubscribeMode] if isinstance(_subscribe_mode, Unset): subscribe_mode = UNSET else: - subscribe_mode = PeerOptionsWebRTCSubscribeMode(_subscribe_mode) + subscribe_mode = SubscribeMode(_subscribe_mode) peer_options_web_rtc = cls( - enable_simulcast=enable_simulcast, metadata=metadata, subscribe_mode=subscribe_mode, ) diff --git a/fishjam/_openapi_client/models/peer_options_web_rtc_subscribe_mode.py b/fishjam/_openapi_client/models/peer_options_web_rtc_subscribe_mode.py deleted file mode 100644 index 11bc286..0000000 --- a/fishjam/_openapi_client/models/peer_options_web_rtc_subscribe_mode.py +++ /dev/null @@ -1,11 +0,0 @@ -from enum import Enum - - -class PeerOptionsWebRTCSubscribeMode(str, Enum): - """Configuration of peer's subscribing policy""" - - AUTO = "auto" - MANUAL = "manual" - - def __str__(self) -> str: - return str(self.value) diff --git a/fishjam/_openapi_client/models/room_config.py b/fishjam/_openapi_client/models/room_config.py index ac34a70..8ba15a7 100644 --- a/fishjam/_openapi_client/models/room_config.py +++ b/fishjam/_openapi_client/models/room_config.py @@ -9,8 +9,8 @@ from attrs import define as _attrs_define from attrs import field as _attrs_field -from ..models.room_config_room_type import RoomConfigRoomType -from ..models.room_config_video_codec import RoomConfigVideoCodec +from ..models.room_type import RoomType +from ..models.video_codec import VideoCodec from ..types import UNSET, Unset T = TypeVar("T", bound="RoomConfig") @@ -23,18 +23,16 @@ class RoomConfig: Attributes: max_peers (Union[None, Unset, int]): Maximum amount of peers allowed into the room Example: 10. public (Union[Unset, bool]): True if livestream viewers can omit specifying a token. Default: False. - room_type (Union[Unset, RoomConfigRoomType]): The use-case of the room. If not provided, this defaults to - conference. Default: RoomConfigRoomType.CONFERENCE. - video_codec (Union[Unset, RoomConfigVideoCodec]): Enforces video codec for each peer in the room Default: - RoomConfigVideoCodec.H264. + room_type (Union[Unset, RoomType]): The use-case of the room. If not provided, this defaults to conference. + video_codec (Union[Unset, VideoCodec]): Enforces video codec for each peer in the room webhook_url (Union[None, Unset, str]): URL where Fishjam notifications will be sent Example: https://backend.address.com/fishjam-notifications-endpoint. """ max_peers: Union[None, Unset, int] = UNSET public: Union[Unset, bool] = False - room_type: Union[Unset, RoomConfigRoomType] = RoomConfigRoomType.CONFERENCE - video_codec: Union[Unset, RoomConfigVideoCodec] = RoomConfigVideoCodec.H264 + room_type: Union[Unset, RoomType] = UNSET + video_codec: Union[Unset, VideoCodec] = UNSET webhook_url: Union[None, Unset, str] = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) @@ -93,18 +91,18 @@ def _parse_max_peers(data: object) -> Union[None, Unset, int]: public = d.pop("public", UNSET) _room_type = d.pop("roomType", UNSET) - room_type: Union[Unset, RoomConfigRoomType] + room_type: Union[Unset, RoomType] if isinstance(_room_type, Unset): room_type = UNSET else: - room_type = RoomConfigRoomType(_room_type) + room_type = RoomType(_room_type) _video_codec = d.pop("videoCodec", UNSET) - video_codec: Union[Unset, RoomConfigVideoCodec] + video_codec: Union[Unset, VideoCodec] if isinstance(_video_codec, Unset): video_codec = UNSET else: - video_codec = RoomConfigVideoCodec(_video_codec) + video_codec = VideoCodec(_video_codec) def _parse_webhook_url(data: object) -> Union[None, Unset, str]: if data is None: diff --git a/fishjam/_openapi_client/models/room_config_room_type.py b/fishjam/_openapi_client/models/room_type.py similarity index 91% rename from fishjam/_openapi_client/models/room_config_room_type.py rename to fishjam/_openapi_client/models/room_type.py index 2465e6b..2d57109 100644 --- a/fishjam/_openapi_client/models/room_config_room_type.py +++ b/fishjam/_openapi_client/models/room_type.py @@ -1,7 +1,7 @@ from enum import Enum -class RoomConfigRoomType(str, Enum): +class RoomType(str, Enum): """The use-case of the room. If not provided, this defaults to conference.""" AUDIO_ONLY = "audio_only" diff --git a/fishjam/_openapi_client/models/track.py b/fishjam/_openapi_client/models/track.py index d6d2d3a..221d0df 100644 --- a/fishjam/_openapi_client/models/track.py +++ b/fishjam/_openapi_client/models/track.py @@ -14,7 +14,7 @@ from ..types import UNSET, Unset if TYPE_CHECKING: - from ..models.track_metadata_type_0 import TrackMetadataType0 + from ..models.track_metadata import TrackMetadata T = TypeVar("T", bound="Track") @@ -26,24 +26,24 @@ class Track: Attributes: id (Union[Unset, str]): Assigned track id Example: 8dbd2e6b-a1e7-4670-95a2-0262aa6c6321. - metadata (Union['TrackMetadataType0', None, Unset]): Example: {'source': 'camera'}. + metadata (Union['TrackMetadata', None, Unset]): Example: {'source': 'camera'}. type_ (Union[Unset, TrackType]): """ id: Union[Unset, str] = UNSET - metadata: Union["TrackMetadataType0", None, Unset] = UNSET + metadata: Union["TrackMetadata", None, Unset] = UNSET type_: Union[Unset, TrackType] = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: - from ..models.track_metadata_type_0 import TrackMetadataType0 + from ..models.track_metadata import TrackMetadata id = self.id metadata: Union[None, Unset, dict[str, Any]] if isinstance(self.metadata, Unset): metadata = UNSET - elif isinstance(self.metadata, TrackMetadataType0): + elif isinstance(self.metadata, TrackMetadata): metadata = self.metadata.to_dict() else: metadata = self.metadata @@ -66,12 +66,12 @@ def to_dict(self) -> dict[str, Any]: @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: - from ..models.track_metadata_type_0 import TrackMetadataType0 + from ..models.track_metadata import TrackMetadata d = dict(src_dict) id = d.pop("id", UNSET) - def _parse_metadata(data: object) -> Union["TrackMetadataType0", None, Unset]: + def _parse_metadata(data: object) -> Union["TrackMetadata", None, Unset]: if data is None: return data if isinstance(data, Unset): @@ -79,12 +79,12 @@ def _parse_metadata(data: object) -> Union["TrackMetadataType0", None, Unset]: try: if not isinstance(data, dict): raise TypeError() - metadata_type_0 = TrackMetadataType0.from_dict(data) + componentsschemas_track_metadata_type_0 = TrackMetadata.from_dict(data) - return metadata_type_0 + return componentsschemas_track_metadata_type_0 except: # noqa: E722 pass - return cast(Union["TrackMetadataType0", None, Unset], data) + return cast(Union["TrackMetadata", None, Unset], data) metadata = _parse_metadata(d.pop("metadata", UNSET)) diff --git a/fishjam/_openapi_client/models/track_metadata_type_0.py b/fishjam/_openapi_client/models/track_metadata.py similarity index 84% rename from fishjam/_openapi_client/models/track_metadata_type_0.py rename to fishjam/_openapi_client/models/track_metadata.py index f768ce2..f0306b3 100644 --- a/fishjam/_openapi_client/models/track_metadata_type_0.py +++ b/fishjam/_openapi_client/models/track_metadata.py @@ -4,11 +4,11 @@ from attrs import define as _attrs_define from attrs import field as _attrs_field -T = TypeVar("T", bound="TrackMetadataType0") +T = TypeVar("T", bound="TrackMetadata") @_attrs_define -class TrackMetadataType0: +class TrackMetadata: """ Example: {'source': 'camera'} @@ -26,10 +26,10 @@ def to_dict(self) -> dict[str, Any]: @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) - track_metadata_type_0 = cls() + track_metadata = cls() - track_metadata_type_0.additional_properties = d - return track_metadata_type_0 + track_metadata.additional_properties = d + return track_metadata @property def additional_keys(self) -> list[str]: diff --git a/fishjam/_openapi_client/models/room_config_video_codec.py b/fishjam/_openapi_client/models/video_codec.py similarity index 82% rename from fishjam/_openapi_client/models/room_config_video_codec.py rename to fishjam/_openapi_client/models/video_codec.py index 972e4dd..0bb3527 100644 --- a/fishjam/_openapi_client/models/room_config_video_codec.py +++ b/fishjam/_openapi_client/models/video_codec.py @@ -1,7 +1,7 @@ from enum import Enum -class RoomConfigVideoCodec(str, Enum): +class VideoCodec(str, Enum): """Enforces video codec for each peer in the room""" H264 = "h264" diff --git a/fishjam/_openapi_client/models/peer_options_web_rtc_metadata.py b/fishjam/_openapi_client/models/web_rtc_metadata.py similarity index 81% rename from fishjam/_openapi_client/models/peer_options_web_rtc_metadata.py rename to fishjam/_openapi_client/models/web_rtc_metadata.py index e13be08..4e234fc 100644 --- a/fishjam/_openapi_client/models/peer_options_web_rtc_metadata.py +++ b/fishjam/_openapi_client/models/web_rtc_metadata.py @@ -4,11 +4,11 @@ from attrs import define as _attrs_define from attrs import field as _attrs_field -T = TypeVar("T", bound="PeerOptionsWebRTCMetadata") +T = TypeVar("T", bound="WebRTCMetadata") @_attrs_define -class PeerOptionsWebRTCMetadata: +class WebRTCMetadata: """Custom peer metadata""" additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) @@ -22,10 +22,10 @@ def to_dict(self) -> dict[str, Any]: @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) - peer_options_web_rtc_metadata = cls() + web_rtc_metadata = cls() - peer_options_web_rtc_metadata.additional_properties = d - return peer_options_web_rtc_metadata + web_rtc_metadata.additional_properties = d + return web_rtc_metadata @property def additional_keys(self) -> list[str]: diff --git a/fishjam/api/_fishjam_client.py b/fishjam/api/_fishjam_client.py index 1dc44f2..be0c021 100644 --- a/fishjam/api/_fishjam_client.py +++ b/fishjam/api/_fishjam_client.py @@ -20,27 +20,26 @@ ) from fishjam._openapi_client.models import ( AddPeerBody, + AgentOutput, + AudioFormat, + AudioSampleRate, Peer, PeerDetailsResponse, PeerOptionsAgent, - PeerOptionsAgentOutput, - PeerOptionsAgentOutputAudioFormat, - PeerOptionsAgentOutputAudioSampleRate, - PeerOptionsAgentSubscribeMode, PeerOptionsWebRTC, - PeerOptionsWebRTCMetadata, - PeerOptionsWebRTCSubscribeMode, PeerRefreshTokenResponse, PeerType, RoomConfig, - RoomConfigRoomType, - RoomConfigVideoCodec, RoomCreateDetailsResponse, RoomDetailsResponse, RoomsListingResponse, + RoomType, StreamerToken, + SubscribeMode, SubscribeTracksBody, + VideoCodec, ViewerToken, + WebRTCMetadata, ) from fishjam._openapi_client.types import UNSET from fishjam.agent import Agent @@ -102,13 +101,10 @@ class PeerOptions: """Options specific to a WebRTC Peer. Attributes: - enable_simulcast: Enables the peer to use simulcast. metadata: Peer metadata. subscribe_mode: Configuration of peer's subscribing policy. """ - enable_simulcast: bool = True - """Enables the peer to use simulcast""" metadata: dict[str, Any] | None = None """Peer metadata""" subscribe_mode: Literal["auto", "manual"] = "auto" @@ -178,9 +174,8 @@ def create_peer( peer_metadata = self.__parse_peer_metadata(options.metadata) peer_options = PeerOptionsWebRTC( - enable_simulcast=options.enable_simulcast, metadata=peer_metadata, - subscribe_mode=PeerOptionsWebRTCSubscribeMode(options.subscribe_mode), + subscribe_mode=SubscribeMode(options.subscribe_mode), ) body = AddPeerBody(type_=PeerType.WEBRTC, options=peer_options) @@ -206,15 +201,11 @@ def create_agent(self, room_id: str, options: AgentOptions | None = None): body = AddPeerBody( type_=PeerType.AGENT, options=PeerOptionsAgent( - output=PeerOptionsAgentOutput( - audio_format=PeerOptionsAgentOutputAudioFormat( - options.output.audio_format - ), - audio_sample_rate=PeerOptionsAgentOutputAudioSampleRate( - options.output.audio_sample_rate - ), + output=AgentOutput( + audio_format=AudioFormat(options.output.audio_format), + audio_sample_rate=AudioSampleRate(options.output.audio_sample_rate), ), - subscribe_mode=PeerOptionsAgentSubscribeMode(options.subscribe_mode), + subscribe_mode=SubscribeMode(options.subscribe_mode), ), ) @@ -239,13 +230,13 @@ def create_room(self, options: RoomOptions | None = None) -> Room: if options.video_codec is None: codec = UNSET else: - codec = RoomConfigVideoCodec(options.video_codec) + codec = VideoCodec(options.video_codec) config = RoomConfig( max_peers=options.max_peers, video_codec=codec, webhook_url=options.webhook_url, - room_type=RoomConfigRoomType(options.room_type), + room_type=RoomType(options.room_type), public=options.public, ) @@ -377,8 +368,8 @@ def subscribe_tracks(self, room_id: str, peer_id: str, track_ids: list[str]): body=SubscribeTracksBody(track_ids=track_ids), ) - def __parse_peer_metadata(self, metadata: dict | None) -> PeerOptionsWebRTCMetadata: - peer_metadata = PeerOptionsWebRTCMetadata() + def __parse_peer_metadata(self, metadata: dict | None) -> WebRTCMetadata: + peer_metadata = WebRTCMetadata() if not metadata: return peer_metadata diff --git a/fishjam/room/__init__.py b/fishjam/room/__init__.py index c9b4fe5..fb0a75f 100644 --- a/fishjam/room/__init__.py +++ b/fishjam/room/__init__.py @@ -1,7 +1,7 @@ from fishjam._openapi_client.models import ( RoomConfig, - RoomConfigRoomType, - RoomConfigVideoCodec, + RoomType, + VideoCodec, ) -__all__ = ["RoomConfig", "RoomConfigVideoCodec", "RoomConfigRoomType"] +__all__ = ["RoomConfig", "VideoCodec", "RoomType"] diff --git a/pyproject.toml b/pyproject.toml index 36a9207..1f8d304 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "fishjam-server-sdk" -version = "0.23.0" +version = "0.24.0" description = "Python server SDK for the Fishjam" authors = [{ name = "Fishjam Team", email = "contact@fishjam.io" }] requires-python = ">=3.11" diff --git a/tests/test_room_api.py b/tests/test_room_api.py index f64fc1a..d82a864 100644 --- a/tests/test_room_api.py +++ b/tests/test_room_api.py @@ -23,8 +23,8 @@ ) from fishjam.room import ( RoomConfig, - RoomConfigRoomType, - RoomConfigVideoCodec, + RoomType, + VideoCodec, ) HOST = "fishjam" if os.getenv("DOCKER_TEST") == "TRUE" else "localhost" @@ -66,7 +66,7 @@ def test_no_params(self, room_api: FishjamClient): config = RoomConfig( max_peers=None, webhook_url=None, - room_type=RoomConfigRoomType(CONFERENCE), + room_type=RoomType(CONFERENCE), ) assert room == Room( @@ -87,9 +87,9 @@ def test_valid_params(self, room_api): config = RoomConfig( max_peers=MAX_PEERS, - video_codec=RoomConfigVideoCodec(CODEC_H264), + video_codec=VideoCodec(CODEC_H264), webhook_url=None, - room_type=RoomConfigRoomType(AUDIO_ONLY), + room_type=RoomType(AUDIO_ONLY), ) assert room == Room( @@ -144,7 +144,7 @@ def test_valid(self, room_api: FishjamClient): config = RoomConfig( max_peers=None, webhook_url=None, - room_type=RoomConfigRoomType(CONFERENCE), + room_type=RoomType(CONFERENCE), ) assert Room( @@ -186,7 +186,7 @@ def _assert_peer_created( assert peer in room.peers def test_with_specified_options(self, room_api: FishjamClient): - options = PeerOptions(enable_simulcast=True) + options = PeerOptions() room = room_api.create_room() peer, _token = room_api.create_peer(room.id, options=options) diff --git a/uv.lock b/uv.lock index ded7828..92efb07 100644 --- a/uv.lock +++ b/uv.lock @@ -322,7 +322,7 @@ wheels = [ [[package]] name = "fishjam-server-sdk" -version = "0.23.0" +version = "0.24.0" source = { editable = "." } dependencies = [ { name = "aenum" }, From b40f7eb7ebcad1f355aaf42e9cf1607f30afab01 Mon Sep 17 00:00:00 2001 From: Tomasz Mazur <47872060+AHGIJMKLKKZNPJKQR@users.noreply.github.com> Date: Thu, 18 Dec 2025 13:43:09 +0100 Subject: [PATCH 2/2] Fix tests --- tests/test_room_api.py | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/tests/test_room_api.py b/tests/test_room_api.py index d82a864..b9f31e2 100644 --- a/tests/test_room_api.py +++ b/tests/test_room_api.py @@ -67,6 +67,7 @@ def test_no_params(self, room_api: FishjamClient): max_peers=None, webhook_url=None, room_type=RoomType(CONFERENCE), + video_codec=VideoCodec.H264, ) assert room == Room( @@ -77,7 +78,7 @@ def test_no_params(self, room_api: FishjamClient): assert room in room_api.get_all_rooms() - def test_valid_params(self, room_api): + def test_valid_params(self, room_api: FishjamClient): options = RoomOptions( max_peers=MAX_PEERS, video_codec=CODEC_H264, @@ -87,7 +88,7 @@ def test_valid_params(self, room_api): config = RoomConfig( max_peers=MAX_PEERS, - video_codec=VideoCodec(CODEC_H264), + video_codec=VideoCodec.H264, webhook_url=None, room_type=RoomType(AUDIO_ONLY), ) @@ -100,36 +101,37 @@ def test_valid_params(self, room_api): assert room in room_api.get_all_rooms() - def test_invalid_max_peers(self, room_api): + def test_invalid_max_peers(self, room_api: FishjamClient): options = RoomOptions(max_peers="10") with pytest.raises(BadRequestError): room_api.create_room(options) - def test_invalid_video_codec(self, room_api): + def test_invalid_video_codec(self, room_api: FishjamClient): with pytest.raises(ValueError): options = RoomOptions(video_codec="h420") room_api.create_room(options) class TestDeleteRoom: - def test_valid(self, room_api): + def test_valid(self, room_api: FishjamClient): room = room_api.create_room() room_api.delete_room(room.id) - assert room not in room_api.get_all_rooms() + for r in room_api.get_all_rooms(): + assert room.id != r.id - def test_invalid_id(self, room_api): + def test_invalid_id(self, room_api: FishjamClient): with pytest.raises(BadRequestError): room_api.delete_room("invalid_id") - def test_id_not_found(self, room_api): + def test_id_not_found(self, room_api: FishjamClient): with pytest.raises(NotFoundError): room_api.delete_room("515c8b52-168b-4b39-a227-4d6b4f102a56") class TestGetAllRooms: - def test_valid(self, room_api): + def test_valid(self, room_api: FishjamClient): room = room_api.create_room() all_rooms = room_api.get_all_rooms() @@ -145,6 +147,7 @@ def test_valid(self, room_api: FishjamClient): max_peers=None, webhook_url=None, room_type=RoomType(CONFERENCE), + video_codec=VideoCodec.H264, ) assert Room( @@ -157,7 +160,7 @@ def test_invalid(self, room_api: FishjamClient): with pytest.raises(NotFoundError): room_api.get_room("invalid_id") - def test_id_not_found(self, room_api): + def test_id_not_found(self, room_api: FishjamClient): with pytest.raises(NotFoundError): room_api.get_room("515c8b52-168b-4b39-a227-4d6b4f102a56")