Coverage for app/venv/lib/python3.14/site-packages/weblate/machinery/yandex.py: 35%
32 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-07 07:15 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-07 07:15 +0000
1# Copyright © Michal Čihař <michal@weblate.org>
2#
3# SPDX-License-Identifier: GPL-3.0-or-later
4from __future__ import annotations
6from typing import TYPE_CHECKING
8from .base import MachineTranslation, MachineTranslationError
9from .forms import KeyMachineryForm
11if TYPE_CHECKING: 11 ↛ 12line 11 didn't jump to line 12 because the condition on line 11 was never true
12 from .base import DownloadTranslations
15class YandexTranslation(MachineTranslation):
16 """Yandex machine translation support."""
18 name = "Yandex"
19 max_score = 90
20 settings_form = KeyMachineryForm
22 def check_failure(self, response) -> None:
23 super().check_failure(response)
24 payload = response.json()
25 if "message" in payload:
26 raise MachineTranslationError(payload["message"])
27 if "code" in payload and payload["code"] != 200:
28 msg = "Error: {}".format(payload["code"])
29 raise MachineTranslationError(msg)
31 def download_languages(self):
32 """Download list of supported languages from a service."""
33 response = self.request(
34 "get",
35 "https://translate.yandex.net/api/v1.5/tr.json/getLangs",
36 params={"key": self.settings["key"], "ui": "en"},
37 )
38 payload = response.json()
39 return payload["langs"].keys()
41 def download_translations(
42 self,
43 source_language,
44 target_language,
45 text: str,
46 unit,
47 user,
48 threshold: int = 75,
49 ) -> DownloadTranslations:
50 """Download list of possible translations from a service."""
51 response = self.request(
52 "get",
53 "https://translate.yandex.net/api/v1.5/tr.json/translate",
54 params={
55 "key": self.settings["key"],
56 "text": text,
57 "lang": f"{source_language}-{target_language}",
58 "target": target_language,
59 },
60 )
61 payload = response.json()
63 for translation in payload["text"]:
64 yield {
65 "text": translation,
66 "quality": self.max_score,
67 "service": self.name,
68 "source": text,
69 }
71 def get_error_message(self, exc):
72 try:
73 return exc.response.json()["message"]
74 except Exception:
75 return super().get_error_message(exc)