/
apps.py
118 lines (97 loc) · 4.2 KB
/
apps.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
"""
Configuration of Google Translate API app
"""
from __future__ import annotations
import logging
import os
import sys
from typing import TYPE_CHECKING
from django.apps import AppConfig
from django.conf import settings
from django.utils.translation import gettext_lazy as _
from google.cloud import translate_v2, translate_v3 # type: ignore[attr-defined]
from google.oauth2 import service_account
if TYPE_CHECKING:
from typing import Final
from django.utils.functional import Promise
from google.oauth2.service_account import Credentials
logger = logging.getLogger(__name__)
class GoogleTranslateApiClientConfig(AppConfig):
"""
Google Translate API config inheriting the django AppConfig
"""
#: Full Python path to the application
name: Final[str] = "integreat_cms.google_translate_api"
#: Human-readable name for the application
verbose_name: Final[Promise] = _("Google Translate API")
#: The supported source languages
supported_source_languages: list[str] = []
#: The supported target languages
supported_target_languages: list[str] = []
def ready_v2(self, credentials: Credentials) -> None:
"""
Preparing Google Translate with basic version
"""
logger.info(translate_v2)
google_translator_v2 = translate_v2.Client(credentials=credentials)
# Version 2 (Basic) does not distinguish source and target language
supported_languages = google_translator_v2.get_languages()
self.supported_source_languages = []
self.supported_target_languages = []
for language in supported_languages:
self.supported_source_languages += [language["language"]]
self.supported_target_languages += [language["language"]]
def ready_v3(self, credentials: Credentials) -> None:
"""
Preparing Google Translate with advanced version
"""
logger.info(translate_v3)
google_translator_v3 = translate_v3.TranslationServiceClient(
credentials=credentials
)
parent = settings.GOOGLE_PARENT_PARAM
supported_languages = google_translator_v3.get_supported_languages(
parent=parent
).languages
self.supported_source_languages = []
self.supported_target_languages = []
for language in supported_languages:
if language.support_source:
self.supported_source_languages += [language.language_code]
if language.support_target:
self.supported_target_languages += [language.language_code]
def ready(self) -> None:
"""
Checking if API is available
"""
# Only check availability if running a server
if "runserver" in sys.argv or "APACHE_PID_FILE" in os.environ:
if settings.GOOGLE_TRANSLATE_ENABLED:
try:
credentials = service_account.Credentials.from_service_account_file(
settings.GOOGLE_APPLICATION_CREDENTIALS
)
if settings.GOOGLE_TRANSLATE_VERSION == "Advanced":
self.ready_v3(credentials)
else:
self.ready_v2(credentials)
assert (
self.supported_source_languages
), "No supported source languages by Google Translate"
logger.debug(
"Supported source languages by Google Translate: %r",
self.supported_source_languages,
)
assert (
self.supported_source_languages
), "No supported target languages by Google Translate"
logger.debug(
"Supported target languages by Google Translate: %r",
self.supported_target_languages,
)
logger.info("Google Translate API is enabled.")
except Exception as e: # pylint: disable=broad-except
logger.error(e)
logger.error("Google translate is not available.")
else:
logger.info("Google Translate API is disabled.")