Skip to content

Commit 8252114

Browse files
authored
feat: Add support for User Report Settings Templates endpoints (#192) (#196)
1 parent 28bd1b4 commit 8252114

File tree

2 files changed

+327
-0
lines changed

2 files changed

+327
-0
lines changed

crowdin_api/api_resources/reports/resource.py

Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1324,3 +1324,128 @@ def generate_organization_translation_costs_post_editing_general_report(
13241324
},
13251325
},
13261326
)
1327+
1328+
1329+
class UserReportSettingsTemplatesResource(BaseReportSettingsTemplatesResource):
1330+
"""
1331+
Resource for User Report Settings Templates API.
1332+
1333+
Supporting the endpoints for managing user report settings templates.
1334+
Link to documentation:
1335+
https://developer.crowdin.com/api/v2/#tag/User-Report-Settings-Templates
1336+
"""
1337+
1338+
def get_user_report_settings_templates_path(
1339+
self,
1340+
userId: int,
1341+
reportSettingsTemplateId: Optional[int] = None
1342+
):
1343+
if reportSettingsTemplateId is not None:
1344+
return f"users/{userId}/reports/settings-templates/{reportSettingsTemplateId}"
1345+
1346+
return f"users/{userId}/reports/settings-templates"
1347+
1348+
def list_user_report_settings_template(
1349+
self,
1350+
userId: int,
1351+
offset: Optional[int] = None,
1352+
limit: Optional[int] = None
1353+
):
1354+
"""
1355+
List User Report Settings Templates.
1356+
1357+
Link to documentation:
1358+
https://developer.crowdin.com/api/v2/#operation/api.users.reports.settings-templates.getMany
1359+
"""
1360+
return self._get_entire_data(
1361+
method="get",
1362+
path=self.get_user_report_settings_templates_path(userId=userId),
1363+
params=self.get_page_params(offset=offset, limit=limit),
1364+
)
1365+
1366+
def add_user_report_settings_template(
1367+
self,
1368+
userId: int,
1369+
name: str,
1370+
currency: Currency,
1371+
unit: Unit,
1372+
config: Config,
1373+
):
1374+
"""
1375+
Add User Report Settings Template.
1376+
1377+
Link to documentation:
1378+
https://developer.crowdin.com/api/v2/#operation/api.users.reports.settings-templates.post
1379+
"""
1380+
return self.requester.request(
1381+
method="post",
1382+
path=self.get_user_report_settings_templates_path(
1383+
userId=userId,
1384+
),
1385+
request_data={
1386+
"name": name,
1387+
"currency": currency,
1388+
"unit": unit,
1389+
"mode": "simple",
1390+
"config": config,
1391+
}
1392+
)
1393+
1394+
def get_user_report_settings_template(
1395+
self,
1396+
userId: int,
1397+
reportSettingsTemplateId: int,
1398+
):
1399+
"""
1400+
Get User Report Settings Template.
1401+
1402+
Link to documentation:
1403+
https://developer.crowdin.com/api/v2/#operation/api.users.reports.settings-templates.get
1404+
"""
1405+
return self.requester.request(
1406+
method="get",
1407+
path=self.get_user_report_settings_templates_path(
1408+
userId=userId,
1409+
reportSettingsTemplateId=reportSettingsTemplateId
1410+
),
1411+
)
1412+
1413+
def edit_user_report_settings_template(
1414+
self,
1415+
userId: int,
1416+
reportSettingsTemplateId: int,
1417+
data: Iterable[ReportSettingsTemplatesPatchRequest],
1418+
):
1419+
"""
1420+
Edit User Report Settings Template.
1421+
1422+
Link to documentation:
1423+
https://developer.crowdin.com/api/v2/#operation/api.users.reports.settings-templates.patch
1424+
"""
1425+
return self.requester.request(
1426+
method="patch",
1427+
path=self.get_user_report_settings_templates_path(
1428+
userId=userId,
1429+
reportSettingsTemplateId=reportSettingsTemplateId
1430+
),
1431+
request_data=data,
1432+
)
1433+
1434+
def delete_user_report_settings_template(
1435+
self,
1436+
userId: int,
1437+
reportSettingsTemplateId: int,
1438+
):
1439+
"""
1440+
Delete User Report Settings Template.
1441+
1442+
Link to documentation:
1443+
https://developer.crowdin.com/api/v2/#operation/api.users.reports.settings-templates.delete
1444+
"""
1445+
return self.requester.request(
1446+
method="delete",
1447+
path=self.get_user_report_settings_templates_path(
1448+
userId=userId,
1449+
reportSettingsTemplateId=reportSettingsTemplateId
1450+
),
1451+
)

