Skip to content

Commit

Permalink
[refactor] Extract Google API call
Browse files Browse the repository at this point in the history
  • Loading branch information
ftnext committed Dec 5, 2023
1 parent d9042a5 commit fdd9af9
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 10 deletions.
25 changes: 15 additions & 10 deletions speech_recognition/recognizers/google.py
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,18 @@ def find_best_hypothesis(alternatives: list[Alternative]) -> Alternative:
return best_hypothesis


def obtain_transcription(request: Request, timeout: int) -> str:
try:
response = urlopen(request, timeout=timeout)
except HTTPError as e:
raise RequestError("recognition request failed: {}".format(e.reason))
except URLError as e:
raise RequestError(
"recognition connection failed: {}".format(e.reason)
)
return response.read().decode("utf-8")


def recognize_legacy(
recognizer,
audio_data: AudioData,
Expand Down Expand Up @@ -217,16 +229,9 @@ def recognize_legacy(
)
request = request_builder.build(audio_data)

# obtain audio transcription results
try:
response = urlopen(request, timeout=recognizer.operation_timeout)
except HTTPError as e:
raise RequestError("recognition request failed: {}".format(e.reason))
except URLError as e:
raise RequestError(
"recognition connection failed: {}".format(e.reason)
)
response_text = response.read().decode("utf-8")
response_text = obtain_transcription(
request, timeout=recognizer.operation_timeout
)

output_parser = OutputParser(
show_all=show_all, with_confidence=with_confidence
Expand Down
17 changes: 17 additions & 0 deletions tests/recognizers/test_google.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from unittest import TestCase
from unittest.mock import MagicMock, patch
from urllib.request import Request

from speech_recognition.audio import AudioData
from speech_recognition.recognizers import google
Expand Down Expand Up @@ -91,3 +92,19 @@ def test_parse_without_confidence(

self.assertEqual(actual, ("1 2", 0.49585345))
find_best_hypothesis.assert_called_once_with("dummy3")


class ObtainTranscriptionTestCase(TestCase):
@patch(f"{MODULE_UNDER_TEST}.urlopen")
def test_obtain(self, urlopen):
request = MagicMock(spec=Request)
response = urlopen.return_value

actual = google.obtain_transcription(request, 0)

self.assertEqual(
actual, response.read.return_value.decode.return_value
)
urlopen.assert_called_once_with(request, timeout=0)
response.read.assert_called_once_with()
response.read.return_value.decode.assert_called_once_with("utf-8")

0 comments on commit fdd9af9

Please sign in to comment.