From 2177b487f70f384069ce9eb51b531827560bcd8d Mon Sep 17 00:00:00 2001 From: Max Inno Date: Mon, 3 Aug 2026 01:46:08 +0300 Subject: [PATCH] feat(glossaries): add multi-value term filters and exportType to Export Glossary --- crowdin_api/api_resources/glossaries/enums.py | 49 +++++++++++++++++++ .../tests/test_glossaries_resources.py | 43 ++++++++++++++++ crowdin_api/api_resources/glossaries/types.py | 12 +++++ 3 files changed, 104 insertions(+) diff --git a/crowdin_api/api_resources/glossaries/enums.py b/crowdin_api/api_resources/glossaries/enums.py index 149c170..f655c58 100644 --- a/crowdin_api/api_resources/glossaries/enums.py +++ b/crowdin_api/api_resources/glossaries/enums.py @@ -23,6 +23,55 @@ class GlossaryExportFields(Enum): URL = "url" +class GlossaryExportType(Enum): + CONCEPTS = "concepts" + TERMS = "terms" + + +class GlossaryExportStatus(Enum): + PREFERRED = "PREFERRED" + ADMITTED = "ADMITTED" + NOT_RECOMMENDED = "NOT_RECOMMENDED" + OBSOLETE = "OBSOLETE" + DRAFT = "DRAFT" + + +class GlossaryExportPartOfSpeech(Enum): + NOUN = "NOUN" + VERB = "VERB" + ADJECTIVE = "ADJ" + PRONOUN = "PRON" + PROPER_NOUN = "PROPN" + DETERMINER = "DET" + ADVERB = "ADV" + ADPOSITION = "ADP" + COORDINATING_CONJUNCTION = "CCONJ" + SUBORDINATING_CONJUNCTION = "SCONJ" + NUMERAL = "NUM" + INTERJECTION = "INTJ" + AUXILIARY = "AUX" + PARTICLE = "PRT" + SYMBOL = "SYM" + OTHER = "X" + + +class GlossaryExportTermType(Enum): + FULL_FORM = "FULL_FORM" + ACRONYM = "ACRONYM" + ABBREVIATION = "ABBREVIATION" + SHORT_FORM = "SHORT_FORM" + PHRASE = "PHRASE" + VARIANT = "VARIANT" + + +class GlossaryExportGender(Enum): + MASCULINE = "MASCULINE" + FEMININE = "FEMININE" + NEUTER = "NEUTER" + COMMON = "COMMON" + OTHER = "OTHER" + + class TermPatchPath(Enum): TEXT = "/text" DESCRIPTION = "/description" diff --git a/crowdin_api/api_resources/glossaries/tests/test_glossaries_resources.py b/crowdin_api/api_resources/glossaries/tests/test_glossaries_resources.py index 81e0370..5f7b166 100644 --- a/crowdin_api/api_resources/glossaries/tests/test_glossaries_resources.py +++ b/crowdin_api/api_resources/glossaries/tests/test_glossaries_resources.py @@ -14,6 +14,11 @@ TermGender, GlossaryFormat, GlossaryExportFields, + GlossaryExportType, + GlossaryExportStatus, + GlossaryExportPartOfSpeech, + GlossaryExportTermType, + GlossaryExportGender, ListGlossariesCrowdinOrderBy, ) from crowdin_api.api_resources.glossaries.resource import GlossariesResource @@ -199,6 +204,44 @@ def test_get_glossary_export_path(self, in_params, path, base_absolut_url): "exportFields": [GlossaryExportFields.TERM, GlossaryExportFields.STATUS] }, ), + ( + { + "exportType": GlossaryExportType.TERMS, + "statuses": [GlossaryExportStatus.PREFERRED, GlossaryExportStatus.ADMITTED], + "partsOfSpeech": [ + GlossaryExportPartOfSpeech.NOUN, + GlossaryExportPartOfSpeech.VERB, + ], + "types": [ + GlossaryExportTermType.ACRONYM, + GlossaryExportTermType.ABBREVIATION, + ], + "genders": [ + GlossaryExportGender.MASCULINE, + GlossaryExportGender.FEMININE, + ], + "authorIds": [12, 34], + "languageIds": ["uk", "de"], + }, + { + "exportType": GlossaryExportType.TERMS, + "statuses": [GlossaryExportStatus.PREFERRED, GlossaryExportStatus.ADMITTED], + "partsOfSpeech": [ + GlossaryExportPartOfSpeech.NOUN, + GlossaryExportPartOfSpeech.VERB, + ], + "types": [ + GlossaryExportTermType.ACRONYM, + GlossaryExportTermType.ABBREVIATION, + ], + "genders": [ + GlossaryExportGender.MASCULINE, + GlossaryExportGender.FEMININE, + ], + "authorIds": [12, 34], + "languageIds": ["uk", "de"], + }, + ), ), ) @mock.patch("crowdin_api.requester.APIRequester.request") diff --git a/crowdin_api/api_resources/glossaries/types.py b/crowdin_api/api_resources/glossaries/types.py index 8e6b03c..8ae8260 100644 --- a/crowdin_api/api_resources/glossaries/types.py +++ b/crowdin_api/api_resources/glossaries/types.py @@ -6,6 +6,11 @@ TermPatchPath, GlossaryFormat, GlossaryExportFields, + GlossaryExportType, + GlossaryExportStatus, + GlossaryExportPartOfSpeech, + GlossaryExportTermType, + GlossaryExportGender, ) from crowdin_api.typing import TypedDict @@ -19,6 +24,13 @@ class GlossaryPatchRequest(TypedDict): class GlossarySchemaRequest(TypedDict): format: Optional[GlossaryFormat] exportFields: Optional[Iterable[GlossaryExportFields]] + exportType: Optional[GlossaryExportType] + statuses: Optional[Iterable[GlossaryExportStatus]] + partsOfSpeech: Optional[Iterable[GlossaryExportPartOfSpeech]] + types: Optional[Iterable[GlossaryExportTermType]] + genders: Optional[Iterable[GlossaryExportGender]] + authorIds: Optional[Iterable[int]] + languageIds: Optional[Iterable[str]] class TermPatchRequest(TypedDict):