Skip to content

Commit 7c4c55e

Browse files
Merge pull request #22 from crowdin/feature/updates-for-api
Feature/updates for api
2 parents 01abd1d + 2117d81 commit 7c4c55e

File tree

21 files changed

+354
-27
lines changed

21 files changed

+354
-27
lines changed

crowdin_api/api_resources/distributions/resource.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,8 @@ def get_distribution(self, projectId: int, hash: str):
6161
"""
6262

6363
return self.requester.request(
64-
method="get", path=self.get_distributions_path(projectId=projectId, hash=hash)
64+
method="get",
65+
path=self.get_distributions_path(projectId=projectId, hash=hash),
6566
)
6667

6768
def delete_distribution(self, projectId: int, hash: str):
@@ -73,7 +74,8 @@ def delete_distribution(self, projectId: int, hash: str):
7374
"""
7475

7576
return self.requester.request(
76-
method="delete", path=self.get_distributions_path(projectId=projectId, hash=hash)
77+
method="delete",
78+
path=self.get_distributions_path(projectId=projectId, hash=hash),
7779
)
7880

7981
def edit_distribution(

crowdin_api/api_resources/distributions/tests/test_distributions_resources.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,8 @@ def test_delete_distribution(self, m_request, base_absolut_url):
6565
resource = self.get_resource(base_absolut_url)
6666
assert resource.delete_distribution(projectId=1, hash="hash") == "response"
6767
m_request.assert_called_once_with(
68-
method="delete", path=resource.get_distributions_path(projectId=1, hash="hash")
68+
method="delete",
69+
path=resource.get_distributions_path(projectId=1, hash="hash"),
6970
)
7071

7172
@mock.patch("crowdin_api.requester.APIRequester.request")

crowdin_api/api_resources/glossaries/tests/test_glossaries_resources.py

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,9 @@ def test_add_glossary(self, m_request, base_absolut_url):
4848
resource = self.get_resource(base_absolut_url)
4949
assert resource.add_glossary(name="test") == "response"
5050
m_request.assert_called_once_with(
51-
method="post", path=resource.get_glossaries_path(), request_data={"name": "test"}
51+
method="post",
52+
path=resource.get_glossaries_path(),
53+
request_data={"name": "test"},
5254
)
5355

5456
@mock.patch("crowdin_api.requester.APIRequester.request")
@@ -86,7 +88,9 @@ def test_edit_glossary(self, m_request, base_absolut_url):
8688
resource = self.get_resource(base_absolut_url)
8789
assert resource.edit_glossary(glossaryId=1, data=data) == "response"
8890
m_request.assert_called_once_with(
89-
method="patch", request_data=data, path=resource.get_glossaries_path(glossaryId=1)
91+
method="patch",
92+
request_data=data,
93+
path=resource.get_glossaries_path(glossaryId=1),
9094
)
9195

9296
# Export
@@ -127,7 +131,8 @@ def test_check_glossary_export_status(self, m_request, base_absolut_url):
127131
resource = self.get_resource(base_absolut_url)
128132
assert resource.check_glossary_export_status(glossaryId=1, exportId="hash") == "response"
129133
m_request.assert_called_once_with(
130-
method="get", path=resource.get_glossary_export_path(glossaryId=1, exportId="hash")
134+
method="get",
135+
path=resource.get_glossary_export_path(glossaryId=1, exportId="hash"),
131136
)
132137

133138
@mock.patch("crowdin_api.requester.APIRequester.request")
@@ -145,7 +150,10 @@ def test_download_glossary(self, m_request, base_absolut_url):
145150
@pytest.mark.parametrize(
146151
"incoming_data, request_data",
147152
(
148-
({"storageId": 1}, {"storageId": 1, "scheme": None, "firstLineContainsHeader": None}),
153+
(
154+
{"storageId": 1},
155+
{"storageId": 1, "scheme": None, "firstLineContainsHeader": None},
156+
),
149157
(
150158
{"storageId": 1, "scheme": {}, "firstLineContainsHeader": True},
151159
{"storageId": 1, "scheme": {}, "firstLineContainsHeader": True},
@@ -171,7 +179,8 @@ def test_check_glossary_import_status(self, m_request, base_absolut_url):
171179
resource = self.get_resource(base_absolut_url)
172180
assert resource.check_glossary_import_status(glossaryId=1, importId="hash") == "response"
173181
m_request.assert_called_once_with(
174-
method="get", path=resource.get_glossaries_path(glossaryId=1) + "/imports/hash"
182+
method="get",
183+
path=resource.get_glossaries_path(glossaryId=1) + "/imports/hash",
175184
)
176185

177186
# Terms
@@ -265,7 +274,9 @@ def test_add_term(self, m_request, incoming_data, request_data, base_absolut_url
265274
resource = self.get_resource(base_absolut_url)
266275
assert resource.add_term(glossaryId=1, **incoming_data) == "response"
267276
m_request.assert_called_once_with(
268-
method="post", path=resource.get_terms_path(glossaryId=1), request_data=request_data
277+
method="post",
278+
path=resource.get_terms_path(glossaryId=1),
279+
request_data=request_data,
269280
)
270281

271282
@pytest.mark.parametrize(
@@ -288,7 +299,9 @@ def test_clear_glossary(self, m_request, incoming_data, request_params, base_abs
288299
resource = self.get_resource(base_absolut_url)
289300
assert resource.clear_glossary(glossaryId=1, **incoming_data) == "response"
290301
m_request.assert_called_once_with(
291-
method="delete", path=resource.get_terms_path(glossaryId=1), params=request_params
302+
method="delete",
303+
path=resource.get_terms_path(glossaryId=1),
304+
params=request_params,
292305
)
293306

294307
@mock.patch("crowdin_api.requester.APIRequester.request")
@@ -326,5 +339,7 @@ def test_edit_term(self, m_request, base_absolut_url):
326339
resource = self.get_resource(base_absolut_url)
327340
assert resource.edit_term(glossaryId=1, termId=2, data=data) == "response"
328341
m_request.assert_called_once_with(
329-
method="patch", request_data=data, path=resource.get_terms_path(glossaryId=1, termId=2)
342+
method="patch",
343+
request_data=data,
344+
path=resource.get_terms_path(glossaryId=1, termId=2),
330345
)

crowdin_api/api_resources/languages/resource.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,5 +108,7 @@ def edit_custom_language(self, languageId: str, data: Iterable[LanguagesPatchReq
108108
"""
109109

110110
return self.requester.request(
111-
method="patch", path=self.get_languages_path(languageId=languageId), request_data=data
111+
method="patch",
112+
path=self.get_languages_path(languageId=languageId),
113+
request_data=data,
112114
)

crowdin_api/api_resources/projects/enums.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,3 +47,12 @@ class ProjectPatchPath(Enum):
4747
LANGUAGE_MAPPING = "/languageMapping"
4848
LANGUAGE_MAPPING_ID = "/languageMapping/{languageId}"
4949
LANGUAGE_MAPPING_KEY = "/languageMapping/{languageId}/{mappingKey}"
50+
51+
52+
class ProjectTranslateDuplicates(Enum):
53+
SHOW = 0
54+
HIDE_REGULAR_DETECTION = 1
55+
SHOW_AUTO_TRANSLATE = 2
56+
SHOW_REGULAR_DETECTION = 3
57+
HIDE_STRICT_DETECTION = 4
58+
SHOW_STRICT_DETECTION = 5

crowdin_api/api_resources/projects/resource.py

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,15 @@
44
from crowdin_api.api_resources.projects.enums import (
55
HasManagerAccess,
66
ProjectLanguageAccessPolicy,
7+
ProjectTranslateDuplicates,
78
ProjectType,
89
ProjectVisibility,
910
)
10-
from crowdin_api.api_resources.projects.types import ProjectPatchRequest
11+
from crowdin_api.api_resources.projects.types import (
12+
NotificationSettings,
13+
ProjectPatchRequest,
14+
QACheckCategories,
15+
)
1116

1217

1318
class ProjectsResource(BaseResource):
@@ -67,12 +72,17 @@ def add_file_based_project(
6772
type: Optional[ProjectType] = None,
6873
normalizePlaceholder: Optional[bool] = None,
6974
saveMetaInfoInSource: Optional[bool] = None,
75+
notificationSettings: Optional[NotificationSettings] = None,
7076
identifier: Optional[str] = None,
7177
targetLanguageIds: Optional[Iterable[str]] = None,
7278
visibility: Optional[ProjectVisibility] = None,
7379
languageAccessPolicy: Optional[ProjectLanguageAccessPolicy] = None,
7480
cname: Optional[str] = None,
7581
description: Optional[str] = None,
82+
translateDuplicates: Optional[ProjectTranslateDuplicates] = None,
83+
isMtAllowed: Optional[bool] = None,
84+
autoSubstitution: Optional[bool] = None,
85+
autoTranslateDialects: Optional[bool] = None,
7686
skipUntranslatedStrings: Optional[bool] = None,
7787
skipUntranslatedFiles: Optional[bool] = None,
7888
exportApprovedOnly: Optional[bool] = None,
@@ -92,6 +102,7 @@ def add_file_based_project(
92102
"type": type,
93103
"normalizePlaceholder": normalizePlaceholder,
94104
"saveMetaInfoInSource": saveMetaInfoInSource,
105+
"notificationSettings": notificationSettings,
95106
"targetLanguageIds": targetLanguageIds,
96107
"visibility": visibility,
97108
"languageAccessPolicy": languageAccessPolicy,
@@ -100,6 +111,10 @@ def add_file_based_project(
100111
"skipUntranslatedStrings": skipUntranslatedStrings,
101112
"skipUntranslatedFiles": skipUntranslatedFiles,
102113
"exportApprovedOnly": exportApprovedOnly,
114+
"translateDuplicates": translateDuplicates,
115+
"isMtAllowed": isMtAllowed,
116+
"autoSubstitution": autoSubstitution,
117+
"autoTranslateDialects": autoTranslateDialects,
103118
},
104119
)
105120

@@ -114,9 +129,23 @@ def add_strings_based_project(
114129
languageAccessPolicy: Optional[ProjectLanguageAccessPolicy] = None,
115130
cname: Optional[str] = None,
116131
description: Optional[str] = None,
132+
translateDuplicates: Optional[ProjectTranslateDuplicates] = None,
133+
isMtAllowed: Optional[bool] = None,
134+
autoSubstitution: Optional[bool] = None,
135+
autoTranslateDialects: Optional[bool] = None,
136+
publicDownloads: Optional[bool] = None,
137+
hiddenStringsProofreadersAccess: Optional[bool] = None,
138+
useGlobalTm: Optional[bool] = None,
117139
skipUntranslatedStrings: Optional[bool] = None,
118140
skipUntranslatedFiles: Optional[bool] = None,
119141
exportApprovedOnly: Optional[bool] = None,
142+
inContextProcessHiddenStrings: Optional[bool] = None,
143+
inContextPseudoLanguageId: Optional[str] = None,
144+
qaCheckIsActive: Optional[bool] = None,
145+
qaCheckCategories: Optional[QACheckCategories] = None,
146+
languageMapping: Optional[Dict] = None,
147+
glossaryAccess: Optional[bool] = None,
148+
notificationSettings: Optional[NotificationSettings] = None,
120149
):
121150
"""
122151
Add Project(Strings Based Project Form).
@@ -139,6 +168,20 @@ def add_strings_based_project(
139168
"skipUntranslatedStrings": skipUntranslatedStrings,
140169
"skipUntranslatedFiles": skipUntranslatedFiles,
141170
"exportApprovedOnly": exportApprovedOnly,
171+
"translateDuplicates": translateDuplicates,
172+
"isMtAllowed": isMtAllowed,
173+
"autoSubstitution": autoSubstitution,
174+
"autoTranslateDialects": autoTranslateDialects,
175+
"publicDownloads": publicDownloads,
176+
"hiddenStringsProofreadersAccess": hiddenStringsProofreadersAccess,
177+
"useGlobalTm": useGlobalTm,
178+
"inContextProcessHiddenStrings": inContextProcessHiddenStrings,
179+
"inContextPseudoLanguageId": inContextPseudoLanguageId,
180+
"qaCheckIsActive": qaCheckIsActive,
181+
"qaCheckCategories": qaCheckCategories,
182+
"languageMapping": languageMapping,
183+
"glossaryAccess": glossaryAccess,
184+
"notificationSettings": notificationSettings,
142185
},
143186
)
144187

crowdin_api/api_resources/projects/tests/test_projects_resources.py

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,11 @@
77
HasManagerAccess,
88
ProjectLanguageAccessPolicy,
99
ProjectPatchPath,
10+
ProjectTranslateDuplicates,
1011
ProjectType,
1112
ProjectVisibility,
1213
)
14+
from crowdin_api.api_resources.projects.types import NotificationSettings, QACheckCategories
1315
from crowdin_api.requester import APIRequester
1416

1517

@@ -94,6 +96,11 @@ def test_add_project(self, m_request, base_absolut_url):
9496
"skipUntranslatedStrings": None,
9597
"skipUntranslatedFiles": None,
9698
"exportApprovedOnly": None,
99+
"translateDuplicates": None,
100+
"isMtAllowed": None,
101+
"autoSubstitution": None,
102+
"autoTranslateDialects": None,
103+
"notificationSettings": None,
97104
},
98105
),
99106
(
@@ -112,6 +119,15 @@ def test_add_project(self, m_request, base_absolut_url):
112119
"skipUntranslatedStrings": "skipUntranslatedStrings",
113120
"skipUntranslatedFiles": "skipUntranslatedFiles",
114121
"exportApprovedOnly": "exportApprovedOnly",
122+
"translateDuplicates": ProjectTranslateDuplicates.SHOW,
123+
"isMtAllowed": True,
124+
"autoSubstitution": True,
125+
"autoTranslateDialects": True,
126+
"notificationSettings": NotificationSettings(
127+
translatorNewStrings=True,
128+
managerNewStrings=True,
129+
managerLanguageCompleted=True,
130+
),
115131
},
116132
{
117133
"name": "name",
@@ -128,6 +144,15 @@ def test_add_project(self, m_request, base_absolut_url):
128144
"skipUntranslatedStrings": "skipUntranslatedStrings",
129145
"skipUntranslatedFiles": "skipUntranslatedFiles",
130146
"exportApprovedOnly": "exportApprovedOnly",
147+
"translateDuplicates": ProjectTranslateDuplicates.SHOW,
148+
"isMtAllowed": True,
149+
"autoSubstitution": True,
150+
"autoTranslateDialects": True,
151+
"notificationSettings": NotificationSettings(
152+
translatorNewStrings=True,
153+
managerNewStrings=True,
154+
managerLanguageCompleted=True,
155+
),
131156
},
132157
),
133158
),
@@ -161,6 +186,20 @@ def test_add_file_based_project(self, m_add_project, in_params, request_data, ba
161186
"skipUntranslatedStrings": None,
162187
"skipUntranslatedFiles": None,
163188
"exportApprovedOnly": None,
189+
"translateDuplicates": None,
190+
"isMtAllowed": None,
191+
"autoSubstitution": None,
192+
"autoTranslateDialects": None,
193+
"publicDownloads": None,
194+
"hiddenStringsProofreadersAccess": None,
195+
"useGlobalTm": None,
196+
"inContextProcessHiddenStrings": None,
197+
"inContextPseudoLanguageId": None,
198+
"qaCheckIsActive": None,
199+
"qaCheckCategories": None,
200+
"languageMapping": None,
201+
"glossaryAccess": None,
202+
"notificationSettings": None,
164203
},
165204
),
166205
(
@@ -177,6 +216,38 @@ def test_add_file_based_project(self, m_add_project, in_params, request_data, ba
177216
"skipUntranslatedStrings": "skipUntranslatedStrings",
178217
"skipUntranslatedFiles": "skipUntranslatedFiles",
179218
"exportApprovedOnly": "exportApprovedOnly",
219+
"translateDuplicates": ProjectTranslateDuplicates.SHOW,
220+
"isMtAllowed": True,
221+
"autoSubstitution": True,
222+
"autoTranslateDialects": True,
223+
"publicDownloads": True,
224+
"hiddenStringsProofreadersAccess": True,
225+
"useGlobalTm": True,
226+
"inContextProcessHiddenStrings": True,
227+
"inContextPseudoLanguageId": "ua",
228+
"qaCheckIsActive": True,
229+
"qaCheckCategories": QACheckCategories(
230+
EMPTY=True,
231+
SIZE=True,
232+
TAGS=True,
233+
SPACES=True,
234+
VARIABLES=True,
235+
PUNCTUATION=True,
236+
SYMBOLREGISTER=True,
237+
SPECIALSYMBOLS=True,
238+
WRONGTRANSLATION=True,
239+
SPELLCHECK=True,
240+
ICU=True,
241+
TERMS=True,
242+
DUPLICATE=True,
243+
),
244+
"languageMapping": {},
245+
"glossaryAccess": True,
246+
"notificationSettings": NotificationSettings(
247+
translatorNewStrings=True,
248+
managerNewStrings=True,
249+
managerLanguageCompleted=True,
250+
),
180251
},
181252
{
182253
"name": "name",
@@ -191,6 +262,38 @@ def test_add_file_based_project(self, m_add_project, in_params, request_data, ba
191262
"skipUntranslatedStrings": "skipUntranslatedStrings",
192263
"skipUntranslatedFiles": "skipUntranslatedFiles",
193264
"exportApprovedOnly": "exportApprovedOnly",
265+
"translateDuplicates": ProjectTranslateDuplicates.SHOW,
266+
"isMtAllowed": True,
267+
"autoSubstitution": True,
268+
"autoTranslateDialects": True,
269+
"publicDownloads": True,
270+
"hiddenStringsProofreadersAccess": True,
271+
"useGlobalTm": True,
272+
"inContextProcessHiddenStrings": True,
273+
"inContextPseudoLanguageId": "ua",
274+
"qaCheckIsActive": True,
275+
"qaCheckCategories": QACheckCategories(
276+
EMPTY=True,
277+
SIZE=True,
278+
TAGS=True,
279+
SPACES=True,
280+
VARIABLES=True,
281+
PUNCTUATION=True,
282+
SYMBOLREGISTER=True,
283+
SPECIALSYMBOLS=True,
284+
WRONGTRANSLATION=True,
285+
SPELLCHECK=True,
286+
ICU=True,
287+
TERMS=True,
288+
DUPLICATE=True,
289+
),
290+
"languageMapping": {},
291+
"glossaryAccess": True,
292+
"notificationSettings": NotificationSettings(
293+
translatorNewStrings=True,
294+
managerNewStrings=True,
295+
managerLanguageCompleted=True,
296+
),
194297
},
195298
),
196299
),

0 commit comments

Comments
 (0)