Skip to content

Commit 993e783

Browse files
feat: add Translation Import API support (#232)
Co-authored-by: Andrii Bodnar <andrii.bodnar@crowdin.com>
1 parent bee463f commit 993e783

2 files changed

Lines changed: 136 additions & 0 deletions

File tree

crowdin_api/api_resources/translations/resource.py

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -458,3 +458,69 @@ def export_project_translation(
458458
"exportApprovedOnly": exportApprovedOnly,
459459
},
460460
)
461+
462+
def import_translations(
463+
self,
464+
project_id: int,
465+
storage_id: int,
466+
language_ids: Optional[Iterable[int]] = None,
467+
file_id: Optional[int] = None,
468+
import_eq_suggestions: Optional[bool] = None,
469+
auto_approve_imported: Optional[bool] = None,
470+
translate_hidden: Optional[bool] = None,
471+
add_to_tm: Optional[bool] = None,
472+
):
473+
"""
474+
Import Translations
475+
476+
Link to documentation:
477+
https://support.crowdin.com/developer/api/v2/#tag/Translations/operation/api.projects.translations.imports
478+
"""
479+
480+
return self.requester.request(
481+
method="post",
482+
path=f"projects/{project_id}/translations/imports",
483+
request_data={
484+
"storageId": storage_id,
485+
"languageIds": language_ids,
486+
"fileId": file_id,
487+
"importEqSuggestions": import_eq_suggestions,
488+
"autoApproveImported": auto_approve_imported,
489+
"translateHidden": translate_hidden,
490+
"addToTm": add_to_tm,
491+
}
492+
)
493+
494+
def import_translations_status(
495+
self,
496+
project_id: int,
497+
import_translation_id: int
498+
):
499+
"""
500+
Import Translations Status
501+
502+
Link to documentation:
503+
https://support.crowdin.com/developer/api/v2/#tag/Translations/operation/api.projects.translations.imports.get
504+
"""
505+
506+
return self.requester.request(
507+
method="get",
508+
path=f"projects/{project_id}/translations/imports/{import_translation_id}",
509+
)
510+
511+
def import_translations_report(
512+
self,
513+
project_id: int,
514+
import_translation_id: int,
515+
):
516+
"""
517+
Import Translations Report
518+
519+
Link to documentation:
520+
https://support.crowdin.com/developer/api/v2/#tag/Translations/operation/api.projects.translations.imports.report.get
521+
"""
522+
523+
return self.requester.request(
524+
method="get",
525+
path=f"projects/{project_id}/translations/imports/{import_translation_id}/report",
526+
)

crowdin_api/api_resources/translations/tests/test_translations_resources.py

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -632,3 +632,73 @@ def test_export_project_translation(self, m_request, in_params, request_data, ba
632632
request_data=request_data,
633633
path="projects/1/translations/exports",
634634
)
635+
636+
@pytest.mark.parametrize(
637+
"in_data, request_data",
638+
(
639+
(
640+
{
641+
"storage_id": 1,
642+
"language_ids": [1, 2, 3],
643+
"file_id": 1,
644+
"import_eq_suggestions": True,
645+
"auto_approve_imported": True,
646+
"translate_hidden": True,
647+
"add_to_tm": True
648+
},
649+
{
650+
"storageId": 1,
651+
"languageIds": [1, 2, 3],
652+
"fileId": 1,
653+
"importEqSuggestions": True,
654+
"autoApproveImported": True,
655+
"translateHidden": True,
656+
"addToTm": True
657+
},
658+
),
659+
)
660+
)
661+
@mock.patch("crowdin_api.requester.APIRequester.request")
662+
def test_import_translations(self, m_request, in_data, request_data, base_absolut_url):
663+
m_request.return_value = "response"
664+
665+
project_id = 1
666+
667+
resource = self.get_resource(base_absolut_url)
668+
assert resource.import_translations(project_id, **in_data) == "response"
669+
670+
m_request.assert_called_once_with(
671+
method="post",
672+
path=f"projects/{project_id}/translations/imports",
673+
request_data=request_data,
674+
)
675+
676+
@mock.patch("crowdin_api.requester.APIRequester.request")
677+
def test_import_translations_status(self, m_request, base_absolut_url):
678+
m_request.return_value = "response"
679+
680+
project_id = 1
681+
import_translation_id = 2
682+
683+
resource = self.get_resource(base_absolut_url)
684+
assert resource.import_translations_status(project_id, import_translation_id) == "response"
685+
686+
m_request.assert_called_once_with(
687+
method="get",
688+
path=f"projects/{project_id}/translations/imports/{import_translation_id}",
689+
)
690+
691+
@mock.patch("crowdin_api.requester.APIRequester.request")
692+
def test_import_translations_report(self, m_request, base_absolut_url):
693+
m_request.return_value = "response"
694+
695+
project_id = 1
696+
import_translation_id = 2
697+
698+
resource = self.get_resource(base_absolut_url)
699+
assert resource.import_translations_report(project_id, import_translation_id) == "response"
700+
701+
m_request.assert_called_once_with(
702+
method="get",
703+
path=f"projects/{project_id}/translations/imports/{import_translation_id}/report",
704+
)

0 commit comments

Comments
 (0)