Skip to content

Commit 72c77e3

Browse files
committed
feat(video): Add bidirectional websocket flag
1 parent 54fa90d commit 72c77e3

File tree

3 files changed

+37
-2
lines changed

3 files changed

+37
-2
lines changed

video/src/vonage_video/_version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
__version__ = '1.3.0'
1+
__version__ = '1.4.0'

video/src/vonage_video/models/audio_connector.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,25 @@ class AudioConnectorWebSocket(BaseModel):
1212
streams (list[str]): Stream IDs to include. If not provided, all streams are included.
1313
headers (dict): The headers to send to your WebSocket server.
1414
audio_rate (AudioSampleRate): The audio sample rate in Hertz.
15+
bidirectional (bool): Whether the websocket is bidirectional.
1516
"""
1617

1718
uri: str
1819
streams: Optional[list[str]] = None
1920
headers: Optional[dict] = None
2021
audio_rate: Optional[AudioSampleRate] = Field(None, serialization_alias='audioRate')
22+
bidirectional: Optional[bool] = Field(
23+
None, description="Whether the websocket is bidirectional."
24+
)
25+
26+
def model_dump(self, *args, **kwargs):
27+
data = super().model_dump(*args, **kwargs)
28+
if self.bidirectional is not True and 'bidirectional' in data:
29+
del data['bidirectional']
30+
31+
if 'audioRate' in data and isinstance(data['audioRate'], AudioSampleRate):
32+
data['audioRate'] = data['audioRate'].value
33+
return data
2134

2235

2336
class AudioConnectorOptions(BaseModel):
@@ -33,6 +46,12 @@ class AudioConnectorOptions(BaseModel):
3346
token: str
3447
websocket: AudioConnectorWebSocket
3548

49+
def model_dump(self, *args, **kwargs):
50+
data = super().model_dump(*args, **kwargs)
51+
if isinstance(self.websocket, AudioConnectorWebSocket):
52+
data['websocket'] = self.websocket.model_dump(*args, **kwargs)
53+
return data
54+
3655

3756
class AudioConnectorData(BaseModel):
3857
"""Class containing Audio Connector WebSocket ID and connection ID.

video/tests/test_audio_connector.py

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,18 @@
2020

2121

2222
def test_audio_connector_options_model():
23+
options_no_flag = AudioConnectorOptions(
24+
session_id='test_session_id',
25+
token='test_token',
26+
websocket=AudioConnectorWebSocket(
27+
uri='test_uri',
28+
streams=['test_stream_id'],
29+
headers={'test_header': 'test_value'},
30+
audio_rate=AudioSampleRate.KHZ_16,
31+
),
32+
)
33+
websocket_dict = options_no_flag.model_dump(by_alias=True)["websocket"]
34+
assert "bidirectional" not in websocket_dict
2335
options = AudioConnectorOptions(
2436
session_id='test_session_id',
2537
token='test_token',
@@ -28,19 +40,23 @@ def test_audio_connector_options_model():
2840
streams=['test_stream_id'],
2941
headers={'test_header': 'test_value'},
3042
audio_rate=AudioSampleRate.KHZ_16,
43+
bidirectional=True,
3144
),
3245
)
3346

34-
assert options.model_dump(by_alias=True) == {
47+
actual = options.model_dump(by_alias=True)
48+
expected = {
3549
'sessionId': 'test_session_id',
3650
'token': 'test_token',
3751
'websocket': {
3852
'uri': 'test_uri',
3953
'streams': ['test_stream_id'],
4054
'headers': {'test_header': 'test_value'},
4155
'audioRate': 16000,
56+
'bidirectional': True,
4257
},
4358
}
59+
assert actual == expected
4460

4561

4662
@responses.activate

0 commit comments

Comments
 (0)