2222
2323from system_test_utils import unique_resource_id
2424from retry import RetryErrors
25+ from retry import RetryResult
2526
2627AUDIO_FILE = os .path .join (os .path .dirname (__file__ ), 'data' , 'hello.wav' )
2728
2829
30+ def _operation_complete (result ):
31+ """Return operation result."""
32+ return result
33+
34+
35+ def _wait_until_complete (operation , max_attempts = 5 ):
36+ """Wait until an operation has completed.
37+
38+ :type operation: :class:`google.cloud.operation.Operation`
39+ :param operation: Operation that has not completed.
40+
41+ :type max_attempts: int
42+ :param max_attempts: (Optional) The maximum number of times to check if
43+ the operation has completed. Defaults to 5.
44+
45+ :rtype: bool
46+ :returns: Boolean indicating if the operation is complete.
47+ """
48+ retry = RetryResult (_operation_complete , max_tries = max_attempts )
49+ return retry (operation .poll )()
50+
51+
2952class Config (object ):
3053 """Run-time configuration to be modified at set-up.
3154
@@ -34,10 +57,12 @@ class Config(object):
3457 """
3558 CLIENT = None
3659 TEST_BUCKET = None
60+ USE_GAX = True
3761
3862
3963def setUpModule ():
4064 Config .CLIENT = speech .Client ()
65+ Config .USE_GAX = Config .CLIENT ._use_gax
4166 # Now create a bucket for GCS stored content.
4267 storage_client = storage .Client ()
4368 bucket_name = 'new' + unique_resource_id ()
@@ -72,12 +97,24 @@ def _make_sync_request(self, content=None, source_uri=None,
7297 source_uri = source_uri ,
7398 encoding = speech .Encoding .LINEAR16 ,
7499 sample_rate = 16000 )
75- result = client .sync_recognize (sample ,
76- language_code = 'en-US' ,
77- max_alternatives = max_alternatives ,
78- profanity_filter = True ,
79- speech_context = ['Google' , 'cloud' ])
80- return result
100+ return client .sync_recognize (sample ,
101+ language_code = 'en-US' ,
102+ max_alternatives = max_alternatives ,
103+ profanity_filter = True ,
104+ speech_context = ['Google' , 'cloud' ])
105+
106+ def _make_async_request (self , content = None , source_uri = None ,
107+ max_alternatives = None ):
108+ client = Config .CLIENT
109+ sample = client .sample (content = content ,
110+ source_uri = source_uri ,
111+ encoding = speech .Encoding .LINEAR16 ,
112+ sample_rate = 16000 )
113+ return client .async_recognize (sample ,
114+ language_code = 'en-US' ,
115+ max_alternatives = max_alternatives ,
116+ profanity_filter = True ,
117+ speech_context = ['Google' , 'cloud' ])
81118
82119 def _check_best_results (self , results ):
83120 top_result = results [0 ]
@@ -109,3 +146,46 @@ def test_sync_recognize_gcs_file(self):
109146 result = self ._make_sync_request (source_uri = source_uri ,
110147 max_alternatives = 1 )
111148 self ._check_best_results (result )
149+
150+ def test_async_recognize_local_file (self ):
151+ if Config .USE_GAX :
152+ self .skipTest ('async_recognize gRPC not yet implemented.' )
153+ with open (AUDIO_FILE , 'rb' ) as file_obj :
154+ content = file_obj .read ()
155+
156+ operation = self ._make_async_request (content = content ,
157+ max_alternatives = 2 )
158+
159+ _wait_until_complete (operation )
160+
161+ self .assertEqual (len (operation .results ), 2 )
162+ self ._check_best_results (operation .results )
163+
164+ results = operation .results
165+ self .assertIsInstance (results [1 ], Transcript )
166+ self .assertEqual (results [1 ].transcript , self .ASSERT_TEXT )
167+ self .assertEqual (results [1 ].confidence , None )
168+
169+ def test_async_recognize_gcs_file (self ):
170+ if Config .USE_GAX :
171+ self .skipTest ('async_recognize gRPC not yet implemented.' )
172+ bucket_name = Config .TEST_BUCKET .name
173+ blob_name = 'hello.wav'
174+ blob = Config .TEST_BUCKET .blob (blob_name )
175+ self .to_delete_by_case .append (blob ) # Clean-up.
176+ with open (AUDIO_FILE , 'rb' ) as file_obj :
177+ blob .upload_from_file (file_obj )
178+
179+ source_uri = 'gs://%s/%s' % (bucket_name , blob_name )
180+ operation = self ._make_async_request (source_uri = source_uri ,
181+ max_alternatives = 2 )
182+
183+ _wait_until_complete (operation )
184+
185+ self .assertEqual (len (operation .results ), 2 )
186+ self ._check_best_results (operation .results )
187+
188+ results = operation .results
189+ self .assertIsInstance (results [1 ], Transcript )
190+ self .assertEqual (results [1 ].transcript , self .ASSERT_TEXT )
191+ self .assertEqual (results [1 ].confidence , None )
0 commit comments