Skip to content

Commit 0e17e79

Browse files
authored
Adding custom streaming (#35593)
1 parent a56f844 commit 0e17e79

File tree

3 files changed

+180
-5
lines changed

3 files changed

+180
-5
lines changed

sdk/communication/azure-communication-callautomation/azure/communication/callautomation/_call_connection_client.py

Lines changed: 58 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,9 @@
5151
StopTranscriptionRequest,
5252
UpdateTranscriptionRequest,
5353
HoldRequest,
54-
UnholdRequest
54+
UnholdRequest,
55+
StartMediaStreamingRequest,
56+
StopMediaStreamingRequest
5557
)
5658
from ._generated.models._enums import RecognizeInputType
5759
from ._shared.auth_policy_utils import get_authentication_policy
@@ -1014,4 +1016,58 @@ def unhold(
10141016
)
10151017

10161018
self._call_media_client.unhold(self._call_connection_id, unhold_request)
1017-
1019+
1020+
@distributed_trace
1021+
def start_media_streaming(
1022+
self,
1023+
operation_callback_url: Optional[str] = None,
1024+
operation_context: Optional[str] = None,
1025+
**kwargs
1026+
) -> None:
1027+
"""Starts media streaming in the call.
1028+
1029+
:param operation_callback_url: (Optional) Set a callback URL that overrides the default
1030+
callback URL set by CreateCall/AnswerCall for this operation.
1031+
This setup is per-action. If this is not set, the default callback URL set by
1032+
CreateCall/AnswerCall will be used.
1033+
:type operation_callback_url: str or None
1034+
:param operation_context: (Optional) Value that can be used to track this call and its associated events.
1035+
:type operation_context: str or None
1036+
:return: None
1037+
:rtype: None
1038+
:raises ~azure.core.exceptions.HttpResponseError: If there's an HTTP response error.
1039+
"""
1040+
start_media_streaming_request=StartMediaStreamingRequest(
1041+
operation_callback_uri=operation_callback_url,
1042+
operation_context=operation_context
1043+
)
1044+
self._call_media_client.start_media_streaming(
1045+
self._call_connection_id,
1046+
start_media_streaming_request,
1047+
**kwargs)
1048+
1049+
@distributed_trace
1050+
def stop_media_streaming(
1051+
self,
1052+
operation_callback_url: Optional[str] = None,
1053+
**kwargs
1054+
) -> None:
1055+
"""Stops media streaming in the call.
1056+
1057+
:param operation_callback_url: (Optional) Set a callback URL that overrides the default
1058+
callback URL set by CreateCall/AnswerCall for this operation.
1059+
This setup is per-action. If this is not set, the default callback URL set by
1060+
CreateCall/AnswerCall will be used.
1061+
:type operation_callback_url: str or None
1062+
:return: None
1063+
:rtype: None
1064+
:raises ~azure.core.exceptions.HttpResponseError: If there's an HTTP response error.
1065+
"""
1066+
stop_media_streaming_request=StopMediaStreamingRequest(
1067+
operation_callback_uri=operation_callback_url
1068+
)
1069+
self._call_media_client.stop_media_streaming(
1070+
self._call_connection_id,
1071+
stop_media_streaming_request,
1072+
**kwargs
1073+
)

sdk/communication/azure-communication-callautomation/azure/communication/callautomation/aio/_call_connection_client_async.py

