Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
0cb681d
update method docstrings
Apr 25, 2021
9e6ec78
added tests for list jobs
Apr 25, 2021
0991aeb
updated tests for list docs statuses
Apr 26, 2021
7c47d29
added async tests for job listing
Apr 26, 2021
0cf21f6
update old async tests 'list doc statuses'
Apr 26, 2021
29c7770
fixing some errors
Apr 26, 2021
7cae6cd
bug fix async code
Apr 26, 2021
d43d097
added async tests for 'list all doc statuses'
Apr 26, 2021
222ce25
update docstrings for list_submitted_jobs
Apr 27, 2021
ef0a953
add time convert helper
Apr 27, 2021
82f4c7f
update async client
Apr 27, 2021
d09554d
updated 'list_document_statuses'
Apr 27, 2021
b1611ea
fix paging issues
Apr 27, 2021
24f790d
fix artifact parameter names in tests
Apr 27, 2021
6593ac8
remove unwanted tests
Apr 27, 2021
50f7f7d
fix order_by parameters
Apr 27, 2021
f62a16a
fix test function names
Apr 27, 2021
3256621
remove unwanted imports from tests
Apr 27, 2021
bf530d1
fix kwargs parm name
Apr 27, 2021
331cc71
fix test list jobs before datetime
Apr 28, 2021
99be798
bug fixes
Apr 28, 2021
58b8260
fixed some tests
Apr 29, 2021
b6c303e
updated tests
Apr 30, 2021
bac7e23
update async tests
Apr 30, 2021
e578d99
updated 'list_jobs' tests
Apr 30, 2021
aca9dfc
skip tests
Apr 30, 2021
8f25b0f
temp commit
May 1, 2021
5e4a006
updated tests for "list all document statuses" sync client
May 2, 2021
d68434c
updated async tests
May 2, 2021
a460453
spelling mistakes
May 2, 2021
8c73126
update id parameter name
May 2, 2021
f0290ae
fix 'skip' test
May 2, 2021
6bfe5ed
fixed filter by status test
May 3, 2021
4ec7400
fix filtering by 'created_before' tests
May 3, 2021
23e12b5
fix linting errors
May 3, 2021
f549970
fix async test
May 3, 2021
a864cc5
add support for pytz in tests
May 3, 2021
20b451b
update mixed tests for 'list_submitted_jobs'
May 3, 2021
4bafd71
PR comments - speccling mistakes
May 4, 2021
1e895a3
PR reviews - min and max errors
May 4, 2021
1ed1c32
updated mixed-filter tests. still not working!
May 4, 2021
6f1fb5d
fixed bug with converting page to list then calling iterator on empty…
May 5, 2021
e906111
fix await problem in async test
May 5, 2021
6e573e0
adding recorded tests
May 5, 2021
a9f1281
white space -> trigger ci/cd pipeline
May 6, 2021
1c0e1b5
update time-baesd failing tests with decorator
May 6, 2021
5e1f1b0
update recorded tests
May 6, 2021
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
)
from ._user_agent import USER_AGENT
from ._polling import TranslationPolling
from ._helpers import get_http_logging_policy
from ._helpers import get_http_logging_policy, convert_datetime
if TYPE_CHECKING:
from azure.core.paging import ItemPaged

Expand Down Expand Up @@ -217,6 +217,17 @@ def list_submitted_jobs(self, **kwargs):
# type: (**Any) -> ItemPaged[JobStatusResult]
"""List all the submitted translation jobs under the Document Translation resource.

:keyword int top: the total number of jobs to return (across all pages) from all submitted jobs.
:keyword int skip: the number of jobs to skip (from beginning of the all submitted jobs).
By default, we sort by all submitted jobs descendingly by start time.
:keyword int results_per_page: is the number of jobs returned per page.
:keyword list[str] job_ids: job ids to filter by.
:keyword list[str] statuses: job statuses to filter by.
:keyword Union[str, datetime.datetime] created_after: get jobs created after certain datetime.
:keyword Union[str, datetime.datetime] created_before: get jobs created before certain datetime.
:keyword list[str] order_by: the sorting query for the jobs returned.
format: ["parm1 asc/desc", "parm2 asc/desc", ...]
(ex: 'createdDateTimeUtc asc', 'createdDateTimeUtc desc').
:return: ~azure.core.paging.ItemPaged[:class:`~azure.ai.translation.document.JobStatusResult`]
:rtype: ~azure.core.paging.ItemPaged
:raises ~azure.core.exceptions.HttpResponseError:
Expand All @@ -230,6 +241,12 @@ def list_submitted_jobs(self, **kwargs):
:dedent: 4
:caption: List all submitted jobs under the resource.
"""
created_after = kwargs.pop("created_after", None)
created_before = kwargs.pop("created_before", None)
created_after = convert_datetime(created_after) if created_after else None
created_before = convert_datetime(created_before) if created_before else None
results_per_page = kwargs.pop("results_per_page", None)
job_ids = kwargs.pop("job_ids", None)

