Exemple #1
0
    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
Exemple #2
0
 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
Exemple #4
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())
Exemple #5
0
 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())