crowdin_api/api_resources/reports/tests/test_reports_resources.py

Lines changed: 202 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@
3434
from crowdin_api.api_resources.reports.types import BaseRates, Match
3535
from crowdin_api.requester import APIRequester
3636

37+
from crowdin_api.api_resources.reports.resource import UserReportSettingsTemplatesResource
38+
3739

3840
class TestReportsResource:
3941
resource_class = ReportsResource
@@ -2163,3 +2165,203 @@ def test_delete_report_settings_template(self, m_request, base_absolut_url):
21632165
reportSettingsTemplateId=1
21642166
)
21652167
)
2168+
2169+
2170+
class TestUserReportSettingsTemplatesResource:
2171+
resource_class = UserReportSettingsTemplatesResource
2172+
2173+
def get_resource(self, base_absolut_url):
2174+
return self.resource_class(requester=APIRequester(base_url=base_absolut_url))
2175+
2176+
@pytest.mark.parametrize(
2177+
"incoming_data, path",
2178+
(
2179+
({"userId": 1}, "users/1/reports/settings-templates"),
2180+
(
2181+
{"userId": 1, "reportSettingsTemplateId": 1},
2182+
"users/1/reports/settings-templates/1"
2183+
),
2184+
),
2185+
)
2186+
def test_get_user_report_settings_templates_path(
2187+
self, incoming_data, path, base_absolut_url
2188+
):
2189+
resource = self.get_resource(base_absolut_url)
2190+
assert resource.get_user_report_settings_templates_path(**incoming_data) == path
2191+
2192+
@pytest.mark.parametrize(
2193+
"incoming_data, request_params",
2194+
(
2195+
(
2196+
{},
2197+
{
2198+
"limit": 25,
2199+
"offset": 0,
2200+
},
2201+
),
2202+
(
2203+
{
2204+
"limit": 10,
2205+
"offset": 2,
2206+
},
2207+
{
2208+
"limit": 10,
2209+
"offset": 2,
2210+
},
2211+
),
2212+
),
2213+
)
2214+
@mock.patch("crowdin_api.requester.APIRequester.request")
2215+
def test_list_user_report_settings_template(
2216+
self,
2217+
m_request,
2218+
incoming_data,
2219+
request_params,
2220+
base_absolut_url
2221+
):
2222+
m_request.return_value = "response"
2223+
2224+
resource = self.get_resource(base_absolut_url)
2225+
assert resource.list_user_report_settings_template(userId=1, **incoming_data) == "response"
2226+
m_request.assert_called_once_with(
2227+
method="get",
2228+
path=resource.get_user_report_settings_templates_path(userId=1),
2229+
params=request_params,
2230+
)
2231+
2232+
@pytest.mark.parametrize(
2233+
"incoming_data, request_data",
2234+
(
2235+
(
2236+
{
2237+
"name": "test_name",
2238+
"currency": Currency.UAH,
2239+
"unit": Unit.WORDS,
2240+
"config": {
2241+
"regularRates": [
2242+
{
2243+
"mode": "tm_match",
2244+
"value": 0.1
2245+
}
2246+
],
2247+
"individualRates": [
2248+
{
2249+
"languageIds": ["uk"],
2250+
"userIds": [1],
2251+
"rates": [
2252+
{
2253+
"mode": "tm_match",
2254+
"value": 0.1
2255+
}
2256+
]
2257+
}
2258+
]
2259+
}
2260+
},
2261+
{
2262+
"name": "test_name",
2263+
"currency": Currency.UAH,
2264+
"unit": Unit.WORDS,
2265+
"mode": "simple",
2266+
"config": {
2267+
"regularRates": [
2268+
{
2269+
"mode": "tm_match",
2270+
"value": 0.1
2271+
}
2272+
],
2273+
"individualRates": [
2274+
{
2275+
"languageIds": ["uk"],
2276+
"userIds": [1],
2277+
"rates": [
2278+
{
2279+
"mode": "tm_match",
2280+
"value": 0.1
2281+
}
2282+
]
2283+
}
2284+
]
2285+
}
2286+
},
2287+
),
2288+
),
2289+
)
2290+
@mock.patch("crowdin_api.requester.APIRequester.request")
2291+
def test_add_user_report_settings_template(
2292+
self,
2293+
m_request,
2294+
incoming_data,
2295+
request_data,
2296+
base_absolut_url
2297+
):
2298+
m_request.return_value = "response"
2299+
2300+
resource = self.get_resource(base_absolut_url)
2301+
assert resource.add_user_report_settings_template(userId=1, **incoming_data) == "response"
2302+
m_request.assert_called_once_with(
2303+
method="post",
2304+
path=resource.get_user_report_settings_templates_path(userId=1),
2305+
request_data=request_data,
2306+
)
2307+
2308+
@mock.patch("crowdin_api.requester.APIRequester.request")
2309+
def test_get_user_report_settings_template(self, m_request, base_absolut_url):
2310+
m_request.return_value = "response"
2311+
2312+
resource = self.get_resource(base_absolut_url)
2313+
assert resource.get_user_report_settings_template(
2314+
userId=1,
2315+
reportSettingsTemplateId=1
2316+
) == "response"
2317+
m_request.assert_called_once_with(
2318+
method="get",
2319+
path=resource.get_user_report_settings_templates_path(
2320+
userId=1,
2321+
reportSettingsTemplateId=1
2322+
),
2323+
)
2324+
2325+
@mock.patch("crowdin_api.requester.APIRequester.request")
2326+
def test_edit_user_report_settings_template(self, m_request, base_absolut_url):
2327+
m_request.return_value = "response"
2328+
2329+
data = [
2330+
{
2331+
"value": "test",
2332+
"op": PatchOperation.REPLACE,
2333+
"path": ReportSettingsTemplatesPatchPath.NAME,
2334+
}
2335+
]
2336+
2337+
resource = self.get_resource(base_absolut_url)
2338+
assert resource.edit_user_report_settings_template(
2339+
userId=1,
2340+
reportSettingsTemplateId=1,
2341+
data=data
2342+
) == "response"
2343+
m_request.assert_called_once_with(
2344+
method="patch",
2345+
path=resource.get_user_report_settings_templates_path(
2346+
userId=1,
2347+
reportSettingsTemplateId=1
2348+
),
2349+
request_data=data,
2350+
)
2351+
2352+
@mock.patch("crowdin_api.requester.APIRequester.request")
2353+
def test_delete_user_report_settings_template(self, m_request, base_absolut_url):
2354+
m_request.return_value = "response"
2355+
2356+
resource = self.get_resource(base_absolut_url)
2357+
assert resource.delete_user_report_settings_template(
2358+
userId=1,
2359+
reportSettingsTemplateId=1
2360+
) == "response"
2361+
m_request.assert_called_once_with(
2362+
method="delete",
2363+
path=resource.get_user_report_settings_templates_path(
2364+
userId=1,
2365+
reportSettingsTemplateId=1
2366+
),
2367+
)

0 commit comments

Comments
 (0)