def sample_list_all_submitted_jobs():
    import os
    from azure.core.credentials import AzureKeyCredential
    from azure.ai.documenttranslation import (
        DocumentTranslationClient,
    )

    endpoint = os.environ["AZURE_DOCUMENT_TRANSLATION_ENDPOINT"]
    key = os.environ["AZURE_DOCUMENT_TRANSLATION_KEY"]

    client = DocumentTranslationClient(endpoint, AzureKeyCredential(key))
    jobs = client.list_submitted_jobs()  # type: ItemPaged[JobStatusDetail]

    for job in jobs:
        if job.status in ["NotStarted", "Running"]:
            job = client.wait_until_done(job.id)

        print("Job ID: {}".format(job.id))
        print("Job status: {}".format(job.status))
        print("Job created on: {}".format(job.created_on))
        print("Job last updated on: {}".format(job.last_updated_on))
        print("Total number of translations on documents: {}".format(job.documents_total_count))
        print("Total number of characters charged: {}".format(job.total_characters_charged))

        print("Of total documents...")
        print("{} failed".format(job.documents_failed_count))
        print("{} succeeded".format(job.documents_succeeded_count))
        print("{} in progress".format(job.documents_in_progress_count))
        print("{} not yet started".format(job.documents_not_yet_started_count))
        print("{} cancelled".format(job.documents_cancelled_count))
def sample_batch_translation():
    import os
    from azure.core.credentials import AzureKeyCredential
    from azure.ai.documenttranslation import (DocumentTranslationClient,
                                              DocumentTranslationInput,
                                              TranslationTarget)

    endpoint = os.environ["AZURE_DOCUMENT_TRANSLATION_ENDPOINT"]
    key = os.environ["AZURE_DOCUMENT_TRANSLATION_KEY"]
    source_container_url_en = os.environ["AZURE_SOURCE_CONTAINER_URL_EN"]
    source_container_url_de = os.environ["AZURE_SOURCE_CONTAINER_URL_DE"]
    target_container_url_es = os.environ["AZURE_TARGET_CONTAINER_URL_ES"]
    target_container_url_fr = os.environ["AZURE_TARGET_CONTAINER_URL_FR"]

    client = DocumentTranslationClient(endpoint, AzureKeyCredential(key))

    translation_inputs = [
        DocumentTranslationInput(
            source_url=source_container_url_en,
            targets=[
                TranslationTarget(target_url=target_container_url_es,
                                  language_code="es"),
                TranslationTarget(target_url=target_container_url_fr,
                                  language_code="fr")
            ]),
        DocumentTranslationInput(
            source_url=source_container_url_de,
            targets=[
                TranslationTarget(target_url=target_container_url_es,
                                  language_code="es"),
                TranslationTarget(target_url=target_container_url_fr,
                                  language_code="fr")
            ])
    ]

    job_detail = client.create_translation_job(
        translation_inputs)  # type: JobStatusResult

    print("Job initial status: {}".format(job_detail.status))
    print("Number of translations on documents: {}".format(
        job_detail.documents_total_count))

    job_result = client.wait_until_done(job_detail.id)  # type: JobStatusResult
    if job_result.status == "Succeeded":
        print("We translated our documents!")
        if job_result.documents_failed_count > 0:
            check_documents(client, job_result.id)

    elif job_result.status in ["Failed", "ValidationFailed"]:
        if job_result.error:
            print("Translation job failed: {}: {}".format(
                job_result.error.code, job_result.error.message))
        check_documents(client, job_result.id)
        exit(1)
def sample_authentication_api_key():
    from azure.core.credentials import AzureKeyCredential
    from azure.ai.documenttranslation import DocumentTranslationClient

    endpoint = os.environ["AZURE_DOCUMENT_TRANSLATION_ENDPOINT"]
    key = os.environ["AZURE_DOCUMENT_TRANSLATION_KEY"]

    document_translation_client = DocumentTranslationClient(
        endpoint, AzureKeyCredential(key))

    # make calls with authenticated client
    result = document_translation_client.get_document_formats()
