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