Skip to content

Commit 33b0044

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

File tree

2 files changed

+38
-1
lines changed

2 files changed

+38
-1
lines changed

video/src/vonage_video/models/audio_connector.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,26 @@ 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,
24+
description="Whether the websocket is bidirectional."
25+
)
26+
27+
def model_dump(self, *args, **kwargs):
28+
data = super().model_dump(*args, **kwargs)
29+
if self.bidirectional is not True and 'bidirectional' in data:
30+
del data['bidirectional']
31+
32+
if 'audioRate' in data and isinstance(data['audioRate'], AudioSampleRate):
33+
data['audioRate'] = data['audioRate'].value
34+
return data
2135

2236

2337
class AudioConnectorOptions(BaseModel):
@@ -29,10 +43,17 @@ class AudioConnectorOptions(BaseModel):
2943
websocket (AudioConnectorWebSocket): The audio connector websocket.
3044
"""
3145

46+
3247
session_id: str = Field(..., serialization_alias='sessionId')
3348
token: str
3449
websocket: AudioConnectorWebSocket
3550

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

3758
class AudioConnectorData(BaseModel):
3859
"""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)