def sample_document_status_checks():
    import os
    import time
    from azure.core.credentials import AzureKeyCredential
    from azure.ai.documenttranslation import (DocumentTranslationClient,
                                              DocumentTranslationInput,
                                              TranslationTarget)

    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))

    job_result = client.create_translation_job(inputs=[
        DocumentTranslationInput(source_url=source_container_url,
                                 targets=[
                                     TranslationTarget(
                                         target_url=target_container_url,
                                         language_code="es")
                                 ])
    ])  # type: JobStatusResult

    completed_docs = []
    while not job_result.has_completed:
        time.sleep(30)

        doc_statuses = client.list_all_document_statuses(job_result.id)
        for document in doc_statuses:
            if document.id not in completed_docs:
                if document.status == "Succeeded":
                    print(
                        "Document at {} was translated to {} language".format(
                            document.translated_document_url,
                            document.translate_to))
                    completed_docs.append(document.id)
                if document.status == "Failed":
                    print(
                        "Document ID: {}, Error Code: {}, Message: {}".format(
                            document.id, document.error.code,
                            document.error.message))
                    completed_docs.append(document.id)
                if document.status == "Running":
                    print(
                        "Document ID: {}, translation progress is {} percent".
                        format(document.id,
                               document.translation_progress * 100))

        job_result = client.get_job_status(job_result.id)

    print("\nTranslation job completed.")
def sample_translation_with_glossaries():
    import os
    from azure.core.credentials import AzureKeyCredential
    from azure.ai.documenttranslation import (
        DocumentTranslationClient,
        DocumentTranslationInput,
        TranslationTarget,
        TranslationGlossary
    )

    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"]
    glossary_url = os.environ["AZURE_TRANSLATION_GLOSSARY_URL"]

    client = DocumentTranslationClient(endpoint, AzureKeyCredential(key))

    inputs = DocumentTranslationInput(
                source_url=source_container_url,
                targets=[
                    TranslationTarget(
                        target_url=target_container_url,
                        language_code="es",
                        glossaries=[TranslationGlossary(glossary_url=glossary_url, file_format="TSV")]
                    )
                ]
            )

    job = client.create_translation_job(inputs=[inputs])  # type: JobStatusResult

    job_result = client.wait_until_done(job.id)  # type: JobStatusResult

    print("Job status: {}".format(job_result.status))
    print("Job created on: {}".format(job_result.created_on))
    print("Job last updated on: {}".format(job_result.last_updated_on))
    print("Total number of translations on documents: {}".format(job_result.documents_total_count))

    print("\nOf total documents...")
    print("{} failed".format(job_result.documents_failed_count))
    print("{} succeeded".format(job_result.documents_succeeded_count))

    doc_results = client.list_all_document_statuses(job_result.id)  # type: ItemPaged[DocumentStatusResult]
    for document in doc_results:
        print("Document ID: {}".format(document.id))
        print("Document status: {}".format(document.status))
        if document.status == "Succeeded":
            print("Document location: {}".format(document.translated_document_url))
            print("Translated to language: {}\n".format(document.translate_to))
        else:
            print("Error Code: {}, Message: {}\n".format(document.error.code, document.error.message))
def sample_translation_status_checks():
    import os
    import time
    from azure.core.credentials import AzureKeyCredential
    from azure.ai.documenttranslation import (DocumentTranslationClient,
                                              BatchDocumentInput,
                                              StorageTarget)

    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_es = os.environ["AZURE_TARGET_CONTAINER_URL_ES"]
    target_container_url_fr = os.environ["AZURE_TARGET_CONTAINER_URL_FR"]

    client = DocumentTranslationClient(endpoint, AzureKeyCredential(key))

    batch = [
        BatchDocumentInput(
            source_url=source_container_url,
            targets=[
                StorageTarget(target_url=target_container_url_es,
                              language="es"),
                StorageTarget(target_url=target_container_url_fr,
                              language="fr")
            ],
            storage_type="folder",
            prefix="document_2021")
    ]

    job_detail = client.create_translation_job(batch)

    while True:
        job_detail = client.get_job_status(
            job_detail.id)  # type: JobStatusDetail
        if job_detail.status in ["NotStarted", "Running"]:
            time.sleep(30)
            continue

        elif job_detail.status in ["Failed", "ValidationFailed"]:
            if job_detail.error:
                print("Translation job failed: {}: {}".format(
                    job_detail.error.code, job_detail.error.message))
            check_documents(client, job_detail.id)
            exit(1)

        elif job_detail.status == "Succeeded":
            print("We translated our documents!")
            if job_detail.documents_failed_count > 0:
                check_documents(client, job_detail.id)
            break