def _convert_from_generated_model(generated_model): # pylint: disable=protected-access
return JobStatusResult._from_generated(generated_model) # pylint: disable=protected-access
Expand All @@ -242,15 +259,30 @@ def _convert_from_generated_model(generated_model): # pylint: disable=protected

return self._client.document_translation.get_operations(
cls=model_conversion_function,
maxpagesize=results_per_page,
created_date_time_utc_start=created_after,
created_date_time_utc_end=created_before,
ids=job_ids,
**kwargs
)

@distributed_trace
def list_all_document_statuses(self, job_id, **kwargs):
# type: (str, **Any) -> ItemPaged[DocumentStatusResult]
"""List all the document statuses under a translation job.

:param str job_id: The translation job ID.
"""List all the document statuses for a given translation job.

:param str job_id: ID of translation job to list documents for.
:keyword int top: the total number of documents to return (across all pages).
:keyword int skip: the number of documents to skip (from beginning).
By default, we sort by all documents descendingly by start time.
:keyword int results_per_page: is the number of documents returned per page.
:keyword list[str] document_ids: document IDs to filter by.
:keyword list[str] statuses: document statuses to filter by.
:keyword Union[str, datetime.datetime] translated_after: get document translated after certain datetime.
:keyword Union[str, datetime.datetime] translated_before: get document translated before certain datetime.
:keyword list[str] order_by: the sorting query for the documents.
format: ["parm1 asc/desc", "parm2 asc/desc", ...]
(ex: 'createdDateTimeUtc asc', 'createdDateTimeUtc desc').
:return: ~azure.core.paging.ItemPaged[:class:`~azure.ai.translation.document.DocumentStatusResult`]
:rtype: ~azure.core.paging.ItemPaged
:raises ~azure.core.exceptions.HttpResponseError:
Expand All @@ -264,6 +296,13 @@ def list_all_document_statuses(self, job_id, **kwargs):
:dedent: 4
:caption: List all the document statuses under the translation job.
"""
translated_after = kwargs.pop("translated_after", None)
translated_before = kwargs.pop("translated_before", None)
translated_after = convert_datetime(translated_after) if translated_after else None
translated_before = convert_datetime(translated_before) if translated_before else None
results_per_page = kwargs.pop("results_per_page", None)
document_ids = kwargs.pop("document_ids", None)


def _convert_from_generated_model(generated_model):
return DocumentStatusResult._from_generated(generated_model) # pylint: disable=protected-access
Expand All @@ -277,6 +316,10 @@ def _convert_from_generated_model(generated_model):
return self._client.document_translation.get_operation_documents_status(
id=job_id,
cls=model_conversion_function,
maxpagesize=results_per_page,
created_date_time_utc_start=translated_after,
created_date_time_utc_end=translated_before,
ids=document_ids,
**kwargs
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@
# Licensed under the MIT License.
# ------------------------------------

import datetime
from typing import Union
import six
from azure.core.pipeline.policies import HttpLoggingPolicy


Expand Down Expand Up @@ -35,3 +38,18 @@ def get_http_logging_policy(**kwargs):
}
)
return http_logging_policy


def convert_datetime(date_time):
# type: (Union[str, datetime.datetime]) -> datetime.datetime
if isinstance(date_time, datetime.datetime):
return date_time
if isinstance(date_time, six.string_types):
try:
return datetime.datetime.strptime(date_time, "%Y-%m-%d")
except ValueError:
try:
return datetime.datetime.strptime(date_time, "%Y-%m-%dT%H:%M:%SZ")
except ValueError:
return datetime.datetime.strptime(date_time, "%Y-%m-%d %H:%M:%S")
raise TypeError("Bad datetime type")
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
FileFormat,
DocumentStatusResult
)
from .._helpers import get_http_logging_policy
from .._helpers import get_http_logging_policy, convert_datetime
from .._polling import TranslationPolling
COGNITIVE_KEY_HEADER = "Ocp-Apim-Subscription-Key"

Expand Down Expand Up @@ -217,6 +217,17 @@ def list_submitted_jobs(self, **kwargs):
# type: (**Any) -> AsyncItemPaged[JobStatusResult]
"""List all the submitted translation jobs under the Document Translation resource.

