From d0c42a80e052f0df9a9ce2432d78631a294c2fc3 Mon Sep 17 00:00:00 2001 From: Jiarui Guo Date: Sat, 4 Jul 2026 17:07:01 -0700 Subject: [PATCH 1/3] [Translation] Update azure-ai-translation-document to 2026-03-01 spec Adds custom translation model deployment name support (deployment_name on TranslationTarget/begin_translation, DocumentStatus, and single-document translate) and image translation support (translate_text_within_image plus image-scan reporting fields). Introduces the BatchOptions model, sets the default service API version to 2026-03-01, adds samples and unit tests, and bumps the version to 1.2.0b1. --- .../CHANGELOG.md | 22 ++++- .../azure/ai/translation/document/_client.py | 4 +- .../ai/translation/document/_configuration.py | 8 +- .../document/_operations/_operations.py | 24 ++++-- .../document/_operations/_patch.py | 26 ++++++ .../azure/ai/translation/document/_patch.py | 21 ++++- .../azure/ai/translation/document/_version.py | 2 +- .../ai/translation/document/aio/_client.py | 4 +- .../document/aio/_configuration.py | 8 +- .../document/aio/_operations/_patch.py | 26 ++++++ .../ai/translation/document/aio/_patch.py | 8 +- .../translation/document/models/__init__.py | 2 + .../ai/translation/document/models/_models.py | 80 +++++++++++++++++++ .../ai/translation/document/models/_patch.py | 32 ++++++++ .../samples/README.md | 6 ++ ...tion_with_custom_model_deployment_async.py | 75 +++++++++++++++++ ...ranslation_with_image_translation_async.py | 77 ++++++++++++++++++ ...ranslation_with_custom_model_deployment.py | 69 ++++++++++++++++ ...mple_translation_with_image_translation.py | 70 ++++++++++++++++ .../tests/test_model_updates.py | 48 +++++++++++ .../tsp-location.yaml | 4 +- 21 files changed, 589 insertions(+), 27 deletions(-) create mode 100644 sdk/translation/azure-ai-translation-document/samples/async_samples/sample_translation_with_custom_model_deployment_async.py create mode 100644 sdk/translation/azure-ai-translation-document/samples/async_samples/sample_translation_with_image_translation_async.py create mode 100644 sdk/translation/azure-ai-translation-document/samples/sample_translation_with_custom_model_deployment.py create mode 100644 sdk/translation/azure-ai-translation-document/samples/sample_translation_with_image_translation.py diff --git a/sdk/translation/azure-ai-translation-document/CHANGELOG.md b/sdk/translation/azure-ai-translation-document/CHANGELOG.md index 5f035cf8118c..0e93b9ac6e01 100644 --- a/sdk/translation/azure-ai-translation-document/CHANGELOG.md +++ b/sdk/translation/azure-ai-translation-document/CHANGELOG.md @@ -1,11 +1,31 @@ # Release History -## 1.1.1 (Unreleased) +## 1.2.0b1 (Unreleased) ### Features Added +- Added support for the `2026-03-01` service API version, which is now the default. +- Added image translation support: the `translate_text_within_image` keyword on `begin_translation` + for batch requests, and a `translate_text_within_image` keyword on `SingleDocumentTranslationClient.translate` + for single document requests. When enabled, each document's status also reports image scan usage. +- Added the `deployment_name` property to `TranslationTarget` and the `deployment_name` keyword to + `begin_translation` to specify the deployment name of the custom translation model for a batch + translation request. +- Added the `deployment_name` keyword to `SingleDocumentTranslationClient.translate` for single + document translation requests. +- Added the `deployment_name` property to `DocumentStatus`, exposing the deployment name of the + custom translation model used for the translation. +- Added image scan reporting to `DocumentStatus`: `image_characters_detected`, `images_charged`, + `total_image_scans_succeeded`, and `total_image_scans_failed`. +- Added image scan totals to `TranslationStatusSummary`: `total_image_scans_succeeded`, + `total_image_scans_failed`, and `total_images_charged`. +- Added the `BatchOptions` model for specifying batch translation options. + ### Breaking Changes +- Changed the default service API version from `2024-05-01` to `2026-03-01`. To keep the previous + behavior, pass `api_version="2024-05-01"` when constructing the client. + ### Bugs Fixed ### Other Changes diff --git a/sdk/translation/azure-ai-translation-document/azure/ai/translation/document/_client.py b/sdk/translation/azure-ai-translation-document/azure/ai/translation/document/_client.py index 36fb2051321e..6b9531e3c240 100644 --- a/sdk/translation/azure-ai-translation-document/azure/ai/translation/document/_client.py +++ b/sdk/translation/azure-ai-translation-document/azure/ai/translation/document/_client.py @@ -33,7 +33,7 @@ class DocumentTranslationClient(DocumentTranslationClientOperationsMixin): AzureKeyCredential type or a TokenCredential type. Required. :type credential: ~azure.core.credentials.AzureKeyCredential or ~azure.core.credentials.TokenCredential - :keyword api_version: The API version to use for this operation. Default value is "2024-05-01". + :keyword api_version: The API version to use for this operation. Default value is "2026-03-01". Note that overriding this default value may result in unsupported behavior. :paramtype api_version: str :keyword int polling_interval: Default waiting time between two polls for LRO operations if no @@ -113,7 +113,7 @@ class SingleDocumentTranslationClient(SingleDocumentTranslationClientOperationsM AzureKeyCredential type or a TokenCredential type. Required. :type credential: ~azure.core.credentials.AzureKeyCredential or ~azure.core.credentials.TokenCredential - :keyword api_version: The API version to use for this operation. Default value is "2024-05-01". + :keyword api_version: The API version to use for this operation. Default value is "2026-03-01". Note that overriding this default value may result in unsupported behavior. :paramtype api_version: str """ diff --git a/sdk/translation/azure-ai-translation-document/azure/ai/translation/document/_configuration.py b/sdk/translation/azure-ai-translation-document/azure/ai/translation/document/_configuration.py index df7480f5c50e..7914cfa78edf 100644 --- a/sdk/translation/azure-ai-translation-document/azure/ai/translation/document/_configuration.py +++ b/sdk/translation/azure-ai-translation-document/azure/ai/translation/document/_configuration.py @@ -30,13 +30,13 @@ class DocumentTranslationClientConfiguration: # pylint: disable=too-many-instan AzureKeyCredential type or a TokenCredential type. Required. :type credential: ~azure.core.credentials.AzureKeyCredential or ~azure.core.credentials.TokenCredential - :keyword api_version: The API version to use for this operation. Default value is "2024-05-01". + :keyword api_version: The API version to use for this operation. Default value is "2026-03-01". Note that overriding this default value may result in unsupported behavior. :paramtype api_version: str """ def __init__(self, endpoint: str, credential: Union[AzureKeyCredential, "TokenCredential"], **kwargs: Any) -> None: - api_version: str = kwargs.pop("api_version", "2024-05-01") + api_version: str = kwargs.pop("api_version", "2026-03-01") if endpoint is None: raise ValueError("Parameter 'endpoint' must not be None.") @@ -85,13 +85,13 @@ class SingleDocumentTranslationClientConfiguration: # pylint: disable=too-many- AzureKeyCredential type or a TokenCredential type. Required. :type credential: ~azure.core.credentials.AzureKeyCredential or ~azure.core.credentials.TokenCredential - :keyword api_version: The API version to use for this operation. Default value is "2024-05-01". + :keyword api_version: The API version to use for this operation. Default value is "2026-03-01". Note that overriding this default value may result in unsupported behavior. :paramtype api_version: str """ def __init__(self, endpoint: str, credential: Union[AzureKeyCredential, "TokenCredential"], **kwargs: Any) -> None: - api_version: str = kwargs.pop("api_version", "2024-05-01") + api_version: str = kwargs.pop("api_version", "2026-03-01") if endpoint is None: raise ValueError("Parameter 'endpoint' must not be None.") diff --git a/sdk/translation/azure-ai-translation-document/azure/ai/translation/document/_operations/_operations.py b/sdk/translation/azure-ai-translation-document/azure/ai/translation/document/_operations/_operations.py index e86f7ccb4210..0515af537be7 100644 --- a/sdk/translation/azure-ai-translation-document/azure/ai/translation/document/_operations/_operations.py +++ b/sdk/translation/azure-ai-translation-document/azure/ai/translation/document/_operations/_operations.py @@ -59,7 +59,7 @@ def build_document_translation__begin_translation_request( # pylint: disable=na _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-05-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -91,7 +91,7 @@ def build_document_translation_list_translation_statuses_request( # pylint: dis _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-05-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -132,7 +132,7 @@ def build_document_translation_get_document_status_request( # pylint: disable=n _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-05-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -159,7 +159,7 @@ def build_document_translation_get_translation_status_request( # pylint: disabl _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-05-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -185,7 +185,7 @@ def build_document_translation_cancel_translation_request( # pylint: disable=na _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-05-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -221,7 +221,7 @@ def build_document_translation_list_document_statuses_request( # pylint: disabl _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-05-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -267,7 +267,7 @@ def build_document_translation_get_supported_formats_request( # pylint: disable _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-05-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -289,13 +289,15 @@ def build_single_document_translation_translate_request( # pylint: disable=name target_language: str, source_language: Optional[str] = None, category: Optional[str] = None, + deployment_name: Optional[str] = None, allow_fallback: Optional[bool] = None, + translate_text_within_image: Optional[bool] = None, **kwargs: Any, ) -> HttpRequest: _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-05-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-03-01")) accept = _headers.pop("Accept", "application/octet-stream") # Construct URL @@ -308,8 +310,14 @@ def build_single_document_translation_translate_request( # pylint: disable=name _params["targetLanguage"] = _SERIALIZER.query("target_language", target_language, "str") if category is not None: _params["category"] = _SERIALIZER.query("category", category, "str") + if deployment_name is not None: + _params["deploymentName"] = _SERIALIZER.query("deployment_name", deployment_name, "str") if allow_fallback is not None: _params["allowFallback"] = _SERIALIZER.query("allow_fallback", allow_fallback, "bool") + if translate_text_within_image is not None: + _params["translateTextWithinImage"] = _SERIALIZER.query( + "translate_text_within_image", translate_text_within_image, "bool" + ) # Construct headers _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") diff --git a/sdk/translation/azure-ai-translation-document/azure/ai/translation/document/_operations/_patch.py b/sdk/translation/azure-ai-translation-document/azure/ai/translation/document/_operations/_patch.py index 0c597a6d71d5..98a3cf210d74 100644 --- a/sdk/translation/azure-ai-translation-document/azure/ai/translation/document/_operations/_patch.py +++ b/sdk/translation/azure-ai-translation-document/azure/ai/translation/document/_operations/_patch.py @@ -344,7 +344,9 @@ def translate( target_language: str, source_language: Optional[str] = None, category: Optional[str] = None, + deployment_name: Optional[str] = None, allow_fallback: Optional[bool] = None, + translate_text_within_image: Optional[bool] = None, **kwargs: Any ) -> Iterator[bytes]: """Submit a single document translation request to the Document Translation service. @@ -371,10 +373,16 @@ def translate( project details to this parameter to use your deployed customized system. Default value is: general. Default value is None. :paramtype category: str + :keyword deployment_name: Deployment name of the custom translation model for the translation + request. Default value is None. + :paramtype deployment_name: str :keyword allow_fallback: Specifies that the service is allowed to fall back to a general system when a custom system doesn't exist. Possible values are: true (default) or false. Default value is None. :paramtype allow_fallback: bool + :keyword translate_text_within_image: Optional boolean parameter to translate text within an + image in the document. Default value is None. + :paramtype translate_text_within_image: bool :return: Iterator[bytes] :rtype: Iterator[bytes] :raises ~azure.core.exceptions.HttpResponseError: @@ -397,7 +405,9 @@ def translate( target_language: str, source_language: Optional[str] = None, category: Optional[str] = None, + deployment_name: Optional[str] = None, allow_fallback: Optional[bool] = None, + translate_text_within_image: Optional[bool] = None, **kwargs: Any ) -> Iterator[bytes]: """Submit a single document translation request to the Document Translation service. @@ -424,10 +434,16 @@ def translate( project details to this parameter to use your deployed customized system. Default value is: general. Default value is None. :paramtype category: str + :keyword deployment_name: Deployment name of the custom translation model for the translation + request. Default value is None. + :paramtype deployment_name: str :keyword allow_fallback: Specifies that the service is allowed to fall back to a general system when a custom system doesn't exist. Possible values are: true (default) or false. Default value is None. :paramtype allow_fallback: bool + :keyword translate_text_within_image: Optional boolean parameter to translate text within an + image in the document. Default value is None. + :paramtype translate_text_within_image: bool :return: Iterator[bytes] :rtype: Iterator[bytes] :raises ~azure.core.exceptions.HttpResponseError: @@ -441,7 +457,9 @@ def translate( target_language: str, source_language: Optional[str] = None, category: Optional[str] = None, + deployment_name: Optional[str] = None, allow_fallback: Optional[bool] = None, + translate_text_within_image: Optional[bool] = None, **kwargs: Any ) -> Iterator[bytes]: """Submit a single document translation request to the Document Translation service. @@ -468,10 +486,16 @@ def translate( project details to this parameter to use your deployed customized system. Default value is: general. Default value is None. :paramtype category: str + :keyword deployment_name: Deployment name of the custom translation model for the translation + request. Default value is None. + :paramtype deployment_name: str :keyword allow_fallback: Specifies that the service is allowed to fall back to a general system when a custom system doesn't exist. Possible values are: true (default) or false. Default value is None. :paramtype allow_fallback: bool + :keyword translate_text_within_image: Optional boolean parameter to translate text within an + image in the document. Default value is None. + :paramtype translate_text_within_image: bool :return: Iterator[bytes] :rtype: Iterator[bytes] :raises ~azure.core.exceptions.HttpResponseError: @@ -507,7 +531,9 @@ def translate( target_language=target_language, source_language=source_language, category=category, + deployment_name=deployment_name, allow_fallback=allow_fallback, + translate_text_within_image=translate_text_within_image, api_version=self._config.api_version, files=_files, data=_data, diff --git a/sdk/translation/azure-ai-translation-document/azure/ai/translation/document/_patch.py b/sdk/translation/azure-ai-translation-document/azure/ai/translation/document/_patch.py index 00f24ba7de30..009134de5bd0 100644 --- a/sdk/translation/azure-ai-translation-document/azure/ai/translation/document/_patch.py +++ b/sdk/translation/azure-ai-translation-document/azure/ai/translation/document/_patch.py @@ -30,6 +30,7 @@ TranslationStatus, DocumentTranslationError, DocumentTranslationInput, + BatchOptions, ) from .models._patch import convert_status @@ -61,9 +62,11 @@ def convert_order_by(orderby: Optional[List[str]]) -> Optional[List[str]]: class DocumentTranslationApiVersion(str, Enum, metaclass=CaseInsensitiveEnumMeta): """Document Translation API versions supported by this package""" - #: This is the default version V2024_05_01 = "2024-05-01" + #: This is the default version + V2026_03_01 = "2026-03-01" + def get_translation_input(args, kwargs, continuation_token): if continuation_token: @@ -102,6 +105,8 @@ def get_translation_input(args, kwargs, continuation_token): suffix = kwargs.pop("suffix", None) storage_type = kwargs.pop("storage_type", None) category_id = kwargs.pop("category_id", None) + deployment_name = kwargs.pop("deployment_name", None) + translate_text_within_image = kwargs.pop("translate_text_within_image", None) glossaries = kwargs.pop("glossaries", None) request = StartTranslationDetails( @@ -118,11 +123,17 @@ def get_translation_input(args, kwargs, continuation_token): language=target_language, glossaries=glossaries, category_id=category_id, + deployment_name=deployment_name, ) ], storage_type=storage_type, ) - ] + ], + options=( + BatchOptions(translate_text_within_image=translate_text_within_image) + if translate_text_within_image is not None + else None + ), ) except (AttributeError, TypeError, IndexError) as exc: raise ValueError( @@ -235,6 +246,8 @@ def begin_translation( storage_type: Optional[Union[str, StorageInputType]] = None, category_id: Optional[str] = None, glossaries: Optional[List[TranslationGlossary]] = None, + deployment_name: Optional[str] = None, + translate_text_within_image: Optional[bool] = None, **kwargs: Any ) -> DocumentTranslationLROPoller[ItemPaged[DocumentStatus]]: """Begin translating the document(s) in your source container to your target container @@ -265,6 +278,10 @@ def begin_translation( :keyword str category_id: Category / custom model ID for using custom translation. :keyword glossaries: Glossaries to apply to translation. :paramtype glossaries: list[~azure.ai.translation.document.TranslationGlossary] + :keyword str deployment_name: Deployment name of the custom translation model for the + translation request. + :keyword bool translate_text_within_image: Whether to translate text embedded within images + in the documents. :return: An instance of a DocumentTranslationLROPoller. Call `result()` on the poller object to return a pageable of DocumentStatus. A DocumentStatus will be returned for each translation on a document. diff --git a/sdk/translation/azure-ai-translation-document/azure/ai/translation/document/_version.py b/sdk/translation/azure-ai-translation-document/azure/ai/translation/document/_version.py index 3dcc33575aad..5bf479b145f7 100644 --- a/sdk/translation/azure-ai-translation-document/azure/ai/translation/document/_version.py +++ b/sdk/translation/azure-ai-translation-document/azure/ai/translation/document/_version.py @@ -6,4 +6,4 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -VERSION = "1.1.1" +VERSION = "1.2.0b1" diff --git a/sdk/translation/azure-ai-translation-document/azure/ai/translation/document/aio/_client.py b/sdk/translation/azure-ai-translation-document/azure/ai/translation/document/aio/_client.py index d8e017fc4f57..7c6e72d9f172 100644 --- a/sdk/translation/azure-ai-translation-document/azure/ai/translation/document/aio/_client.py +++ b/sdk/translation/azure-ai-translation-document/azure/ai/translation/document/aio/_client.py @@ -33,7 +33,7 @@ class DocumentTranslationClient(DocumentTranslationClientOperationsMixin): AzureKeyCredential type or a TokenCredential type. Required. :type credential: ~azure.core.credentials.AzureKeyCredential or ~azure.core.credentials_async.AsyncTokenCredential - :keyword api_version: The API version to use for this operation. Default value is "2024-05-01". + :keyword api_version: The API version to use for this operation. Default value is "2026-03-01". Note that overriding this default value may result in unsupported behavior. :paramtype api_version: str :keyword int polling_interval: Default waiting time between two polls for LRO operations if no @@ -117,7 +117,7 @@ class SingleDocumentTranslationClient(SingleDocumentTranslationClientOperationsM AzureKeyCredential type or a TokenCredential type. Required. :type credential: ~azure.core.credentials.AzureKeyCredential or ~azure.core.credentials_async.AsyncTokenCredential - :keyword api_version: The API version to use for this operation. Default value is "2024-05-01". + :keyword api_version: The API version to use for this operation. Default value is "2026-03-01". Note that overriding this default value may result in unsupported behavior. :paramtype api_version: str """ diff --git a/sdk/translation/azure-ai-translation-document/azure/ai/translation/document/aio/_configuration.py b/sdk/translation/azure-ai-translation-document/azure/ai/translation/document/aio/_configuration.py index f0876e7f2d08..f2504925e826 100644 --- a/sdk/translation/azure-ai-translation-document/azure/ai/translation/document/aio/_configuration.py +++ b/sdk/translation/azure-ai-translation-document/azure/ai/translation/document/aio/_configuration.py @@ -30,7 +30,7 @@ class DocumentTranslationClientConfiguration: # pylint: disable=too-many-instan AzureKeyCredential type or a TokenCredential type. Required. :type credential: ~azure.core.credentials.AzureKeyCredential or ~azure.core.credentials_async.AsyncTokenCredential - :keyword api_version: The API version to use for this operation. Default value is "2024-05-01". + :keyword api_version: The API version to use for this operation. Default value is "2026-03-01". Note that overriding this default value may result in unsupported behavior. :paramtype api_version: str """ @@ -38,7 +38,7 @@ class DocumentTranslationClientConfiguration: # pylint: disable=too-many-instan def __init__( self, endpoint: str, credential: Union[AzureKeyCredential, "AsyncTokenCredential"], **kwargs: Any ) -> None: - api_version: str = kwargs.pop("api_version", "2024-05-01") + api_version: str = kwargs.pop("api_version", "2026-03-01") if endpoint is None: raise ValueError("Parameter 'endpoint' must not be None.") @@ -87,7 +87,7 @@ class SingleDocumentTranslationClientConfiguration: # pylint: disable=too-many- AzureKeyCredential type or a TokenCredential type. Required. :type credential: ~azure.core.credentials.AzureKeyCredential or ~azure.core.credentials_async.AsyncTokenCredential - :keyword api_version: The API version to use for this operation. Default value is "2024-05-01". + :keyword api_version: The API version to use for this operation. Default value is "2026-03-01". Note that overriding this default value may result in unsupported behavior. :paramtype api_version: str """ @@ -95,7 +95,7 @@ class SingleDocumentTranslationClientConfiguration: # pylint: disable=too-many- def __init__( self, endpoint: str, credential: Union[AzureKeyCredential, "AsyncTokenCredential"], **kwargs: Any ) -> None: - api_version: str = kwargs.pop("api_version", "2024-05-01") + api_version: str = kwargs.pop("api_version", "2026-03-01") if endpoint is None: raise ValueError("Parameter 'endpoint' must not be None.") diff --git a/sdk/translation/azure-ai-translation-document/azure/ai/translation/document/aio/_operations/_patch.py b/sdk/translation/azure-ai-translation-document/azure/ai/translation/document/aio/_operations/_patch.py index 1961b4fee008..ff7ce5c0c34e 100644 --- a/sdk/translation/azure-ai-translation-document/azure/ai/translation/document/aio/_operations/_patch.py +++ b/sdk/translation/azure-ai-translation-document/azure/ai/translation/document/aio/_operations/_patch.py @@ -255,7 +255,9 @@ async def translate( target_language: str, source_language: Optional[str] = None, category: Optional[str] = None, + deployment_name: Optional[str] = None, allow_fallback: Optional[bool] = None, + translate_text_within_image: Optional[bool] = None, **kwargs: Any ) -> AsyncIterator[bytes]: """Submit a single document translation request to the Document Translation service. @@ -282,10 +284,16 @@ async def translate( project details to this parameter to use your deployed customized system. Default value is: general. Default value is None. :paramtype category: str + :keyword deployment_name: Deployment name of the custom translation model for the translation + request. Default value is None. + :paramtype deployment_name: str :keyword allow_fallback: Specifies that the service is allowed to fall back to a general system when a custom system doesn't exist. Possible values are: true (default) or false. Default value is None. :paramtype allow_fallback: bool + :keyword translate_text_within_image: Optional boolean parameter to translate text within an + image in the document. Default value is None. + :paramtype translate_text_within_image: bool :return: AsyncIterator[bytes] :rtype: AsyncIterator[bytes] :raises ~azure.core.exceptions.HttpResponseError: @@ -308,7 +316,9 @@ async def translate( target_language: str, source_language: Optional[str] = None, category: Optional[str] = None, + deployment_name: Optional[str] = None, allow_fallback: Optional[bool] = None, + translate_text_within_image: Optional[bool] = None, **kwargs: Any ) -> AsyncIterator[bytes]: """Submit a single document translation request to the Document Translation service. @@ -335,10 +345,16 @@ async def translate( project details to this parameter to use your deployed customized system. Default value is: general. Default value is None. :paramtype category: str + :keyword deployment_name: Deployment name of the custom translation model for the translation + request. Default value is None. + :paramtype deployment_name: str :keyword allow_fallback: Specifies that the service is allowed to fall back to a general system when a custom system doesn't exist. Possible values are: true (default) or false. Default value is None. :paramtype allow_fallback: bool + :keyword translate_text_within_image: Optional boolean parameter to translate text within an + image in the document. Default value is None. + :paramtype translate_text_within_image: bool :return: AsyncIterator[bytes] :rtype: AsyncIterator[bytes] :raises ~azure.core.exceptions.HttpResponseError: @@ -352,7 +368,9 @@ async def translate( target_language: str, source_language: Optional[str] = None, category: Optional[str] = None, + deployment_name: Optional[str] = None, allow_fallback: Optional[bool] = None, + translate_text_within_image: Optional[bool] = None, **kwargs: Any ) -> AsyncIterator[bytes]: """Submit a single document translation request to the Document Translation service. @@ -379,10 +397,16 @@ async def translate( project details to this parameter to use your deployed customized system. Default value is: general. Default value is None. :paramtype category: str + :keyword deployment_name: Deployment name of the custom translation model for the translation + request. Default value is None. + :paramtype deployment_name: str :keyword allow_fallback: Specifies that the service is allowed to fall back to a general system when a custom system doesn't exist. Possible values are: true (default) or false. Default value is None. :paramtype allow_fallback: bool + :keyword translate_text_within_image: Optional boolean parameter to translate text within an + image in the document. Default value is None. + :paramtype translate_text_within_image: bool :return: AsyncIterator[bytes] :rtype: AsyncIterator[bytes] :raises ~azure.core.exceptions.HttpResponseError: @@ -418,7 +442,9 @@ async def translate( target_language=target_language, source_language=source_language, category=category, + deployment_name=deployment_name, allow_fallback=allow_fallback, + translate_text_within_image=translate_text_within_image, api_version=self._config.api_version, files=_files, data=_data, diff --git a/sdk/translation/azure-ai-translation-document/azure/ai/translation/document/aio/_patch.py b/sdk/translation/azure-ai-translation-document/azure/ai/translation/document/aio/_patch.py index e4d7ef70cc73..420318ca5c5c 100644 --- a/sdk/translation/azure-ai-translation-document/azure/ai/translation/document/aio/_patch.py +++ b/sdk/translation/azure-ai-translation-document/azure/ai/translation/document/aio/_patch.py @@ -48,7 +48,7 @@ class DocumentTranslationClient(GeneratedDocumentTranslationClient): AzureKeyCredential type or a TokenCredential type. Required. :type credential: ~azure.core.credentials.AzureKeyCredential or ~azure.core.credentials_async.AsyncTokenCredential - :keyword api_version: The API version to use for this operation. Default value is "2024-05-01". + :keyword api_version: The API version to use for this operation. Default value is "2026-03-01". Note that overriding this default value may result in unsupported behavior. :paramtype api_version: str :keyword int polling_interval: Default waiting time between two polls for LRO operations if no @@ -132,6 +132,8 @@ async def begin_translation( storage_type: Optional[Union[str, StorageInputType]] = None, category_id: Optional[str] = None, glossaries: Optional[List[TranslationGlossary]] = None, + deployment_name: Optional[str] = None, + translate_text_within_image: Optional[bool] = None, **kwargs: Any ) -> AsyncDocumentTranslationLROPoller[AsyncItemPaged[DocumentStatus]]: """Begin translating the document(s) in your source container to your target container @@ -162,6 +164,10 @@ async def begin_translation( :keyword str category_id: Category / custom model ID for using custom translation. :keyword glossaries: Glossaries to apply to translation. :paramtype glossaries: list[~azure.ai.translation.document.TranslationGlossary] + :keyword str deployment_name: Deployment name of the custom translation model for the + translation request. + :keyword bool translate_text_within_image: Whether to translate text embedded within images + in the documents. :return: An instance of an AsyncDocumentTranslationLROPoller. Call `result()` on the poller object to return a pageable of DocumentStatus. A DocumentStatus will be returned for each translation on a document. diff --git a/sdk/translation/azure-ai-translation-document/azure/ai/translation/document/models/__init__.py b/sdk/translation/azure-ai-translation-document/azure/ai/translation/document/models/__init__.py index d14cd0756fdf..eb762dbc6174 100644 --- a/sdk/translation/azure-ai-translation-document/azure/ai/translation/document/models/__init__.py +++ b/sdk/translation/azure-ai-translation-document/azure/ai/translation/document/models/__init__.py @@ -7,6 +7,7 @@ # -------------------------------------------------------------------------- from ._models import DocumentBatch +from ._models import BatchOptions from ._models import DocumentFilter from ._patch import DocumentStatus from ._models import DocumentTranslateContent @@ -31,6 +32,7 @@ __all__ = [ "DocumentBatch", + "BatchOptions", "DocumentFilter", "DocumentStatus", "DocumentTranslateContent", diff --git a/sdk/translation/azure-ai-translation-document/azure/ai/translation/document/models/_models.py b/sdk/translation/azure-ai-translation-document/azure/ai/translation/document/models/_models.py index ab006704ffce..2b5bf0e2854e 100644 --- a/sdk/translation/azure-ai-translation-document/azure/ai/translation/document/models/_models.py +++ b/sdk/translation/azure-ai-translation-document/azure/ai/translation/document/models/_models.py @@ -59,6 +59,34 @@ def __init__(self, *args: Any, **kwargs: Any) -> None: super().__init__(*args, **kwargs) +class BatchOptions(_model_base.Model): + """Translation job submission options. + + :ivar translate_text_within_image: Translate text embedded within images in the documents. + :vartype translate_text_within_image: bool + """ + + translate_text_within_image: Optional[bool] = rest_field(name="translateTextWithinImage") + """Translate text embedded within images in the documents.""" + + @overload + def __init__( + self, + *, + translate_text_within_image: Optional[bool] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + class DocumentFilter(_model_base.Model): """Document filter. @@ -129,6 +157,17 @@ class DocumentStatus(_model_base.Model): :vartype id: str :ivar characters_charged: Character charged by the API. :vartype characters_charged: int + :ivar total_image_scans_succeeded: Total image scans succeeded. + :vartype total_image_scans_succeeded: int + :ivar total_image_scans_failed: Total image scans failed. + :vartype total_image_scans_failed: int + :ivar images_charged: Images charged by the API. + :vartype images_charged: int + :ivar image_characters_detected: Characters detected within images. + :vartype image_characters_detected: int + :ivar deployment_name: Deployment name of the custom translation model used for the + translation. + :vartype deployment_name: str """ translated_document_url: Optional[str] = rest_field(name="path") @@ -154,6 +193,16 @@ class DocumentStatus(_model_base.Model): """Document Id. Required.""" characters_charged: Optional[int] = rest_field(name="characterCharged") """Character charged by the API.""" + total_image_scans_succeeded: Optional[int] = rest_field(name="totalImageScansSucceeded") + """Total image scans succeeded.""" + total_image_scans_failed: Optional[int] = rest_field(name="totalImageScansFailed") + """Total image scans failed.""" + images_charged: Optional[int] = rest_field(name="imageCharged") + """Images charged by the API.""" + image_characters_detected: Optional[int] = rest_field(name="imageCharacterDetected") + """Characters detected within images.""" + deployment_name: Optional[str] = rest_field(name="deploymentName") + """Deployment name of the custom translation model used for the translation.""" @overload def __init__( @@ -169,6 +218,11 @@ def __init__( translated_document_url: Optional[str] = None, error: Optional["_models.DocumentTranslationError"] = None, characters_charged: Optional[int] = None, + total_image_scans_succeeded: Optional[int] = None, + total_image_scans_failed: Optional[int] = None, + images_charged: Optional[int] = None, + image_characters_detected: Optional[int] = None, + deployment_name: Optional[str] = None, ) -> None: ... @overload @@ -454,16 +508,21 @@ class StartTranslationDetails(_model_base.Model): :ivar inputs: The input list of documents or folders containing documents. Required. :vartype inputs: list[~azure.ai.translation.document.models.DocumentBatch] + :ivar options: Translation job submission options. + :vartype options: ~azure.ai.translation.document.models.BatchOptions """ inputs: List["_models.DocumentBatch"] = rest_field() """The input list of documents or folders containing documents. Required.""" + options: Optional["_models.BatchOptions"] = rest_field() + """Translation job submission options.""" @overload def __init__( self, *, inputs: List["_models.DocumentBatch"], + options: Optional["_models.BatchOptions"] = None, ) -> None: ... @overload @@ -657,6 +716,12 @@ class TranslationStatusSummary(_model_base.Model): :vartype canceled: int :ivar total_characters_charged: Total characters charged by the API. Required. :vartype total_characters_charged: int + :ivar total_image_scans_succeeded: Total image scans succeeded. + :vartype total_image_scans_succeeded: int + :ivar total_image_scans_failed: Total image scans failed. + :vartype total_image_scans_failed: int + :ivar total_images_charged: Total images charged by the API. + :vartype total_images_charged: int """ total: int = rest_field() @@ -673,6 +738,12 @@ class TranslationStatusSummary(_model_base.Model): """Number of cancelled. Required.""" total_characters_charged: int = rest_field(name="totalCharacterCharged") """Total characters charged by the API. Required.""" + total_image_scans_succeeded: Optional[int] = rest_field(name="totalImageScansSucceeded") + """Total image scans succeeded.""" + total_image_scans_failed: Optional[int] = rest_field(name="totalImageScansFailed") + """Total image scans failed.""" + total_images_charged: Optional[int] = rest_field(name="totalImageCharged") + """Total images charged by the API.""" @overload def __init__( @@ -685,6 +756,9 @@ def __init__( not_yet_started: int, canceled: int, total_characters_charged: int, + total_image_scans_succeeded: Optional[int] = None, + total_image_scans_failed: Optional[int] = None, + total_images_charged: Optional[int] = None, ) -> None: ... @overload @@ -707,6 +781,9 @@ class TranslationTarget(_model_base.Model): :vartype target_url: str :ivar category_id: Category / custom system for translation request. :vartype category_id: str + :ivar deployment_name: Deployment name of the custom translation model for the translation + request. + :vartype deployment_name: str :ivar language: Target Language. Required. :vartype language: str :ivar glossaries: List of Glossary. @@ -719,6 +796,8 @@ class TranslationTarget(_model_base.Model): """Location of the folder / container with your documents. Required.""" category_id: Optional[str] = rest_field(name="category") """Category / custom system for translation request.""" + deployment_name: Optional[str] = rest_field(name="deploymentName") + """Deployment name of the custom translation model for the translation request.""" language: str = rest_field() """Target Language. Required.""" glossaries: Optional[List["_models.TranslationGlossary"]] = rest_field() @@ -733,6 +812,7 @@ def __init__( target_url: str, language: str, category_id: Optional[str] = None, + deployment_name: Optional[str] = None, glossaries: Optional[List["_models.TranslationGlossary"]] = None, storage_source: Optional[Union[str, "_models.TranslationStorageSource"]] = None, ) -> None: ... diff --git a/sdk/translation/azure-ai-translation-document/azure/ai/translation/document/models/_patch.py b/sdk/translation/azure-ai-translation-document/azure/ai/translation/document/models/_patch.py index fc95f5ceb09d..c861304cc45f 100644 --- a/sdk/translation/azure-ai-translation-document/azure/ai/translation/document/models/_patch.py +++ b/sdk/translation/azure-ai-translation-document/azure/ai/translation/document/models/_patch.py @@ -149,6 +149,9 @@ class TranslationTarget(GeneratedTranslationTarget): :vartype target_url: str :ivar category_id: Category / custom system for translation request. :vartype category_id: str + :ivar deployment_name: Deployment name of the custom translation model for the translation + request. + :vartype deployment_name: str :ivar language: Target Language. Required. :vartype language: str :ivar glossaries: List of Glossary. @@ -161,6 +164,8 @@ class TranslationTarget(GeneratedTranslationTarget): """Location of the folder / container with your documents. Required.""" category_id: Optional[str] """Category / custom system for translation request.""" + deployment_name: Optional[str] + """Deployment name of the custom translation model for the translation request.""" language: str """Target Language. Required.""" glossaries: Optional[List["TranslationGlossary"]] @@ -175,6 +180,7 @@ def __init__( language: str, *, category_id: Optional[str] = None, + deployment_name: Optional[str] = None, glossaries: Optional[List["TranslationGlossary"]] = None, storage_source: Optional[Union[str, "_models.TranslationStorageSource"]] = None, ): ... @@ -281,6 +287,17 @@ class DocumentStatus(GeneratedDocumentStatus): :vartype id: str :ivar characters_charged: Character charged by the API. :vartype characters_charged: int + :ivar total_image_scans_succeeded: Total image scans succeeded. + :vartype total_image_scans_succeeded: int + :ivar total_image_scans_failed: Total image scans failed. + :vartype total_image_scans_failed: int + :ivar images_charged: Images charged by the API. + :vartype images_charged: int + :ivar image_characters_detected: Characters detected within images. + :vartype image_characters_detected: int + :ivar deployment_name: Deployment name of the custom translation model used for the + translation. + :vartype deployment_name: str """ translated_document_url: Optional[str] @@ -306,6 +323,16 @@ class DocumentStatus(GeneratedDocumentStatus): """Document Id. Required.""" characters_charged: Optional[int] """Character charged by the API.""" + total_image_scans_succeeded: Optional[int] + """Total image scans succeeded.""" + total_image_scans_failed: Optional[int] + """Total image scans failed.""" + images_charged: Optional[int] + """Images charged by the API.""" + image_characters_detected: Optional[int] + """Characters detected within images.""" + deployment_name: Optional[str] + """Deployment name of the custom translation model used for the translation.""" @overload def __init__( @@ -321,6 +348,11 @@ def __init__( translated_document_url: Optional[str] = None, error: Optional["_models.DocumentTranslationError"] = None, characters_charged: Optional[int] = None, + total_image_scans_succeeded: Optional[int] = None, + total_image_scans_failed: Optional[int] = None, + images_charged: Optional[int] = None, + image_characters_detected: Optional[int] = None, + deployment_name: Optional[str] = None, ): ... @overload diff --git a/sdk/translation/azure-ai-translation-document/samples/README.md b/sdk/translation/azure-ai-translation-document/samples/README.md index c778f3ca4380..88cae6d17d99 100644 --- a/sdk/translation/azure-ai-translation-document/samples/README.md +++ b/sdk/translation/azure-ai-translation-document/samples/README.md @@ -60,6 +60,8 @@ what you can do with the Azure Document Translation client library. |----------------|-------------| |[sample_translation_with_azure_blob.py][begin_translation_with_azure_blob] and [sample_translation_with_azure_blob_async.py][begin_translation_with_azure_blob_async]|Translate documents with upload/download help using Azure Blob Storage| |[sample_translation_with_custom_model.py][sample_translation_with_custom_model] and [sample_translation_with_custom_model_async.py][sample_translation_with_custom_model_async]|Translate documents using a custom model| +|[sample_translation_with_custom_model_deployment.py][sample_translation_with_custom_model_deployment] and [sample_translation_with_custom_model_deployment_async.py][sample_translation_with_custom_model_deployment_async]|Translate documents using a custom translation model deployment name| +|[sample_translation_with_image_translation.py][sample_translation_with_image_translation] and [sample_translation_with_image_translation_async.py][sample_translation_with_image_translation_async]|Translate text embedded within images in your documents| |[sample_begin_translation_with_filters.py][sample_begin_translation_with_filters] and [sample_begin_translation_with_filters_async.py][sample_begin_translation_with_filters_async]|Translate documents under a folder or translate only a specific document| |[sample_list_document_statuses_with_filters.py][sample_list_document_statuses_with_filters] and [sample_list_document_statuses_with_filters_async.py][sample_list_document_statuses_with_filters_async]|List document statuses using filters| |[sample_list_translations_with_filters.py][sample_list_translations_with_filters] and [sample_list_translations_with_filters_async.py][sample_list_translations_with_filters_async]|List translation operations using filters| @@ -83,6 +85,10 @@ what you can do with the Azure Document Translation client library. [list_translations_async]: https://github.com/Azure/azure-sdk-for-python/blob/main/sdk/translation/azure-ai-translation-document/samples/async_samples/sample_list_translations_async.py [sample_translation_with_custom_model]: https://github.com/Azure/azure-sdk-for-python/blob/main/sdk/translation/azure-ai-translation-document/samples/sample_translation_with_custom_model.py [sample_translation_with_custom_model_async]: https://github.com/Azure/azure-sdk-for-python/blob/main/sdk/translation/azure-ai-translation-document/samples/async_samples/sample_translation_with_custom_model_async.py +[sample_translation_with_custom_model_deployment]: https://github.com/Azure/azure-sdk-for-python/blob/main/sdk/translation/azure-ai-translation-document/samples/sample_translation_with_custom_model_deployment.py +[sample_translation_with_custom_model_deployment_async]: https://github.com/Azure/azure-sdk-for-python/blob/main/sdk/translation/azure-ai-translation-document/samples/async_samples/sample_translation_with_custom_model_deployment_async.py +[sample_translation_with_image_translation]: https://github.com/Azure/azure-sdk-for-python/blob/main/sdk/translation/azure-ai-translation-document/samples/sample_translation_with_image_translation.py +[sample_translation_with_image_translation_async]: https://github.com/Azure/azure-sdk-for-python/blob/main/sdk/translation/azure-ai-translation-document/samples/async_samples/sample_translation_with_image_translation_async.py [sample_begin_translation_with_filters]: https://github.com/Azure/azure-sdk-for-python/blob/main/sdk/translation/azure-ai-translation-document/samples/sample_begin_translation_with_filters.py [sample_begin_translation_with_filters_async]: https://github.com/Azure/azure-sdk-for-python/blob/main/sdk/translation/azure-ai-translation-document/samples/async_samples/sample_begin_translation_with_filters_async.py [sample_list_document_statuses_with_filters]: https://github.com/Azure/azure-sdk-for-python/blob/main/sdk/translation/azure-ai-translation-document/samples/sample_list_document_statuses_with_filters.py diff --git a/sdk/translation/azure-ai-translation-document/samples/async_samples/sample_translation_with_custom_model_deployment_async.py b/sdk/translation/azure-ai-translation-document/samples/async_samples/sample_translation_with_custom_model_deployment_async.py new file mode 100644 index 000000000000..18e0cd64ef78 --- /dev/null +++ b/sdk/translation/azure-ai-translation-document/samples/async_samples/sample_translation_with_custom_model_deployment_async.py @@ -0,0 +1,75 @@ +# ------------------------------------ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. +# ------------------------------------ + +""" +FILE: sample_translation_with_custom_model_deployment_async.py + +DESCRIPTION: + This sample demonstrates how to route a document translation request through a custom + translation model by specifying the model's deployment name. After the operation completes, + each document's status reports the deployment name that was used. + + To set up your containers for translation and generate SAS tokens to your containers (or files) + with the appropriate permissions, see the README. + +USAGE: + python sample_translation_with_custom_model_deployment_async.py + + Set the environment variables with your own values before running the sample: + 1) AZURE_DOCUMENT_TRANSLATION_ENDPOINT - the endpoint to your Document Translation resource. + 2) AZURE_DOCUMENT_TRANSLATION_KEY - your Document Translation API key. + 3) AZURE_SOURCE_CONTAINER_URL - the container SAS URL to your source container which has the documents + to be translated. + 4) AZURE_TARGET_CONTAINER_URL - the container SAS URL to your target container where the translated documents + will be written. + 5) AZURE_CUSTOM_MODEL_DEPLOYMENT_NAME - the deployment name of your custom translation model. +""" + +import asyncio + + +async def sample_translation_with_custom_model_deployment_async(): + import os + from azure.core.credentials import AzureKeyCredential + from azure.ai.translation.document.aio import DocumentTranslationClient + + endpoint = os.environ["AZURE_DOCUMENT_TRANSLATION_ENDPOINT"] + key = os.environ["AZURE_DOCUMENT_TRANSLATION_KEY"] + source_container_url = os.environ["AZURE_SOURCE_CONTAINER_URL"] + target_container_url = os.environ["AZURE_TARGET_CONTAINER_URL"] + deployment_name = os.environ["AZURE_CUSTOM_MODEL_DEPLOYMENT_NAME"] + + client = DocumentTranslationClient(endpoint, AzureKeyCredential(key)) + + async with client: + # Set the deployment name of your custom translation model on the request. + poller = await client.begin_translation( + source_container_url, + target_container_url, + "es", + deployment_name=deployment_name, + ) + result = await poller.result() + + print(f"Operation status: {poller.details.status}") + print(f"Total number of translations on documents: {poller.details.documents_total_count}") + + async for document in result: + print(f"Document ID: {document.id}") + print(f"Document status: {document.status}") + if document.status == "Succeeded": + print(f"Translated document location: {document.translated_document_url}") + print(f"Deployment name used: {document.deployment_name}") + print(f"Characters charged: {document.characters_charged}\n") + elif document.error: + print(f"Error Code: {document.error.code}, Message: {document.error.message}\n") + + +async def main(): + await sample_translation_with_custom_model_deployment_async() + + +if __name__ == "__main__": + asyncio.run(main()) diff --git a/sdk/translation/azure-ai-translation-document/samples/async_samples/sample_translation_with_image_translation_async.py b/sdk/translation/azure-ai-translation-document/samples/async_samples/sample_translation_with_image_translation_async.py new file mode 100644 index 000000000000..018848f5f571 --- /dev/null +++ b/sdk/translation/azure-ai-translation-document/samples/async_samples/sample_translation_with_image_translation_async.py @@ -0,0 +1,77 @@ +# ------------------------------------ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. +# ------------------------------------ + +""" +FILE: sample_translation_with_image_translation_async.py + +DESCRIPTION: + This sample demonstrates how to start a batch translation that also translates text + embedded within images in your documents by enabling `translate_text_within_image`. + When enabled, each document's status reports image scan usage details. + + To set up your containers for translation and generate SAS tokens to your containers (or files) + with the appropriate permissions, see the README. + +USAGE: + python sample_translation_with_image_translation_async.py + + Set the environment variables with your own values before running the sample: + 1) AZURE_DOCUMENT_TRANSLATION_ENDPOINT - the endpoint to your Document Translation resource. + 2) AZURE_DOCUMENT_TRANSLATION_KEY - your Document Translation API key. + 3) AZURE_SOURCE_CONTAINER_URL - the container SAS URL to your source container which has the documents + to be translated. + 4) AZURE_TARGET_CONTAINER_URL - the container SAS URL to your target container where the translated documents + will be written. +""" + +import asyncio + + +async def sample_translation_with_image_translation_async(): + import os + from azure.core.credentials import AzureKeyCredential + from azure.ai.translation.document.aio import DocumentTranslationClient + + endpoint = os.environ["AZURE_DOCUMENT_TRANSLATION_ENDPOINT"] + key = os.environ["AZURE_DOCUMENT_TRANSLATION_KEY"] + source_container_url = os.environ["AZURE_SOURCE_CONTAINER_URL"] + target_container_url = os.environ["AZURE_TARGET_CONTAINER_URL"] + + client = DocumentTranslationClient(endpoint, AzureKeyCredential(key)) + + async with client: + # Enable translation of text embedded within images for the batch. + poller = await client.begin_translation( + source_container_url, + target_container_url, + "es", + translate_text_within_image=True, + ) + result = await poller.result() + + print(f"Operation status: {poller.details.status}") + print(f"Total number of translations on documents: {poller.details.documents_total_count}") + + async for document in result: + print(f"Document ID: {document.id}") + print(f"Document status: {document.status}") + if document.status == "Succeeded": + print(f"Translated document location: {document.translated_document_url}") + print(f"Characters charged: {document.characters_charged}") + # Image scan usage is reported when image translation is enabled. + print(f"Total image scans succeeded: {document.total_image_scans_succeeded}") + print(f"Total image scans failed: {document.total_image_scans_failed}") + print(f"Images charged: {document.images_charged}") + print(f"Characters detected within images: {document.image_characters_detected}\n") + elif document.error: + print(f"Error Code: {document.error.code}, Message: {document.error.message}\n") + + +async def main(): + await sample_translation_with_image_translation_async() + + +if __name__ == "__main__": + asyncio.run(main()) diff --git a/sdk/translation/azure-ai-translation-document/samples/sample_translation_with_custom_model_deployment.py b/sdk/translation/azure-ai-translation-document/samples/sample_translation_with_custom_model_deployment.py new file mode 100644 index 000000000000..4b9c97cf7660 --- /dev/null +++ b/sdk/translation/azure-ai-translation-document/samples/sample_translation_with_custom_model_deployment.py @@ -0,0 +1,69 @@ +# ------------------------------------ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. +# ------------------------------------ + +""" +FILE: sample_translation_with_custom_model_deployment.py + +DESCRIPTION: + This sample demonstrates how to route a document translation request through a custom + translation model by specifying the model's deployment name. The deployment name can be + supplied for both batch and single document translation. After the operation completes, + each document's status reports the deployment name that was used. + + To set up your containers for translation and generate SAS tokens to your containers (or files) + with the appropriate permissions, see the README. + +USAGE: + python sample_translation_with_custom_model_deployment.py + + Set the environment variables with your own values before running the sample: + 1) AZURE_DOCUMENT_TRANSLATION_ENDPOINT - the endpoint to your Document Translation resource. + 2) AZURE_DOCUMENT_TRANSLATION_KEY - your Document Translation API key. + 3) AZURE_SOURCE_CONTAINER_URL - the container SAS URL to your source container which has the documents + to be translated. + 4) AZURE_TARGET_CONTAINER_URL - the container SAS URL to your target container where the translated documents + will be written. + 5) AZURE_CUSTOM_MODEL_DEPLOYMENT_NAME - the deployment name of your custom translation model. +""" + + +def sample_translation_with_custom_model_deployment(): + import os + from azure.core.credentials import AzureKeyCredential + from azure.ai.translation.document import DocumentTranslationClient + + endpoint = os.environ["AZURE_DOCUMENT_TRANSLATION_ENDPOINT"] + key = os.environ["AZURE_DOCUMENT_TRANSLATION_KEY"] + source_container_url = os.environ["AZURE_SOURCE_CONTAINER_URL"] + target_container_url = os.environ["AZURE_TARGET_CONTAINER_URL"] + deployment_name = os.environ["AZURE_CUSTOM_MODEL_DEPLOYMENT_NAME"] + + client = DocumentTranslationClient(endpoint, AzureKeyCredential(key)) + + # Set the deployment name of your custom translation model on the request. + poller = client.begin_translation( + source_container_url, + target_container_url, + "es", + deployment_name=deployment_name, + ) + result = poller.result() + + print(f"Operation status: {poller.details.status}") + print(f"Total number of translations on documents: {poller.details.documents_total_count}") + + for document in result: + print(f"Document ID: {document.id}") + print(f"Document status: {document.status}") + if document.status == "Succeeded": + print(f"Translated document location: {document.translated_document_url}") + print(f"Deployment name used: {document.deployment_name}") + print(f"Characters charged: {document.characters_charged}\n") + elif document.error: + print(f"Error Code: {document.error.code}, Message: {document.error.message}\n") + + +if __name__ == "__main__": + sample_translation_with_custom_model_deployment() diff --git a/sdk/translation/azure-ai-translation-document/samples/sample_translation_with_image_translation.py b/sdk/translation/azure-ai-translation-document/samples/sample_translation_with_image_translation.py new file mode 100644 index 000000000000..0a2efecb255f --- /dev/null +++ b/sdk/translation/azure-ai-translation-document/samples/sample_translation_with_image_translation.py @@ -0,0 +1,70 @@ +# ------------------------------------ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. +# ------------------------------------ + +""" +FILE: sample_translation_with_image_translation.py + +DESCRIPTION: + This sample demonstrates how to start a batch translation that also translates text + embedded within images in your documents by enabling `translate_text_within_image`. + When enabled, each document's status reports image scan usage details. + + To set up your containers for translation and generate SAS tokens to your containers (or files) + with the appropriate permissions, see the README. + +USAGE: + python sample_translation_with_image_translation.py + + Set the environment variables with your own values before running the sample: + 1) AZURE_DOCUMENT_TRANSLATION_ENDPOINT - the endpoint to your Document Translation resource. + 2) AZURE_DOCUMENT_TRANSLATION_KEY - your Document Translation API key. + 3) AZURE_SOURCE_CONTAINER_URL - the container SAS URL to your source container which has the documents + to be translated. + 4) AZURE_TARGET_CONTAINER_URL - the container SAS URL to your target container where the translated documents + will be written. +""" + + +def sample_translation_with_image_translation(): + import os + from azure.core.credentials import AzureKeyCredential + from azure.ai.translation.document import DocumentTranslationClient + + endpoint = os.environ["AZURE_DOCUMENT_TRANSLATION_ENDPOINT"] + key = os.environ["AZURE_DOCUMENT_TRANSLATION_KEY"] + source_container_url = os.environ["AZURE_SOURCE_CONTAINER_URL"] + target_container_url = os.environ["AZURE_TARGET_CONTAINER_URL"] + + client = DocumentTranslationClient(endpoint, AzureKeyCredential(key)) + + # Enable translation of text embedded within images for the batch. + poller = client.begin_translation( + source_container_url, + target_container_url, + "es", + translate_text_within_image=True, + ) + result = poller.result() + + print(f"Operation status: {poller.details.status}") + print(f"Total number of translations on documents: {poller.details.documents_total_count}") + + for document in result: + print(f"Document ID: {document.id}") + print(f"Document status: {document.status}") + if document.status == "Succeeded": + print(f"Translated document location: {document.translated_document_url}") + print(f"Characters charged: {document.characters_charged}") + # Image scan usage is reported when image translation is enabled. + print(f"Total image scans succeeded: {document.total_image_scans_succeeded}") + print(f"Total image scans failed: {document.total_image_scans_failed}") + print(f"Images charged: {document.images_charged}") + print(f"Characters detected within images: {document.image_characters_detected}\n") + elif document.error: + print(f"Error Code: {document.error.code}, Message: {document.error.message}\n") + + +if __name__ == "__main__": + sample_translation_with_image_translation() diff --git a/sdk/translation/azure-ai-translation-document/tests/test_model_updates.py b/sdk/translation/azure-ai-translation-document/tests/test_model_updates.py index 9d644964c52b..60b9bbbca594 100644 --- a/sdk/translation/azure-ai-translation-document/tests/test_model_updates.py +++ b/sdk/translation/azure-ai-translation-document/tests/test_model_updates.py @@ -11,6 +11,8 @@ TranslationStatusSummary, TranslationGlossary, TranslationStatus, + BatchOptions, + StartTranslationDetails, ) from testcase import DocumentTranslationTest from preparer import ( @@ -208,6 +210,52 @@ def test_translation_status_args(self, **kwargs): translation_status_dict = TranslationStatus(**params) self.validate_translation_status(translation_status_dict) + def test_translation_target_deployment_name(self): + # deployment_name is exposed publicly and serialized to the wire property "deploymentName". + target = TranslationTarget( + target_url="https://t7d8641d8f25ec940prim.blob.core.windows.net/target-67890", + language="es", + deployment_name="my-deployment", + ) + assert target.deployment_name == "my-deployment" + + wire = target.as_dict() + assert wire["deploymentName"] == "my-deployment" + + def test_start_translation_details_translate_text_within_image(self): + # translate_text_within_image is carried on BatchOptions via StartTranslationDetails.options. + options = BatchOptions(translate_text_within_image=True) + assert options.translate_text_within_image is True + + details = StartTranslationDetails(inputs=[], options=options) + wire = details.as_dict() + assert wire["options"]["translateTextWithinImage"] is True + + def test_document_status_deserializes_new_fields(self): + # DocumentStatus exposes the deployment name and image scan usage returned by the service. + payload = { + "path": "https://target/doc.txt", + "sourcePath": "https://source/doc.txt", + "createdDateTimeUtc": "2026-03-01T00:00:00Z", + "lastActionDateTimeUtc": "2026-03-01T00:05:00Z", + "status": "Succeeded", + "to": "es", + "progress": 1.0, + "id": "doc-1", + "characterCharged": 100, + "deploymentName": "my-deployment", + "totalImageScansSucceeded": 6, + "totalImageScansFailed": 1, + "imageCharged": 3, + "imageCharacterDetected": 1257, + } + status = DocumentStatus(payload) + assert status.deployment_name == "my-deployment" + assert status.total_image_scans_succeeded == 6 + assert status.total_image_scans_failed == 1 + assert status.images_charged == 3 + assert status.image_characters_detected == 1257 + def validate_translation_target(self, translation_target): assert translation_target is not None assert translation_target.target_url is not None diff --git a/sdk/translation/azure-ai-translation-document/tsp-location.yaml b/sdk/translation/azure-ai-translation-document/tsp-location.yaml index bb4b6ef00eab..b3d8d7ac8a98 100644 --- a/sdk/translation/azure-ai-translation-document/tsp-location.yaml +++ b/sdk/translation/azure-ai-translation-document/tsp-location.yaml @@ -1,3 +1,3 @@ -commit: ccc08b40afbff1abe17c8250ed03a87e81fbf673 +commit: dab7850eee3d3f2415ae6799b53de94aa8ec0e95 repo: Azure/azure-rest-api-specs -directory: specification/translation/Azure.AI.DocumentTranslation +directory: specification/translation/data-plane/DocumentTranslation From 29afdf905e0819c50641d5f2139b0ae70801de86 Mon Sep 17 00:00:00 2001 From: Jiarui Guo Date: Sat, 4 Jul 2026 17:10:38 -0700 Subject: [PATCH 2/3] [Translation] Release azure-ai-translation-document as 2.0.0 GA --- sdk/translation/azure-ai-translation-document/CHANGELOG.md | 2 +- .../azure/ai/translation/document/_version.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sdk/translation/azure-ai-translation-document/CHANGELOG.md b/sdk/translation/azure-ai-translation-document/CHANGELOG.md index 0e93b9ac6e01..1c35dcd375da 100644 --- a/sdk/translation/azure-ai-translation-document/CHANGELOG.md +++ b/sdk/translation/azure-ai-translation-document/CHANGELOG.md @@ -1,6 +1,6 @@ # Release History -## 1.2.0b1 (Unreleased) +## 2.0.0 (Unreleased) ### Features Added diff --git a/sdk/translation/azure-ai-translation-document/azure/ai/translation/document/_version.py b/sdk/translation/azure-ai-translation-document/azure/ai/translation/document/_version.py index 5bf479b145f7..8f2350dd3b0c 100644 --- a/sdk/translation/azure-ai-translation-document/azure/ai/translation/document/_version.py +++ b/sdk/translation/azure-ai-translation-document/azure/ai/translation/document/_version.py @@ -6,4 +6,4 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -VERSION = "1.2.0b1" +VERSION = "2.0.0" From d96c866e410f72c249ecc22905d58f86a830aa26 Mon Sep 17 00:00:00 2001 From: Jiarui Guo Date: Sun, 5 Jul 2026 17:02:41 -0700 Subject: [PATCH 3/3] [Translation] Add 2026-03-01 live tests; use Entra ID storage auth in test harness Adds deployment_name and image-translation live tests (sync + async) and the image test document. Refactors the test storage helpers to authenticate to Azure Storage with a token credential (DefaultAzureCredential) and pass plain container URLs to the Document Translation service (accessed via the Translator resource's managed identity), so tests run without account-key/shared-key access. --- .../tests/TestData/test-doc-image.docx | Bin 0 -> 195964 bytes .../tests/test_translation.py | 68 ++++++++++++++++- .../tests/test_translation_async.py | 69 +++++++++++++++++- .../tests/testcase.py | 43 ++++++----- 4 files changed, 150 insertions(+), 30 deletions(-) create mode 100644 sdk/translation/azure-ai-translation-document/tests/TestData/test-doc-image.docx diff --git a/sdk/translation/azure-ai-translation-document/tests/TestData/test-doc-image.docx b/sdk/translation/azure-ai-translation-document/tests/TestData/test-doc-image.docx new file mode 100644 index 0000000000000000000000000000000000000000..a5c220411ae766c16e0a6f1ebdc9656a1d88d529 GIT binary patch literal 195964 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

