diff --git a/video/src/vonage_video/_version.py b/video/src/vonage_video/_version.py index 19b4f1d6..96e3ce8d 100644 --- a/video/src/vonage_video/_version.py +++ b/video/src/vonage_video/_version.py @@ -1 +1 @@ -__version__ = '1.3.0' +__version__ = '1.4.0' diff --git a/video/src/vonage_video/models/audio_connector.py b/video/src/vonage_video/models/audio_connector.py index 1c490930..4c8fc060 100644 --- a/video/src/vonage_video/models/audio_connector.py +++ b/video/src/vonage_video/models/audio_connector.py @@ -12,12 +12,25 @@ class AudioConnectorWebSocket(BaseModel): streams (list[str]): Stream IDs to include. If not provided, all streams are included. headers (dict): The headers to send to your WebSocket server. audio_rate (AudioSampleRate): The audio sample rate in Hertz. + bidirectional (bool): Whether the websocket is bidirectional. """ uri: str streams: Optional[list[str]] = None headers: Optional[dict] = None audio_rate: Optional[AudioSampleRate] = Field(None, serialization_alias='audioRate') + bidirectional: Optional[bool] = Field( + None, description="Whether the websocket is bidirectional." + ) + + def model_dump(self, *args, **kwargs): + data = super().model_dump(*args, **kwargs) + if self.bidirectional is not True and 'bidirectional' in data: + del data['bidirectional'] + + if 'audioRate' in data and isinstance(data['audioRate'], AudioSampleRate): + data['audioRate'] = data['audioRate'].value + return data class AudioConnectorOptions(BaseModel): @@ -33,6 +46,12 @@ class AudioConnectorOptions(BaseModel): token: str websocket: AudioConnectorWebSocket + def model_dump(self, *args, **kwargs): + data = super().model_dump(*args, **kwargs) + if isinstance(self.websocket, AudioConnectorWebSocket): + data['websocket'] = self.websocket.model_dump(*args, **kwargs) + return data + class AudioConnectorData(BaseModel): """Class containing Audio Connector WebSocket ID and connection ID. diff --git a/video/tests/test_audio_connector.py b/video/tests/test_audio_connector.py index 48d52311..32ee4ad0 100644 --- a/video/tests/test_audio_connector.py +++ b/video/tests/test_audio_connector.py @@ -20,6 +20,18 @@ def test_audio_connector_options_model(): + options_no_flag = AudioConnectorOptions( + session_id='test_session_id', + token='test_token', + websocket=AudioConnectorWebSocket( + uri='test_uri', + streams=['test_stream_id'], + headers={'test_header': 'test_value'}, + audio_rate=AudioSampleRate.KHZ_16, + ), + ) + websocket_dict = options_no_flag.model_dump(by_alias=True)["websocket"] + assert "bidirectional" not in websocket_dict options = AudioConnectorOptions( session_id='test_session_id', token='test_token', @@ -28,10 +40,12 @@ def test_audio_connector_options_model(): streams=['test_stream_id'], headers={'test_header': 'test_value'}, audio_rate=AudioSampleRate.KHZ_16, + bidirectional=True, ), ) - assert options.model_dump(by_alias=True) == { + actual = options.model_dump(by_alias=True) + expected = { 'sessionId': 'test_session_id', 'token': 'test_token', 'websocket': { @@ -39,8 +53,10 @@ def test_audio_connector_options_model(): 'streams': ['test_stream_id'], 'headers': {'test_header': 'test_value'}, 'audioRate': 16000, + 'bidirectional': True, }, } + assert actual == expected @responses.activate