:keyword int top: the total number of jobs to return (across all pages) from all submitted jobs.
:keyword int skip: the number of jobs to skip (from beginning of the all submitted jobs).
By default, we sort by all submitted jobs descendingly by start time.
:keyword int results_per_page: is the number of jobs returned per page.
:keyword list[str] job_ids: job ids to filter by.
:keyword list[str] statuses: job statuses to filter by.
:keyword Union[str, datetime.datetime] created_after: get jobs created after certain datetime.
:keyword Union[str, datetime.datetime] created_before: get jobs created before certain datetime.
:keyword list[str] order_by: the sorting query for the jobs returned.
format: ["parm1 asc/desc", "parm2 asc/desc", ...]
(ex: 'createdDateTimeUtc asc', 'createdDateTimeUtc desc').
:return: ~azure.core.paging.AsyncItemPaged[:class:`~azure.ai.translation.document.JobStatusResult`]
:rtype: ~azure.core.paging.AsyncItemPaged
:raises ~azure.core.exceptions.HttpResponseError:
Expand All @@ -231,6 +242,13 @@ def list_submitted_jobs(self, **kwargs):
:caption: List all submitted jobs under the resource.
"""

created_after = kwargs.pop("created_after", None)
created_before = kwargs.pop("created_before", None)
created_after = convert_datetime(created_after) if created_after else None
created_before = convert_datetime(created_before) if created_before else None
results_per_page = kwargs.pop("results_per_page", None)
job_ids = kwargs.pop("job_ids", None)

def _convert_from_generated_model(generated_model):
# pylint: disable=protected-access
return JobStatusResult._from_generated(generated_model)
Expand All @@ -242,15 +260,30 @@ def _convert_from_generated_model(generated_model):

return self._client.document_translation.get_operations(
cls=model_conversion_function,
maxpagesize=results_per_page,
created_date_time_utc_start=created_after,
created_date_time_utc_end=created_before,
ids=job_ids,
**kwargs
)

@distributed_trace
def list_all_document_statuses(self, job_id, **kwargs):
# type: (str, **Any) -> AsyncItemPaged[DocumentStatusResult]
"""List all the document statuses under a translation job.

:param str job_id: The translation job ID.
"""List all the document statuses for a given translation job.

:param str job_id: ID of translation job to list documents for.
:keyword int top: the total number of documents to return (across all pages).
:keyword int skip: the number of documents to skip (from beginning).
By default, we sort by all documents descendingly by start time.
:keyword int results_per_page: is the number of documents returned per page.
:keyword list[str] document_ids: document IDs to filter by.
:keyword list[str] statuses: document statuses to filter by.
:keyword Union[str, datetime.datetime] translated_after: get document translated after certain datetime.
:keyword Union[str, datetime.datetime] translated_before: get document translated before certain datetime.
:keyword list[str] order_by: the sorting query for the documents.
format: ["parm1 asc/desc", "parm2 asc/desc", ...]
(ex: 'createdDateTimeUtc asc', 'createdDateTimeUtc desc').
:return: ~azure.core.paging.AsyncItemPaged[:class:`~azure.ai.translation.document.DocumentStatusResult`]
:rtype: ~azure.core.paging.AsyncItemPaged
:raises ~azure.core.exceptions.HttpResponseError:
Expand All @@ -264,6 +297,12 @@ def list_all_document_statuses(self, job_id, **kwargs):
:dedent: 8
:caption: List all the document statuses under the translation job.
"""
translated_after = kwargs.pop("translated_after", None)
translated_before = kwargs.pop("translated_before", None)
translated_after = convert_datetime(translated_after) if translated_after else None
translated_before = convert_datetime(translated_before) if translated_before else None
results_per_page = kwargs.pop("results_per_page", None)
document_ids = kwargs.pop("document_ids", None)

def _convert_from_generated_model(generated_model):
# pylint: disable=protected-access
Expand All @@ -277,6 +316,10 @@ def _convert_from_generated_model(generated_model):
return self._client.document_translation.get_operation_documents_status(
id=job_id,
cls=model_conversion_function,
maxpagesize=results_per_page,
created_date_time_utc_start=translated_after,
created_date_time_utc_end=translated_before,
ids=document_ids,
**kwargs
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,4 @@
../../storage/azure-storage-blob
../../nspkg/azure-ai-translation-nspkg
aiohttp>=3.0; python_version >= '3.5'
pytz
Original file line number Diff line number Diff line change
Expand Up @@ -23,23 +23,21 @@ async def _submit_and_validate_translation_job_async(self, async_client, transla
return job_details.id

# client helpers
async def _create_and_submit_sample_translation_jobs_async(self, async_client, jobs_count):
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
'''
# 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))
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
Expand All @@ -49,7 +47,7 @@ async def _create_and_submit_sample_translation_jobs_async(self, async_client, j
targets=[
TranslationTarget(
target_url=target_container_sas_url,
language_code="es"
language_code=language_code
)
]
)
Expand All @@ -58,18 +56,14 @@ async def _create_and_submit_sample_translation_jobs_async(self, async_client, j
# 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)
if wait_for_job:
await async_client.wait_until_done(job_details.id)
result_job_ids.append(job_details.id)

return result_job_ids


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")
Expand Down
Loading