Beispiel #1
0
    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
Beispiel #2
0
    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,
        )