Lines changed: 58 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,9 @@
5252
StopTranscriptionRequest,
5353
UpdateTranscriptionRequest,
5454
HoldRequest,
55-
UnholdRequest
55+
UnholdRequest,
56+
StartMediaStreamingRequest,
57+
StopMediaStreamingRequest
5658
)
5759
from .._generated.models._enums import RecognizeInputType
5860
from .._shared.auth_policy_utils import get_authentication_policy
@@ -1019,6 +1021,61 @@ async def unhold(
10191021

10201022
await self._call_media_client.unhold(self._call_connection_id, unhold_request)
10211023

1024+
@distributed_trace_async
1025+
async def start_media_streaming(
1026+
self,
1027+
operation_callback_url: Optional[str] = None,
1028+
operation_context: Optional[str] = None,
1029+
**kwargs
1030+
)->None:
1031+
"""Starts media streaming in the call.
1032+
1033+
:param operation_callback_url: (Optional) Set a callback URL that overrides the default
1034+
callback URL set by CreateCall/AnswerCall for this operation.
1035+
This setup is per-action. If this is not set, the default callback URL set by
1036+
CreateCall/AnswerCall will be used.
1037+
:type operation_callback_url: str or None
1038+
:param operation_context: (Optional) Value that can be used to track this call and its associated events.
1039+
:type operation_context: str or None
1040+
:return: None
1041+
:rtype: None
1042+
:raises ~azure.core.exceptions.HttpResponseError: If there's an HTTP response error.
1043+
"""
1044+
start_media_streaming_request=StartMediaStreamingRequest(
1045+
operation_callback_uri=operation_callback_url,
1046+
operation_context=operation_context
1047+
)
1048+
self._call_media_client.start_media_streaming(
1049+
self._call_connection_id,
1050+
start_media_streaming_request,
1051+
**kwargs)
1052+
1053+
@distributed_trace_async
1054+
async def stop_media_streaming(
1055+
self,
1056+
operation_callback_url: Optional[str] = None,
1057+
**kwargs
1058+
)->None:
1059+
"""Stops media streaming in the call.
1060+
1061+
:param operation_callback_url: (Optional) Set a callback URL that overrides the default
1062+
callback URL set by CreateCall/AnswerCall for this operation.
1063+
This setup is per-action. If this is not set, the default callback URL set by
1064+
CreateCall/AnswerCall will be used.
1065+
:type operation_callback_url: str or None
1066+
:return: None
1067+
:rtype: None
1068+
:raises ~azure.core.exceptions.HttpResponseError: If there's an HTTP response error.
1069+
"""
1070+
stop_media_streaming_request=StopMediaStreamingRequest(
1071+
operation_callback_uri=operation_callback_url
1072+
)
1073+
self._call_media_client.stop_media_streaming(
1074+
self._call_connection_id,
1075+
stop_media_streaming_request,
1076+
**kwargs
1077+
)
1078+
10221079
async def __aenter__(self) -> "CallConnectionClient":
10231080
await self._client.__aenter__()
10241081
return self

sdk/communication/azure-communication-callautomation/tests/test_call_media_client.py

Lines changed: 64 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,9 @@
2828
StopTranscriptionRequest,
2929
UpdateTranscriptionRequest,
3030
HoldRequest,
31-
UnholdRequest
31+
UnholdRequest,
32+
StopMediaStreamingRequest,
33+
StartMediaStreamingRequest
3234
)
3335
from azure.communication.callautomation._generated.models._enums import (
3436
RecognizeInputType,
@@ -47,6 +49,7 @@ def setUp(self):
4749
self.tones = [DtmfTone.ONE, DtmfTone.TWO, DtmfTone.THREE, DtmfTone.POUND]
4850
self.operation_context = "test_operation_context"
4951
self.locale = "en-US"
52+
self.operation_callback_url = "https://localhost"
5053
self.call_media_operations = Mock()
5154

5255
self.call_connection_client = CallConnectionClient(
@@ -494,4 +497,63 @@ def test_unhold(self):
494497
mock_unhold.assert_called_once()
495498
actual_hold_request = mock_unhold.call_args[0][1]
496499

497-
self.assertEqual(expected_hold_request.operation_context, actual_hold_request.operation_context)
500+
self.assertEqual(expected_hold_request.operation_context, actual_hold_request.operation_context)
501+
502+
def test_start_media_streaming(self):
503+
mock_start_media_streaming = Mock()
504+
self.call_media_operations.start_media_streaming = mock_start_media_streaming
505+
506+
self.call_connection_client.start_media_streaming(
507+
operation_callback_url=self.operation_callback_url,
508+
operation_context=self.operation_context)
509+
510+
expected_start_media_streaming_request = StartMediaStreamingRequest(
511+
operation_callback_uri=self.operation_callback_url,
512+
operation_context=self.operation_context)
513+
514+
mock_start_media_streaming.assert_called_once()
515+
actual_call_connection_id = mock_start_media_streaming.call_args[0][0]
516+
actual_start_media_streaming_request = mock_start_media_streaming.call_args[0][1]
517+
self.assertEqual(self.call_connection_id,actual_call_connection_id)
518+
self.assertEqual(expected_start_media_streaming_request.operation_callback_uri,
519+
actual_start_media_streaming_request.operation_callback_uri)
520+
self.assertEqual(expected_start_media_streaming_request.operation_context,
521+
actual_start_media_streaming_request.operation_context)
522+
523+
def test_start_media_steaming_with_no_param(self):
524+
mock_start_media_streaming = Mock()
525+
self.call_media_operations.start_media_streaming = mock_start_media_streaming
526+
527+
self.call_connection_client.start_media_streaming()
528+
529+
mock_start_media_streaming.assert_called_once()
530+
actual_call_connection_id = mock_start_media_streaming.call_args[0][0]
531+
self.assertEqual(self.call_connection_id,actual_call_connection_id)
532+
533+
def test_stop_media_streaming(self):
534+
mock_stop_media_streaming = Mock()
535+
self.call_media_operations.stop_media_streaming = mock_stop_media_streaming
536+
537+
self.call_connection_client.stop_media_streaming(
538+
operation_callback_url=self.operation_callback_url)
539+
540+
expected_stop_media_streaming_request = StopMediaStreamingRequest(
541+
operation_callback_uri=self.operation_callback_url)
542+
543+
mock_stop_media_streaming.assert_called_once()
544+
545+
actual_call_connection_id = mock_stop_media_streaming.call_args[0][0]
546+
actual_stop_media_streaming_request = mock_stop_media_streaming.call_args[0][1]
547+
self.assertEqual(self.call_connection_id,actual_call_connection_id)
548+
self.assertEqual(expected_stop_media_streaming_request.operation_callback_uri,
549+
actual_stop_media_streaming_request.operation_callback_uri)
550+
551+
def test_stop_media_streaming_with_no_param(self):
552+
mock_stop_media_streaming = Mock()
553+
self.call_media_operations.stop_media_streaming = mock_stop_media_streaming
554+
555+
self.call_connection_client.stop_media_streaming()
556+
557+
mock_stop_media_streaming.assert_called_once()
558+
actual_call_connection_id = mock_stop_media_streaming.call_args[0][0]
559+
self.assertEqual(self.call_connection_id,actual_call_connection_id)

0 commit comments

Comments
 (0)