Пример #1
0
    def test_translation_with_glossary(self, client):
        doc = Document(data=b'testing')
        source_container_sas_url = self.create_source_container(data=[doc])
        target_container_sas_url = self.create_target_container()

        container_client = ContainerClient(self.storage_endpoint,
                                           self.source_container_name,
                                           self.storage_key)
        with open(GLOSSARY_FILE_NAME, "rb") as fd:
            container_client.upload_blob(name=GLOSSARY_FILE_NAME,
                                         data=fd.read())

        prefix, suffix = source_container_sas_url.split("?")
        glossary_file_sas_url = prefix + "/" + GLOSSARY_FILE_NAME + "?" + suffix

        poller = client.begin_translation(
            source_container_sas_url,
            target_container_sas_url,
            "es",
            glossaries=[
                TranslationGlossary(glossary_url=glossary_file_sas_url,
                                    file_format="csv")
            ])
        result = poller.result()

        container_client = ContainerClient(self.storage_endpoint,
                                           self.target_container_name,
                                           self.storage_key)

        # download translated file and assert that translation reflects glossary changes
        document = doc.name + doc.suffix
        with open(document, "wb") as my_blob:
            download_stream = container_client.download_blob(document)
            my_blob.write(download_stream.readall())

        with open(document, "rb") as fd:
            translated = fd.readline()

        assert b'essai' in translated  # glossary worked
        os.remove(document)
    async def _begin_multiple_translations_async(self, async_client, operations_count, **kwargs):
        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)
            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 operations
            poller = await async_client.begin_translation(translation_inputs)
            self.assertIsNotNone(poller.id)
            if wait_for_operation:
                await poller.result()
            else:
                await poller.wait()
            result_ids.append(poller.id)

        return result_ids
    def test_single_source_single_target_with_suffix(self, client):
        # prepare containers and test data
        blob_data = b'This is some text'
        suffix = "txt"
        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")
                ],
                suffix=suffix)
        ]

        # submit job and test
        self._submit_and_validate_translation_job(client, translation_inputs,
                                                  1)
    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
Пример #5
0
    async def test_single_input_with_kwargs(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()

        def callback(request):
            req = _StartTranslationDetails.deserialize(json.loads(request.http_request.body))
            input = req.inputs[0]
            assert input.source.source_url == source_container_sas_url
            assert input.source.language == "en"
            assert input.source.filter.prefix == ""
            assert input.source.filter.suffix == ".txt"
            assert input.storage_type == "File"
            assert input.targets[0].category == "fake"
            assert input.targets[0].glossaries[0].format == "txt"
            assert input.targets[0].glossaries[0].glossary_url == "https://glossaryfile.txt"
            assert input.targets[0].language == "es"
            assert input.targets[0].target_url == target_container_sas_url

        async with client:
            try:
                poller = await client.begin_translation(
                    source_container_sas_url,
                    target_container_sas_url,
                    "es",
                    storage_type="File",
                    source_language_code="en",
                    prefix="",
                    suffix=".txt",
                    category_id="fake",
                    glossaries=[TranslationGlossary(
                        glossary_url="https://glossaryfile.txt",
                        file_format="txt"
                    )],
                    raw_response_hook=callback
                )
                await poller.result()
            except HttpResponseError as e:
                pass
Пример #6
0
    def test_single_source_single_target_with_prefix(self, client):
        # prepare containers and test data
        blob_data = b'This is some text'
        prefix = "xyz"
        source_container_sas_url = self.create_source_container(
            data=Document(data=blob_data, prefix=prefix))
        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")
                ],
                prefix=prefix)
        ]

        # submit translation and test
        self._begin_and_validate_translation(client, translation_inputs, 1,
                                             "es")
    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"
    async 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:
            job = await client.create_translation_job(translation_inputs)
            job = await client.wait_until_done(job.id)
        assert e.value.error.code == "InvalidDocumentAccessLevel"
Пример #9
0
    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
Пример #10
0
    def test_list_statuses(self, **kwargs):
        client = kwargs.pop("client")
        variables = kwargs.pop("variables", {})
        # 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, variables=variables)
        target_container_sas_url = self.create_target_container(
            variables=variables)
        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 operation
        translation_id = self._begin_and_validate_translation(
            client, translation_inputs, len(blob_data), target_language)

        # get doc statuses
        doc_statuses = client.list_document_statuses(translation_id)
        assert doc_statuses is not None

        # get first doc
        first_doc = next(doc_statuses)
        assert first_doc.id is not None

        # get doc details
        doc_status = client.get_document_status(translation_id=translation_id,
                                                document_id=first_doc.id)
        self._validate_doc_status(doc_status, target_language)
        return variables
Пример #11
0
    async def _create_and_submit_sample_translation_jobs_async(self, async_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
            '''
                # 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_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 = await async_client.create_translation_job(translation_inputs)
            self.assertIsNotNone(job_details.id)
            if wait_for_job:
                await async_client.wait_until_done(job_details.id)
            result_job_ids.append(job_details.id)

        return result_job_ids
Пример #12
0
    def test_active_directory_auth(self):
        token = self.generate_oauth_token()
        endpoint = self.get_oauth_endpoint()
        client = DocumentTranslationClient(endpoint, token)
        # 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
        self._begin_and_validate_translation(client, translation_inputs, 1,
                                             "fr")
Пример #13
0
    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)
Пример #14
0
    async def _create_translation_job_with_dummy_docs_async(
            self, async_client, docs_count, **kwargs):
        '''
            appropriated this method from another PR! #18302
            please resolve conflict before merge
            keep in mind it's the exact same method
        '''
        # 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 = await async_client.create_translation_job(
            translation_inputs)
        self.assertIsNotNone(job_details.id)
        # wait for result
        if wait_for_job:
            await async_client.wait_until_done(job_details.id)
        # validate
        self._validate_translation_job(job_details=job_details)

        return job_details.id
Пример #15
0
    async def test_single_source_single_target(self, **kwargs):
        client = kwargs.pop("client")
        variables = kwargs.pop("variables", {})
        # 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), variables=variables)
        target_container_sas_url = self.create_target_container(variables=variables)

        # prepare translation inputs
        translation_inputs = [
            DocumentTranslationInput(
                source_url=source_container_sas_url,
                targets=[
                    TranslationTarget(
                        target_url=target_container_sas_url,
                        language_code="es"
                    )
                ]
            )
        ]

        # submit translation and test
        await self._begin_and_validate_translation_async(client, translation_inputs, 1, "es")
        return variables
    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"
    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)
    def test_list_statuses_with_skip(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()
        docs_len = len(blob_data)
        skip = 2
        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=job_id, skip=skip))
        self.assertEqual(len(doc_statuses), docs_len - skip)

        # iterate over docs
        for document in doc_statuses:
            self._validate_doc_status(document, target_language)