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

1# Copyright © Michal Čihař <michal@weblate.org> 

2# 

3# SPDX-License-Identifier: GPL-3.0-or-later 

4from __future__ import annotations 

5 

6from typing import TYPE_CHECKING 

7 

8from .base import MachineTranslation, MachineTranslationError 

9from .forms import KeyMachineryForm 

10 

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 

13 

14 

15class YandexTranslation(MachineTranslation): 

16 """Yandex machine translation support.""" 

17 

18 name = "Yandex" 

19 max_score = 90 

20 settings_form = KeyMachineryForm 

21 

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) 

30 

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() 

40 

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() 

62 

63 for translation in payload["text"]: 

64 yield { 

65 "text": translation, 

66 "quality": self.max_score, 

67 "service": self.name, 

68 "source": text, 

69 } 

70 

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)