def sample_custom_translation():
    import os
    from azure.core.credentials import AzureKeyCredential
    from azure.ai.documenttranslation import (DocumentTranslationClient,
                                              BatchDocumentInput,
                                              StorageTarget)

    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_fr = os.environ["AZURE_TARGET_CONTAINER_URL_FR"]
    category_id = os.environ["AZURE_DOCUMENT_TRANSLATION_MODEL_ID"]

    client = DocumentTranslationClient(endpoint, AzureKeyCredential(key))

    batch = [
        BatchDocumentInput(source_url=source_container_url,
                           targets=[
                               StorageTarget(
                                   target_url=target_container_url_fr,
                                   language="fr",
                                   category_id=category_id,
                                   glossaries=["https://exampleglossary"])
                           ],
                           prefix="document_2021")
    ]

    job_detail = client.create_translation_job(batch)  # type: JobStatusDetail

    print("Job initial status: {}".format(job_detail.status))
    print("Number of translations on documents: {}".format(
        job_detail.documents_total_count))

    job_result = client.wait_until_done(job_detail.id)  # type: JobStatusDetail
    if job_result.status == "Succeeded":
        print("We translated our documents!")
        if job_result.documents_failed_count > 0:
            check_documents(client, job_result.id)

    elif job_result.status in ["Failed", "ValidationFailed"]:
        if job_result.error:
            print("Translation job failed: {}: {}".format(
                job_result.error.code, job_result.error.message))
        check_documents(client, job_result.id)
        exit(1)
Beispiel #8
0
def sample_cancel_translation_job():
    import os
    from azure.core.credentials import AzureKeyCredential
    from azure.ai.documenttranslation import (
        DocumentTranslationClient,
        BatchDocumentInput,
        StorageTarget
    )

    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_es = os.environ["AZURE_TARGET_CONTAINER_URL_ES"]

    client = DocumentTranslationClient(endpoint, AzureKeyCredential(key))

    batch = [
        BatchDocumentInput(
            source_url=source_container_url,
            targets=[
                StorageTarget(
                    target_url=target_container_url_es,
                    language="es"
                )
            ],
            storage_type="file"
        )
    ]

    job_detail = client.create_translation_job(batch)  # type: JobStatusDetail

    print("Job initial status: {}".format(job_detail.status))
    print("Number of translations on documents: {}".format(job_detail.documents_total_count))

    client.cancel_job(job_detail.id)
    job_detail = client.get_job_status(job_detail.id)  # type: JobStatusDetail

    if job_detail.status in ["Cancelled", "Cancelling"]:
        print("We cancelled job with ID: {}".format(job_detail.id))