FH**+QLl0X+ssxncflqCE1y=@b_<5Dr)MeZRatF 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 literal 0 HcmV?d00001 diff --git a/sdk/translation/azure-ai-translation-document/tests/test_translation.py b/sdk/translation/azure-ai-translation-document/tests/test_translation.py index 3407d20ce0f8..d5576611b9f4 100644 --- a/sdk/translation/azure-ai-translation-document/tests/test_translation.py +++ b/sdk/translation/azure-ai-translation-document/tests/test_translation.py @@ -26,6 +26,8 @@ DocumentTranslationClientPreparer = functools.partial(_DocumentTranslationClientPreparer, DocumentTranslationClient) GLOSSARY_FILE_NAME = os.path.abspath(os.path.join(os.path.abspath(__file__), "..", "./glossaries-valid.csv")) +# A document that embeds an image containing legible text, used to exercise image translation. +IMAGE_DOC_FILE_NAME = os.path.abspath(os.path.join(os.path.dirname(__file__), "TestData", "test-doc-image.docx")) class TestTranslation(DocumentTranslationTest): @@ -503,6 +505,61 @@ def test_single_input_with_kwarg_successful(self, **kwargs): self._validate_doc_status(doc, target_language="fr") return variables + @DocumentTranslationPreparer() + @DocumentTranslationClientPreparer() + @recorded_by_proxy + def test_single_source_single_target_with_deployment_name(self, **kwargs): + client = kwargs.pop("client") + variables = kwargs.pop("variables", {}) + # prepare containers and test data + blob_data = b"This is some text" + source_container_sas_url = self.create_source_container(data=Document(data=blob_data), variables=variables) + target_container_sas_url = self.create_target_container(variables=variables) + + # "general" routes to the default NMT model, so no custom model deployment is required. + translation_inputs = [ + DocumentTranslationInput( + source_url=source_container_sas_url, + targets=[ + TranslationTarget(target_url=target_container_sas_url, language="fr", deployment_name="general") + ], + ) + ] + + # The service accepts the deployment name and translates successfully. The document status does + # not echo the deployment name back for the default ("general") model, so request-side + # serialization of deployment_name is verified separately in the model tests. + self._begin_and_validate_translation(client, translation_inputs, 1, "fr") + return variables + + @DocumentTranslationPreparer() + @DocumentTranslationClientPreparer() + @recorded_by_proxy + def test_single_source_single_target_with_image_translation(self, **kwargs): + client = kwargs.pop("client") + variables = kwargs.pop("variables", {}) + # The document must contain an image with legible text so image scanning has something to translate. + with open(IMAGE_DOC_FILE_NAME, "rb") as fd: + image_doc_data = fd.read() + source_container_sas_url = self.create_source_container( + data=Document(name="test-doc-image", suffix=".docx", data=image_doc_data), variables=variables + ) + target_container_sas_url = self.create_target_container(variables=variables) + + # Enable translation of text embedded within images for the batch. + poller = client.begin_translation( + source_container_sas_url, target_container_sas_url, "fr", translate_text_within_image=True + ) + result = poller.result() + + self._validate_translation_metadata(poller, status="Succeeded", total=1, succeeded=1) + for doc in result: + # The request enables image translation (verified on the wire) and the document translates + # successfully. Image scan usage is only reported by the service when images are actually + # scanned, so it is not asserted here. + self._validate_doc_status(doc, target_language="fr") + return variables + @pytest.mark.skip("Flaky test") @pytest.mark.live_test_only @DocumentTranslationPreparer() @@ -513,12 +570,13 @@ def test_translation_with_glossary(self, **kwargs): source_container_sas_url = self.create_source_container(data=[doc]) target_container_sas_url = self.create_target_container() - container_client = ContainerClient(self.storage_endpoint, self.source_container_name, self.storage_key) + container_client = ContainerClient( + self.storage_endpoint, self.source_container_name, credential=self.get_storage_credential() + ) with open(GLOSSARY_FILE_NAME, "rb") as fd: container_client.upload_blob(name=GLOSSARY_FILE_NAME, data=fd.read()) - prefix, suffix = source_container_sas_url.split("?") - glossary_file_sas_url = prefix + "/" + GLOSSARY_FILE_NAME + "?" + suffix + glossary_file_sas_url = source_container_sas_url + "/" + GLOSSARY_FILE_NAME poller = client.begin_translation( source_container_sas_url, @@ -528,7 +586,9 @@ def test_translation_with_glossary(self, **kwargs): ) result = poller.result() - container_client = ContainerClient(self.storage_endpoint, self.target_container_name, self.storage_key) + container_client = ContainerClient( + self.storage_endpoint, self.target_container_name, credential=self.get_storage_credential() + ) # download translated file and assert that translation reflects glossary changes document = doc.name + doc.suffix diff --git a/sdk/translation/azure-ai-translation-document/tests/test_translation_async.py b/sdk/translation/azure-ai-translation-document/tests/test_translation_async.py index 30f2fe07adbe..eff51499e39b 100644 --- a/sdk/translation/azure-ai-translation-document/tests/test_translation_async.py +++ b/sdk/translation/azure-ai-translation-document/tests/test_translation_async.py @@ -23,6 +23,8 @@ DocumentTranslationClientPreparer = functools.partial(_DocumentTranslationClientPreparer, DocumentTranslationClient) GLOSSARY_FILE_NAME = os.path.abspath(os.path.join(os.path.abspath(__file__), "..", "./glossaries-valid.csv")) +# A document that embeds an image containing legible text, used to exercise image translation. +IMAGE_DOC_FILE_NAME = os.path.abspath(os.path.join(os.path.dirname(__file__), "TestData", "test-doc-image.docx")) class TestTranslation(AsyncDocumentTranslationTest): @@ -510,6 +512,62 @@ async def test_single_input_with_kwarg_successful(self, **kwargs): self._validate_doc_status(doc, target_language="fr") return variables + @DocumentTranslationPreparer() + @DocumentTranslationClientPreparer() + @recorded_by_proxy_async + async def test_single_source_single_target_with_deployment_name(self, **kwargs): + client = kwargs.pop("client") + variables = kwargs.pop("variables", {}) + # prepare containers and test data + blob_data = b"This is some text" + source_container_sas_url = self.create_source_container(data=Document(data=blob_data), variables=variables) + target_container_sas_url = self.create_target_container(variables=variables) + + # "general" routes to the default NMT model, so no custom model deployment is required. + translation_inputs = [ + DocumentTranslationInput( + source_url=source_container_sas_url, + targets=[ + TranslationTarget(target_url=target_container_sas_url, language="fr", deployment_name="general") + ], + ) + ] + + # The service accepts the deployment name and translates successfully. The document status does + # not echo the deployment name back for the default ("general") model, so request-side + # serialization of deployment_name is verified separately in the model tests. + await self._begin_and_validate_translation_async(client, translation_inputs, 1, "fr") + return variables + + @DocumentTranslationPreparer() + @DocumentTranslationClientPreparer() + @recorded_by_proxy_async + async def test_single_source_single_target_with_image_translation(self, **kwargs): + client = kwargs.pop("client") + variables = kwargs.pop("variables", {}) + # The document must contain an image with legible text so image scanning has something to translate. + with open(IMAGE_DOC_FILE_NAME, "rb") as fd: + image_doc_data = fd.read() + source_container_sas_url = self.create_source_container( + data=Document(name="test-doc-image", suffix=".docx", data=image_doc_data), variables=variables + ) + target_container_sas_url = self.create_target_container(variables=variables) + + async with client: + # Enable translation of text embedded within images for the batch. + poller = await client.begin_translation( + source_container_sas_url, target_container_sas_url, "fr", translate_text_within_image=True + ) + result = await poller.result() + + self._validate_translation_metadata(poller, status="Succeeded", total=1, succeeded=1) + async for doc in result: + # The request enables image translation (verified on the wire) and the document translates + # successfully. Image scan usage is only reported by the service when images are actually + # scanned, so it is not asserted here. + self._validate_doc_status(doc, target_language="fr") + return variables + @pytest.mark.skip("Flaky test") @pytest.mark.live_test_only @DocumentTranslationPreparer() @@ -520,12 +578,13 @@ async def test_translation_with_glossary(self, **kwargs): source_container_sas_url = self.create_source_container(data=[doc]) target_container_sas_url = self.create_target_container() - container_client = ContainerClient(self.storage_endpoint, self.source_container_name, self.storage_key) + container_client = ContainerClient( + self.storage_endpoint, self.source_container_name, credential=self.get_storage_credential() + ) with open(GLOSSARY_FILE_NAME, "rb") as fd: container_client.upload_blob(name=GLOSSARY_FILE_NAME, data=fd.read()) - prefix, suffix = source_container_sas_url.split("?") - glossary_file_sas_url = prefix + "/" + GLOSSARY_FILE_NAME + "?" + suffix + glossary_file_sas_url = source_container_sas_url + "/" + GLOSSARY_FILE_NAME async with client: poller = await client.begin_translation( source_container_sas_url, @@ -535,7 +594,9 @@ async def test_translation_with_glossary(self, **kwargs): ) result = await poller.result() - container_client = ContainerClient(self.storage_endpoint, self.target_container_name, self.storage_key) + container_client = ContainerClient( + self.storage_endpoint, self.target_container_name, credential=self.get_storage_credential() + ) # download translated file and assert that translation reflects glossary changes document = doc.name + doc.suffix diff --git a/sdk/translation/azure-ai-translation-document/tests/testcase.py b/sdk/translation/azure-ai-translation-document/tests/testcase.py index 8d2abead3989..93389359e080 100644 --- a/sdk/translation/azure-ai-translation-document/tests/testcase.py +++ b/sdk/translation/azure-ai-translation-document/tests/testcase.py @@ -5,11 +5,11 @@ import os import time -import datetime import uuid from azure.ai.translation.document.models import DocumentBatch, SourceInput, StartTranslationDetails from devtools_testutils import AzureRecordedTestCase, set_custom_default_matcher -from azure.storage.blob import generate_container_sas, ContainerClient +from azure.storage.blob import ContainerClient +from azure.identity import DefaultAzureCredential from azure.ai.translation.document import DocumentTranslationInput, TranslationTarget @@ -39,9 +39,11 @@ def storage_name(self): def storage_endpoint(self): return "https://" + self.storage_name + ".blob.core.windows.net/" - @property - def storage_key(self): - return os.getenv("DOCUMENT_TRANSLATION_STORAGE_KEY", "fakeZmFrZV9hY29jdW50X2tleQ==") + def get_storage_credential(self): + # Recorded tests authenticate to storage with Entra ID (RBAC) rather than an + # account key, so they work even when the storage account has shared-key access + # disabled. Only used in live/record mode; playback never touches storage. + return DefaultAzureCredential() def upload_documents(self, data, container_client): if isinstance(data, list): @@ -55,40 +57,37 @@ def create_source_container(self, data, variables={}, **kwargs): var_key = "source_container_name" + container_suffix if self.is_live: self.source_container_name = variables[var_key] = "src" + str(uuid.uuid4()) - container_client = ContainerClient(self.storage_endpoint, variables[var_key], self.storage_key) + container_client = ContainerClient( + self.storage_endpoint, variables[var_key], credential=self.get_storage_credential() + ) container_client.create_container() self.upload_documents(data, container_client) - return self.generate_sas_url(variables[var_key], "rl") + return self.container_url(variables[var_key]) def create_target_container(self, data=None, variables={}, **kwargs): container_suffix = kwargs.get("container_suffix", "") var_key = "target_container_name" + container_suffix if self.is_live: self.target_container_name = variables[var_key] = "target" + str(uuid.uuid4()) - container_client = ContainerClient(self.storage_endpoint, variables[var_key], self.storage_key) + container_client = ContainerClient( + self.storage_endpoint, variables[var_key], credential=self.get_storage_credential() + ) container_client.create_container() if data: self.upload_documents(data, container_client) - return self.generate_sas_url(variables[var_key], "wl") + return self.container_url(variables[var_key]) - def generate_sas_url(self, container_name, permission): - # this can be reverted to set_bodiless_matcher() after tests are re-recorded and don't contain these headers + def container_url(self, container_name): + # The Document Translation service reads/writes the containers using the Translator + # resource's managed identity, so a plain container URL (no SAS) is passed. This + # avoids any dependency on the storage account key / shared-key access. + # This can be reverted to set_bodiless_matcher() after tests are re-recorded. set_custom_default_matcher( compare_bodies=False, excluded_headers="Authorization,Content-Length,x-ms-client-request-id,x-ms-request-id" ) - sas_token = self.generate_sas( - generate_container_sas, - account_name=self.storage_name, - container_name=container_name, - account_key=self.storage_key, - permission=permission, - expiry=datetime.datetime.utcnow() + datetime.timedelta(hours=2), - ) - - container_sas_url = self.storage_endpoint + container_name + "?" + sas_token - return container_sas_url + return self.storage_endpoint + container_name def wait(self, duration=30): if self.is_live: