def test_list_statuses(self, client): # prepare containers and test data blob_data = [Document(data=b'This is some text')] source_container_sas_url = self.create_source_container(data=blob_data) target_container_sas_url = self.create_target_container() target_language = "es" # prepare translation inputs translation_inputs = [ DocumentTranslationInput( source_url=source_container_sas_url, targets=[ TranslationTarget(target_url=target_container_sas_url, language_code=target_language) ]) ] # submit and validate job job_id = self._submit_and_validate_translation_job( client, translation_inputs, len(blob_data)) # check doc statuses doc_statuses = list(client.list_all_document_statuses( job_id)) # convert from generic iterator to list self.assertEqual(len(doc_statuses), len(blob_data)) for document in doc_statuses: self._validate_doc_status(document, target_language)
async def test_list_statuses(self, client): # prepare containers and test data blob_data = [Document(data=b'This is some text')] source_container_sas_url = self.create_source_container(data=blob_data) target_container_sas_url = self.create_target_container() target_language = "es" # prepare translation inputs translation_inputs = [ DocumentTranslationInput( source_url=source_container_sas_url, targets=[ TranslationTarget( target_url=target_container_sas_url, language_code=target_language ) ] ) ] # submit and validate job job_id = await self._submit_and_validate_translation_job_async(client, translation_inputs, len(blob_data)) # check doc statuses doc_statuses = client.list_all_document_statuses(job_id) doc_statuses_list = [] async for document in doc_statuses: doc_statuses_list.append(document) self._validate_doc_status(document, target_language) self.assertEqual(len(doc_statuses_list), len(blob_data))
def _create_and_submit_sample_translation_jobs(self, client, jobs_count, **kwargs): wait_for_job = kwargs.pop('wait', True) language_code = kwargs.pop('language_code', "es") docs_per_job = kwargs.pop('docs_per_job', 2) result_job_ids = [] for i in range(jobs_count): # prepare containers and test data blob_data = Document.create_dummy_docs(docs_per_job) source_container_sas_url = self.create_source_container( data=blob_data) target_container_sas_url = self.create_target_container() # prepare translation inputs translation_inputs = [ DocumentTranslationInput( source_url=source_container_sas_url, targets=[ TranslationTarget(target_url=target_container_sas_url, language_code=language_code) ]) ] # submit multiple jobs job_details = client.create_translation_job(translation_inputs) self.assertIsNotNone(job_details.id) if wait_for_job: client.wait_until_done(job_details.id) result_job_ids.append(job_details.id) return result_job_ids
def test_existing_documents_in_target_one_valid(self, client): # prepare containers and test data source_container_sas_url = self.create_source_container(data=[Document(name="document"), Document()]) target_container_sas_url = self.create_target_container(data=Document(name="document")) # prepare translation inputs translation_inputs = [ DocumentTranslationInput( source_url=source_container_sas_url, targets=[ TranslationTarget( target_url=target_container_sas_url, language_code="es" ) ] ) ] job = client.create_translation_job(translation_inputs) job = client.wait_until_done(job.id) self._validate_translation_job(job, status="Succeeded", total=2, failed=1) doc_statuses = client.list_all_document_statuses(job.id) for doc in doc_statuses: if doc.status == "Failed": assert doc.error.code == "TargetFileAlreadyExists"
def test_empty_document(self, client): # prepare containers and test data source_container_sas_url = self.create_source_container(Document(data=b'')) target_container_sas_url = self.create_target_container() # prepare translation inputs translation_inputs = [ DocumentTranslationInput( source_url=source_container_sas_url, targets=[ TranslationTarget( target_url=target_container_sas_url, language_code="es" ) ] ) ] job = client.create_translation_job(translation_inputs) job = client.wait_until_done(job.id) self._validate_translation_job(job, status="Failed", total=1, failed=1) doc_status = client.list_all_document_statuses(job.id) doc = next(doc_status) assert doc.status == "Failed" assert doc.error.code == "WrongDocumentEncoding"
async def sample_translation_with_glossaries_async(): import os from azure.core.credentials import AzureKeyCredential from azure.ai.translation.document.aio import DocumentTranslationClient from azure.ai.translation.document import (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") ]) ]) async with client: job = await client.create_translation_job(inputs=[inputs] ) # type: JobStatusResult job_result = await 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: AsyncItemPaged[DocumentStatusResult] async for document in doc_results: print("Document ID: {}".format(document.id)) print("Document status: {}".format(document.status)) if document.status == "Succeeded": print("Source document location: {}".format( document.source_document_url)) print("Translated 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 test_use_supported_and_unsupported_files(self, client): # prepare containers and test data source_container_sas_url = self.create_source_container(data=[ Document(suffix=".txt"), Document(suffix=".jpg") ] ) target_container_sas_url = self.create_target_container() # prepare translation inputs translation_inputs = [ DocumentTranslationInput( source_url=source_container_sas_url, targets=[ TranslationTarget( target_url=target_container_sas_url, language_code="es" ) ] ) ] job = client.create_translation_job(translation_inputs) job = client.wait_until_done(job.id) self._validate_translation_job(job, status="Succeeded", total=1, succeeded=1)
def test_existing_documents_in_target_one_valid(self, client): # prepare containers and test data source_container_sas_url = self.create_source_container(data=[Document(name="document"), Document()]) target_container_sas_url = self.create_target_container(data=Document(name="document")) # prepare translation inputs translation_inputs = [ DocumentTranslationInput( source_url=source_container_sas_url, targets=[ TranslationTarget( target_url=target_container_sas_url, language_code="es" ) ] ) ] poller = client.begin_translation(translation_inputs) result = poller.result() self._validate_translation_metadata(poller, status="Succeeded", total=2, failed=1) for doc in result: if doc.status == "Failed": assert doc.error.code == "TargetFileAlreadyExists"
def test_use_supported_and_unsupported_files(self, client): # prepare containers and test data source_container_sas_url = self.create_source_container(data=[ Document(suffix=".txt"), Document(suffix=".jpg") ] ) target_container_sas_url = self.create_target_container() # prepare translation inputs translation_inputs = [ DocumentTranslationInput( source_url=source_container_sas_url, targets=[ TranslationTarget( target_url=target_container_sas_url, language_code="es" ) ] ) ] poller = client.begin_translation(translation_inputs) result = poller.result() self._validate_translation_metadata(poller=poller, status="Succeeded", total=1, succeeded=1) for document in result: self._validate_doc_status(document, "es")
async def test_active_directory_auth_async(self): token = self.generate_oauth_token() endpoint = self.get_oauth_endpoint() kwargs = {} if os.getenv("AZURE_COGNITIVE_SCOPE"): kwargs["credential_scopes"] = [os.getenv("AZURE_COGNITIVE_SCOPE")] client = DocumentTranslationClient(endpoint, token, **kwargs) # 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)) target_container_sas_url = self.create_target_container() # prepare translation inputs translation_inputs = [ DocumentTranslationInput( source_url=source_container_sas_url, targets=[ TranslationTarget( target_url=target_container_sas_url, language_code="fr" ) ] ) ] # submit translation and test await self._begin_and_validate_translation_async(client, translation_inputs, 1, "fr")
def test_empty_document(self, client): # prepare containers and test data source_container_sas_url = self.create_source_container(Document(data=b'')) target_container_sas_url = self.create_target_container() # prepare translation inputs translation_inputs = [ DocumentTranslationInput( source_url=source_container_sas_url, targets=[ TranslationTarget( target_url=target_container_sas_url, language_code="es" ) ] ) ] poller = client.begin_translation(translation_inputs) result = poller.result() self._validate_translation_metadata(poller, status="Failed", total=1, failed=1) for doc in result: assert doc.status == "Failed" assert doc.error.code == "WrongDocumentEncoding"
def test_overloaded_inputs(self, client): # prepare containers and test data source_container_sas_url = self.create_source_container(data=Document(data=b'hello world')) target_container_sas_url = self.create_target_container() target_container_sas_url_2 = self.create_target_container() # prepare translation inputs translation_inputs = [ DocumentTranslationInput( source_url=source_container_sas_url, targets=[ TranslationTarget( target_url=target_container_sas_url, language_code="es" ) ] ) ] # positional poller = client.begin_translation(translation_inputs) result = poller.result() self._validate_translation_metadata(poller, status="Succeeded", total=1, succeeded=1) # keyword translation_inputs[0].targets[0].target_url = target_container_sas_url_2 poller = client.begin_translation(inputs=translation_inputs) result = poller.result() self._validate_translation_metadata(poller, status="Succeeded", total=1, succeeded=1)
def _create_and_submit_sample_translation_jobs(self, client, jobs_count): result_job_ids = [] for i in range(jobs_count): # prepare containers and test data ''' WARNING!! TOTAL_DOC_COUNT_IN_JOB = 1 if you plan to create more docs in the job, please update this variable TOTAL_DOC_COUNT_IN_JOB in respective test ''' blob_data = b'This is some text' # TOTAL_DOC_COUNT_IN_JOB = 1 source_container_sas_url = self.create_source_container( data=Document(data=blob_data)) target_container_sas_url = self.create_target_container() # prepare translation inputs translation_inputs = [ DocumentTranslationInput( source_url=source_container_sas_url, targets=[ TranslationTarget(target_url=target_container_sas_url, language_code="es") ]) ] # submit multiple jobs job_details = client.create_translation_job(translation_inputs) self.assertIsNotNone(job_details.id) client.wait_until_done(job_details.id) result_job_ids.append(job_details.id) return result_job_ids
def test_single_source_two_targets(self, client): # 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)) target_container_sas_url = self.create_target_container() additional_target_container_sas_url = self.create_target_container() # prepare translation inputs translation_inputs = [ DocumentTranslationInput( source_url=source_container_sas_url, targets=[ TranslationTarget( target_url=target_container_sas_url, language_code="es" ), TranslationTarget( target_url=additional_target_container_sas_url, language_code="fr" ) ] ) ] # submit translation and test self._begin_and_validate_translation(client, translation_inputs, 2)
async def _begin_and_validate_translation_with_multiple_docs_async( self, async_client, docs_count, **kwargs): # get input parms wait_for_operation = kwargs.pop('wait', False) language_code = kwargs.pop('language_code', "es") # prepare containers and test data blob_data = Document.create_dummy_docs(docs_count=docs_count) source_container_sas_url = self.create_source_container(data=blob_data) target_container_sas_url = self.create_target_container() # prepare translation inputs translation_inputs = [ DocumentTranslationInput( source_url=source_container_sas_url, targets=[ TranslationTarget(target_url=target_container_sas_url, language_code=language_code) ]) ] # submit operation poller = await async_client.begin_translation(translation_inputs) self.assertIsNotNone(poller.id) # wait for result if wait_for_operation: result = await poller.result() async for doc in result: self._validate_doc_status(doc, "es") # validate self._validate_translation_metadata(poller=poller) return poller
async def test_cancel_job(self, client): # prepare containers and test data blob_data = [Document(data=b'This is some text')] source_container_sas_url = self.create_source_container(data=blob_data) target_container_sas_url = self.create_target_container() # prepare translation inputs translation_inputs = [ DocumentTranslationInput( source_url=source_container_sas_url, targets=[ TranslationTarget( target_url=target_container_sas_url, language_code="es" ) ] ) ] # submit job job_details = await client.create_translation_job(translation_inputs) self.assertIsNotNone(job_details.id) # cancel job await client.cancel_job(job_details.id) self.wait(duration=10) # for 'cancelled' status to propagate # check job status job_details = await client.get_job_status(job_details.id) self._validate_translation_job(job_details, status="Cancelled", total=1, cancelled=1)
async def test_list_statuses(self, client): # prepare containers and test data blob_data = [Document(data=b'This is some text')] source_container_sas_url = self.create_source_container(data=blob_data) target_container_sas_url = self.create_target_container() target_language = "es" # prepare translation inputs translation_inputs = [ DocumentTranslationInput( source_url=source_container_sas_url, targets=[ TranslationTarget(target_url=target_container_sas_url, language_code=target_language) ]) ] # submit and validate translation translation translation_id = await self._begin_and_validate_translation_async( client, translation_inputs, len(blob_data), target_language) # get doc statuses doc_statuses = client.list_all_document_statuses(translation_id) self.assertIsNotNone(doc_statuses) # get first doc first_doc = await doc_statuses.__anext__() self.assertIsNotNone(first_doc.id) # get doc details doc_status = await client.get_document_status( translation_id=translation_id, document_id=first_doc.id) self._validate_doc_status(doc_status, target_language)
def _create_translation_job_with_dummy_docs(self, client, docs_count, **kwargs): # get input parms wait_for_job = kwargs.pop('wait', False) language_code = kwargs.pop('language_code', "es") # prepare containers and test data blob_data = Document.create_dummy_docs(docs_count=docs_count) source_container_sas_url = self.create_source_container(data=blob_data) target_container_sas_url = self.create_target_container() # prepare translation inputs translation_inputs = [ DocumentTranslationInput( source_url=source_container_sas_url, targets=[ TranslationTarget(target_url=target_container_sas_url, language_code=language_code) ]) ] # submit job job_details = client.create_translation_job(translation_inputs) self.assertIsNotNone(job_details.id) # wait for result if wait_for_job: client.wait_until_done(job_details.id) # validate self._validate_translation_job(job_details=job_details) return job_details.id
async def sample_translation_with_glossaries_async(): import os from azure.core.credentials import AzureKeyCredential from azure.ai.translation.document.aio import DocumentTranslationClient from azure.ai.translation.document import (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") ]) ]) async with client: poller = await client.begin_translation(inputs=[inputs]) result = await poller.result() print("Status: {}".format(poller.status())) print("Created on: {}".format(poller.details.created_on)) print("Last updated on: {}".format(poller.details.last_updated_on)) print("Total number of translations on documents: {}".format( poller.details.documents_total_count)) print("\nOf total documents...") print("{} failed".format(poller.details.documents_failed_count)) print("{} succeeded".format(poller.details.documents_succeeded_count)) async for document in result: print("Document ID: {}".format(document.id)) print("Document status: {}".format(document.status)) if document.status == "Succeeded": print("Source document location: {}".format( document.source_document_url)) print("Translated document location: {}".format( document.translated_document_url)) print("Translated to language: {}\n".format( document.translated_to)) else: print("Error Code: {}, Message: {}\n".format( document.error.code, document.error.message))
def sample_document_status_checks(): import os import time # [START create_translation_job] from azure.core.credentials import AzureKeyCredential from azure.ai.translation.document 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 # [END create_translation_job] 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. You can find translated document at {}" .format(document.source_document_url, document.translate_to, document.translated_document_url)) 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.")
async def _begin_multiple_translations_async(self, async_client, operations_count, **kwargs): container_suffix = kwargs.pop('container_suffix', "") variables = kwargs.pop('variables', {}) wait_for_operation = kwargs.pop('wait', True) language_code = kwargs.pop('language_code', "es") docs_per_operation = kwargs.pop('docs_per_operation', 2) result_ids = [] for i in range(operations_count): # prepare containers and test data ''' # note since we're only testing the client library we can use sync container calls in here no need for async container clients! ''' blob_data = Document.create_dummy_docs(docs_per_operation) source_container_sas_url = self.create_source_container( data=blob_data, variables=variables, container_suffix=str(i) + container_suffix) target_container_sas_url = self.create_target_container( variables=variables, container_suffix=str(i) + container_suffix) # prepare translation inputs translation_inputs = [ DocumentTranslationInput( source_url=source_container_sas_url, targets=[ TranslationTarget(target_url=target_container_sas_url, language_code=language_code) ]) ] # submit multiple operations poller = await async_client.begin_translation(translation_inputs) assert poller.id is not None if wait_for_operation: await poller.result() else: await poller.wait() result_ids.append(poller.id) return result_ids
def test_bad_input_source(self, client): # prepare containers and test data target_container_sas_url = self.create_target_container() # prepare translation inputs translation_inputs = [ DocumentTranslationInput( source_url="https://idont.ex.ist", targets=[ TranslationTarget(target_url=target_container_sas_url, language_code="es") ]) ] with pytest.raises(HttpResponseError) as e: job = client.create_translation_job(translation_inputs) job = client.wait_until_done(job.id) assert e.value.error.code == "InvalidDocumentAccessLevel"
async def test_bad_input_source(self, client): # prepare containers and test data target_container_sas_url = self.create_target_container() # prepare translation inputs translation_inputs = [ DocumentTranslationInput( source_url="https://idont.ex.ist", targets=[ TranslationTarget(target_url=target_container_sas_url, language_code="es") ]) ] with pytest.raises(HttpResponseError) as e: poller = await client.begin_translation(translation_inputs) result = await poller.result() assert e.value.error.code == "InvalidDocumentAccessLevel"
def test_list_statuses_with_pagination(self, client): # prepare containers and test data blob_text = b'blob text' blob_data = [ Document(data=blob_text), Document(data=blob_text), Document(data=blob_text), Document(data=blob_text), Document(data=blob_text), Document(data=blob_text) ] source_container_sas_url = self.create_source_container(data=blob_data) target_container_sas_url = self.create_target_container() result_per_page = 2 no_of_pages = len(blob_data) // result_per_page target_language = "es" # prepare translation inputs translation_inputs = [ DocumentTranslationInput( source_url=source_container_sas_url, targets=[ TranslationTarget(target_url=target_container_sas_url, language_code=target_language) ]) ] # submit and validate job job_id = self._submit_and_validate_translation_job( client, translation_inputs, len(blob_data)) # check doc statuses doc_statuses_pages = list( client.list_all_document_statuses( job_id=job_id, results_per_page=result_per_page)) self.assertEqual(len(doc_statuses_pages), no_of_pages) # iterate by page for page in doc_statuses_pages: page_items = list(page) self.assertEqual(len(page_items), result_per_page) for document in page: self._validate_doc_status(document, target_language)
async def test_single_source_single_target(self, client): # 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)) target_container_sas_url = self.create_target_container() # prepare translation inputs translation_inputs = [ DocumentTranslationInput( source_url=source_container_sas_url, targets=[ TranslationTarget(target_url=target_container_sas_url, language_code="es") ]) ] # submit job and test await self._submit_and_validate_translation_job_async( client, translation_inputs, 1)
def test_bad_input_target(self, client): # 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)) # prepare translation inputs translation_inputs = [ DocumentTranslationInput(source_url=source_container_sas_url, targets=[ TranslationTarget( target_url="https://idont.ex.ist", language_code="es") ]) ] with pytest.raises(HttpResponseError) as e: poller = client.begin_translation(translation_inputs) result = poller.result() assert e.value.error.code == "InvalidTargetDocumentAccessLevel"
def test_overloaded_bad_input(self, client): translation_inputs = [ DocumentTranslationInput(source_url="container", targets=[ TranslationTarget( target_url="container", language_code="es") ]) ] with pytest.raises(ValueError): client.begin_translation("container") with pytest.raises(ValueError): client.begin_translation("container", "container") with pytest.raises(ValueError): client.begin_translation(source_url=translation_inputs) with pytest.raises(ValueError): client.begin_translation(inputs="container")
async def _create_and_submit_sample_translation_jobs_async( self, async_client, jobs_count): result_job_ids = [] for i in range(jobs_count): # prepare containers and test data ''' # WARNING!! TOTAL_DOC_COUNT_IN_JOB = 1 if you plan to create more docs in the job, please update this variable TOTAL_DOC_COUNT_IN_JOB in respective test # note since we're only testing the client library we can use sync container calls in here no need for async container clients! ''' blob_data = b'This is some text' source_container_sas_url = self.create_source_container( data=Document(data=blob_data)) target_container_sas_url = self.create_target_container() # prepare translation inputs translation_inputs = [ DocumentTranslationInput( source_url=source_container_sas_url, targets=[ TranslationTarget(target_url=target_container_sas_url, language_code="es") ]) ] # submit multiple jobs job_details = await async_client.create_translation_job( translation_inputs) self.assertIsNotNone(job_details.id) await async_client.wait_until_done(job_details.id) result_job_ids.append(job_details.id) return result_job_ids
def test_overloaded_inputs(self, **kwargs): client = kwargs.pop("client") variables = kwargs.pop("variables", {}) # prepare containers and test data source_container_sas_url = self.create_source_container( data=Document(data=b'hello world'), variables=variables) target_container_sas_url = self.create_target_container( variables=variables) target_container_sas_url_2 = self.create_target_container( variables=variables, container_suffix="2") # prepare translation inputs translation_inputs = [ DocumentTranslationInput( source_url=source_container_sas_url, targets=[ TranslationTarget(target_url=target_container_sas_url, language_code="es") ]) ] # positional poller = client.begin_translation(translation_inputs) result = poller.result() self._validate_translation_metadata(poller, status="Succeeded", total=1, succeeded=1) # keyword translation_inputs[0].targets[ 0].target_url = target_container_sas_url_2 poller = client.begin_translation(inputs=translation_inputs) result = poller.result() self._validate_translation_metadata(poller, status="Succeeded", total=1, succeeded=1) return variables
def test_bad_input_source(self, **kwargs): client = kwargs.pop("client") variables = kwargs.pop("variables", {}) # prepare containers and test data target_container_sas_url = self.create_target_container( variables=variables) # prepare translation inputs translation_inputs = [ DocumentTranslationInput( source_url="https://idont.ex.ist", targets=[ TranslationTarget(target_url=target_container_sas_url, language_code="es") ]) ] with pytest.raises(HttpResponseError) as e: poller = client.begin_translation(translation_inputs) result = poller.result() assert e.value.error.code == "InvalidDocumentAccessLevel" return variables