def get_direct_download_url(self, object_path, request_ip=None, expires_in=60, requires_cors=False, head=False): blob_name = self._blob_name_from_path(object_path) try: sas_token = generate_blob_sas( self._azure_account_name, self._azure_container, blob_name, account_key=self._azure_account_key, permission=ContainerSasPermissions.from_string("r"), expiry=datetime.utcnow() + timedelta(seconds=expires_in), ) blob_url = "{}?{}".format(self._blob(blob_name).url, sas_token) except AzureError: logger.exception( "Exception when trying to get direct download for path %s", object_path) raise IOError("Exception when trying to get direct download") return blob_url
def test_set_container_permission(self): # Arrange permission = ContainerSasPermissions.from_string('wrlx') self.assertEqual(permission.read, True) self.assertEqual(permission.list, True) self.assertEqual(permission.write, True) self.assertEqual(permission._str, 'wrlx')
def create_form_client_and_container_sas_url(self, **kwargs): form_recognizer_account = self.client_kwargs.pop("form_recognizer_account", None) if form_recognizer_account is None: form_recognizer_account = kwargs.pop("form_recognizer_account") form_recognizer_account_key = self.client_kwargs.pop("form_recognizer_account_key", None) if form_recognizer_account_key is None: form_recognizer_account_key = kwargs.pop("form_recognizer_account_key") storage_account = self.client_kwargs.pop("storage_account", None) if storage_account is None: storage_account = kwargs.pop("storage_account") storage_account_key = self.client_kwargs.pop("storage_account_key", None) if storage_account_key is None: storage_account_key = kwargs.pop("storage_account_key") if self.is_live: container_name = self.resource_random_name.replace("_", "-") # container names can't have underscore container_client = ContainerClient(storage_account.primary_endpoints.blob, container_name, storage_account_key) container_client.create_container() training_path = os.path.abspath(os.path.join(os.path.abspath(__file__), "..", "./sample_forms/training/")) for path, folder, files in os.walk(training_path): for document in files: with open(os.path.join(path, document), "rb") as data: if document == "Form_6.jpg": document = "subfolder/Form_6.jpg" # create virtual subfolder in container container_client.upload_blob(name=document, data=data) sas_token = generate_container_sas( storage_account.name, container_name, storage_account_key, permission=ContainerSasPermissions.from_string("rl"), expiry=datetime.utcnow() + timedelta(hours=1) ) container_sas_url = storage_account.primary_endpoints.blob + container_name + "?" + sas_token else: container_sas_url = "containersasurl" return self.client_cls( form_recognizer_account, AzureKeyCredential(form_recognizer_account_key), **self.client_kwargs ), container_sas_url
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 test_set_container_permission_from_string(self): # Arrange permission1 = ContainerSasPermissions(read=True, write=True) permission2 = ContainerSasPermissions.from_string('wr') self.assertEqual(permission1.read, permission2.read) self.assertEqual(permission1.write, permission2.write)
async def batch_translation_with_storage_async(self): # import libraries from azure.core.credentials import AzureKeyCredential from azure.ai.documenttranslation.aio import DocumentTranslationClient from azure.ai.documenttranslation import (DocumentTranslationInput, TranslationTarget) from azure.storage.blob.aio import ContainerClient from azure.storage.blob import (generate_container_sas, ContainerSasPermissions) # get service secrets 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"] # create service clients translation_client = DocumentTranslationClient(endpoint, AzureKeyCredential(key)) container_client = ContainerClient( source_storage_endpoint, container_name=source_storage_container_name, credential=source_storage_key) # upload some document for translation with open("document.txt", "rb") as doc: await container_client.upload_blob(name="document.txt", data=doc) # prepare translation job input 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") ] # run job async with translation_client: job_detail = await translation_client.create_translation_job( translation_inputs) job_result = await translation_client.wait_until_done(job_detail.id ) # poll status result if job_result.status == "Succeeded": print("We translated our documents!") if job_result.documents_failed_count > 0: await self.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)) await self.check_documents(translation_client, job_result.id) exit(1) # store result documents container_client = ContainerClient( target_storage_endpoint, container_name=target_storage_container_name, credential=target_storage_key) with open("translated.txt", "wb") as my_blob: download_stream = await container_client.download_blob( "document.txt") my_blob.write(await download_stream.readall())