Beispiel #9
0
def sample_batch_translation_with_storage():
    import os
    from azure.core.credentials import AzureKeyCredential
    from azure.ai.documenttranslation import (DocumentTranslationClient,
                                              DocumentTranslationInput,
                                              TranslationTarget)
    from azure.storage.blob import ContainerClient, generate_container_sas, ContainerSasPermissions

    endpoint = os.environ["AZURE_DOCUMENT_TRANSLATION_ENDPOINT"]
    key = os.environ["AZURE_DOCUMENT_TRANSLATION_KEY"]
    source_storage_endpoint = os.environ["AZURE_STORAGE_SOURCE_ENDPOINT"]
    source_storage_account_name = os.environ[
        "AZURE_STORAGE_SOURCE_ACCOUNT_NAME"]
    source_storage_container_name = os.environ[
        "AZURE_STORAGE_SOURCE_CONTAINER_NAME"]
    source_storage_key = os.environ["AZURE_STORAGE_SOURCE_KEY"]
    target_storage_endpoint = os.environ["AZURE_STORAGE_TARGET_ENDPOINT"]
    target_storage_account_name = os.environ[
        "AZURE_STORAGE_TARGET_ACCOUNT_NAME"]
    target_storage_container_name = os.environ[
        "AZURE_STORAGE_TARGET_CONTAINER_NAME"]
    target_storage_key = os.environ["AZURE_STORAGE_TARGET_KEY"]

    translation_client = DocumentTranslationClient(endpoint,
                                                   AzureKeyCredential(key))

    container_client = ContainerClient(
        source_storage_endpoint,
        container_name=source_storage_container_name,
        credential=source_storage_key)

    with open("document.txt", "rb") as doc:
        container_client.upload_blob("document.txt", doc)

    source_container_sas = generate_container_sas(
        account_name=source_storage_account_name,
        container_name=source_storage_container_name,
        account_key=source_storage_key,
        permission=ContainerSasPermissions.from_string("rl"))

    target_container_sas = generate_container_sas(
        account_name=target_storage_account_name,
        container_name=target_storage_container_name,
        account_key=target_storage_key,
        permission=ContainerSasPermissions.from_string("rlwd"))

    source_container_url = source_storage_endpoint + "/" + source_storage_container_name + "?" + source_container_sas
    target_container_url = target_storage_endpoint + "/" + target_storage_container_name + "?" + target_container_sas

    translation_inputs = [
        DocumentTranslationInput(source_url=source_container_url,
                                 targets=[
                                     TranslationTarget(
                                         target_url=target_container_url,
                                         language_code="es")
                                 ],
                                 prefix="document")
    ]

    job_detail = translation_client.create_translation_job(translation_inputs)
    job_result = translation_client.wait_until_done(job_detail.id)

    if job_result.status == "Succeeded":
        print("We translated our documents!")
        if job_result.documents_failed_count > 0:
            check_documents(translation_client, job_result.id)

    elif job_result.status in ["Failed", "ValidationFailed"]:
        if job_result.error:
            print("Translation job failed: {}: {}".format(
                job_result.error.code, job_result.error.message))
        check_documents(translation_client, job_result.id)
        exit(1)

    container_client = ContainerClient(
        target_storage_endpoint,
        container_name=target_storage_container_name,
        credential=target_storage_key)

    target_container_client = container_client.from_container_url(
        target_container_url)

    with open("translated.txt", "wb") as my_blob:
        download_stream = target_container_client.download_blob("document.txt")
        my_blob.write(download_stream.readall())
    def sample_translation_with_azure_blob(self):

        translation_client = DocumentTranslationClient(
            self.endpoint, AzureKeyCredential(self.key))

        blob_service_client = BlobServiceClient(self.storage_endpoint,
                                                credential=self.storage_key)

        source_container = self.create_container(
            blob_service_client,
            container_name=self.storage_source_container_name
            or "translation-source-container",
        )
        target_container = self.create_container(
            blob_service_client,
            container_name=self.storage_target_container_name
            or "translation-target-container")

        if self.document_name:
            with open(self.document_name, "rb") as doc:
                source_container.upload_blob(self.document_name, doc)
        else:
            self.document_name = "example_document.txt"
            source_container.upload_blob(
                name=self.document_name,
                data=
                b"This is an example translation with the document translation client library"
            )
        print("Uploaded document {} to storage container {}".format(
            self.document_name, source_container.container_name))

        source_container_sas_url = self.generate_sas_url(source_container,
                                                         permissions="rl")
        target_container_sas_url = self.generate_sas_url(target_container,
                                                         permissions="wl")

        translation_inputs = [
            DocumentTranslationInput(
                source_url=source_container_sas_url,
                targets=[
                    TranslationTarget(target_url=target_container_sas_url,
                                      language_code="fr")
                ])
        ]

        job = translation_client.create_translation_job(translation_inputs)
        print("Created translation job with ID: {}".format(job.id))
        print("Waiting until job completes...")

        job_result = translation_client.wait_until_done(job.id)
        print("Job status: {}".format(job_result.status))

        doc_results = translation_client.list_all_document_statuses(
            job_result.id)

        print("\nDocument results:")
        for document in doc_results:
            print("Document ID: {}".format(document.id))
            print("Document status: {}".format(document.status))
            if document.status == "Succeeded":
                print("Document location: {}".format(
                    document.translated_document_url))
                print("Translated to language: {}\n".format(
                    document.translate_to))

                blob_client = BlobClient.from_blob_url(
                    document.translated_document_url,
                    credential=self.storage_key)
                with open("translated_" + self.document_name, "wb") as my_blob:
                    download_stream = blob_client.download_blob()
                    my_blob.write(download_stream.readall())

                print("Downloaded {} locally".format("translated_" +
                                                     self.document_name))
            else:
                print("\nThere was a problem translating your document.")
                print("Document Error Code: {}, Message: {}\n".format(
                    document.error.code, document.error.message))