def test_batch_translate_text(self): # Setup Expected Response total_characters = 1368640955 translated_characters = 1337326221 failed_characters = 1723028396 expected_response = { "total_characters": total_characters, "translated_characters": translated_characters, "failed_characters": failed_characters, } expected_response = translation_service_pb2.BatchTranslateResponse( **expected_response ) operation = operations_pb2.Operation( name="operations/test_batch_translate_text", done=True ) operation.response.Pack(expected_response) # Mock the API response channel = ChannelStub(responses=[operation]) patch = mock.patch("google.api_core.grpc_helpers.create_channel") with patch as create_channel: create_channel.return_value = channel client = translate_v3beta1.TranslationServiceClient() # Setup Request parent = client.location_path("[PROJECT]", "[LOCATION]") source_language_code = "sourceLanguageCode1687263568" target_language_codes = [] input_configs = [] output_config = {} response = client.batch_translate_text( parent, source_language_code, target_language_codes, input_configs, output_config, ) result = response.result() assert expected_response == result assert len(channel.requests) == 1 expected_request = translation_service_pb2.BatchTranslateTextRequest( parent=parent, source_language_code=source_language_code, target_language_codes=target_language_codes, input_configs=input_configs, output_config=output_config, ) actual_request = channel.requests[0][1] assert expected_request == actual_request
def batch_translate_text( self, source_language_code, target_language_codes, input_configs, output_config, parent=None, models=None, glossaries=None, retry=google.api_core.gapic_v1.method.DEFAULT, timeout=google.api_core.gapic_v1.method.DEFAULT, metadata=None, ): """ Translates a large volume of text in asynchronous batch mode. This function provides real-time output as the inputs are being processed. If caller cancels a request, the partial results (for an input file, it's all or nothing) may still be available on the specified output location. This call returns immediately and you can use google.longrunning.Operation.name to poll the status of the call. Example: >>> from google.cloud import translate_v3beta1 >>> >>> client = translate_v3beta1.TranslationServiceClient() >>> >>> # TODO: Initialize `source_language_code`: >>> source_language_code = '' >>> >>> # TODO: Initialize `target_language_codes`: >>> target_language_codes = [] >>> >>> # TODO: Initialize `input_configs`: >>> input_configs = [] >>> >>> # TODO: Initialize `output_config`: >>> output_config = {} >>> >>> response = client.batch_translate_text(source_language_code, target_language_codes, input_configs, output_config) >>> >>> def callback(operation_future): ... # Handle result. ... result = operation_future.result() >>> >>> response.add_done_callback(callback) >>> >>> # Handle metadata. >>> metadata = response.metadata() Args: source_language_code (str): Required. Source language code. target_language_codes (list[str]): Required. Specify up to 10 language codes here. input_configs (list[Union[dict, ~google.cloud.translate_v3beta1.types.InputConfig]]): Required. Input configurations. The total number of files matched should be <= 1000. The total content size should be <= 100M Unicode codepoints. The files must use UTF-8 encoding. If a dict is provided, it must be of the same form as the protobuf message :class:`~google.cloud.translate_v3beta1.types.InputConfig` output_config (Union[dict, ~google.cloud.translate_v3beta1.types.OutputConfig]): Required. Output configuration. If 2 input configs match to the same file (that is, same input path), we don't generate output for duplicate inputs. If a dict is provided, it must be of the same form as the protobuf message :class:`~google.cloud.translate_v3beta1.types.OutputConfig` parent (str): Required. Location to make a regional call. Format: ``projects/{project-id}/locations/{location-id}``. The ``global`` location is not supported for batch translation. Only AutoML Translation models or glossaries within the same region (have the same location-id) can be used, otherwise an INVALID\_ARGUMENT (400) error is returned. models (dict[str -> str]): Optional. The models to use for translation. Map's key is target language code. Map's value is model name. Value can be a built-in general model, or an AutoML Translation model. The value format depends on model type: - AutoML Translation models: ``projects/{project-id}/locations/{location-id}/models/{model-id}`` - General (built-in) models: ``projects/{project-id}/locations/{location-id}/models/general/nmt``, ``projects/{project-id}/locations/{location-id}/models/general/base`` If the map is empty or a specific model is not requested for a language pair, then default google model (nmt) is used. glossaries (dict[str -> Union[dict, ~google.cloud.translate_v3beta1.types.TranslateTextGlossaryConfig]]): Optional. Glossaries to be applied for translation. It's keyed by target language code. If a dict is provided, it must be of the same form as the protobuf message :class:`~google.cloud.translate_v3beta1.types.TranslateTextGlossaryConfig` retry (Optional[google.api_core.retry.Retry]): A retry object used to retry requests. If ``None`` is specified, requests will not be retried. timeout (Optional[float]): The amount of time, in seconds, to wait for the request to complete. Note that if ``retry`` is specified, the timeout applies to each individual attempt. metadata (Optional[Sequence[Tuple[str, str]]]): Additional metadata that is provided to the method. Returns: A :class:`~google.cloud.translate_v3beta1.types._OperationFuture` instance. Raises: google.api_core.exceptions.GoogleAPICallError: If the request failed for any reason. google.api_core.exceptions.RetryError: If the request failed due to a retryable error and retry attempts failed. ValueError: If the parameters are invalid. """ # Wrap the transport method to add retry and timeout logic. if "batch_translate_text" not in self._inner_api_calls: self._inner_api_calls[ "batch_translate_text"] = google.api_core.gapic_v1.method.wrap_method( self.transport.batch_translate_text, default_retry=self._method_configs["BatchTranslateText"]. retry, default_timeout=self._method_configs["BatchTranslateText"]. timeout, client_info=self._client_info, ) request = translation_service_pb2.BatchTranslateTextRequest( source_language_code=source_language_code, target_language_codes=target_language_codes, input_configs=input_configs, output_config=output_config, parent=parent, models=models, glossaries=glossaries, ) if metadata is None: metadata = [] metadata = list(metadata) try: routing_header = [("parent", parent)] except AttributeError: pass else: routing_metadata = google.api_core.gapic_v1.routing_header.to_grpc_metadata( routing_header) metadata.append(routing_metadata) operation = self._inner_api_calls["batch_translate_text"]( request, retry=retry, timeout=timeout, metadata=metadata) return google.api_core.operation.from_gapic( operation, self.transport._operations_client, translation_service_pb2.BatchTranslateResponse, metadata_type=translation_service_pb2.BatchTranslateMetadata, )