File size: 3,148 Bytes
a6888ed
2bbc526
70f6ed6
 
78d0ff1
 
 
 
 
70f6ed6
a6888ed
 
f89616a
a6888ed
f89616a
a6888ed
 
78d0ff1
 
 
a6888ed
f89616a
41a7e8f
ac77ea3
 
a6888ed
 
 
78d0ff1
a6888ed
78d0ff1
 
 
 
 
70f6ed6
 
 
 
 
78d0ff1
 
a6888ed
55109ff
ac77ea3
 
 
 
70f6ed6
 
 
2bbc526
70f6ed6
78d0ff1
70f6ed6
 
 
 
78d0ff1
70f6ed6
 
 
 
78d0ff1
 
70f6ed6
 
 
 
 
 
 
 
 
 
 
 
78d0ff1
a6888ed
2bbc526
 
 
55109ff
a6888ed
186e33e
a6888ed
 
2bbc526
dbaf8a8
 
78d0ff1
70f6ed6
 
d120ba4
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
import requests

from deep_translator.validate import is_empty, validate_input
from deep_translator.constants import BASE_URLS, DEEPL_LANGUAGE_TO_CODE
from deep_translator.exceptions import (
    ServerException,
    TranslationNotFound,
    AuthorizationException,
)
from deep_translator.base import BaseTranslator


class DeeplTranslator(BaseTranslator):
    """
    class that wraps functions, which use the DeeplTranslator translator under the hood to translate word(s)
    """

    def __init__(
        self, api_key=None, source="de", target="en", use_free_api=True, **kwargs
    ):
        """
        @param api_key: your DeeplTranslator api key.
        Get one here: https://www.deepl.com/docs-api/accessing-the-api/
        @param source: source language
        @param target: target language
        """
        if not api_key:
            raise ServerException(401)
        self.version = "v2"
        self.api_key = api_key
        url = (
            BASE_URLS.get("DEEPL_FREE").format(version=self.version)
            if use_free_api
            else BASE_URLS.get("DEEPL").format(version=self.version)
        )
        super().__init__(
            base_url=url,
            source=source,
            target=target,
            languages=DEEPL_LANGUAGE_TO_CODE,
            **kwargs
        )

    def translate(self, text, **kwargs):
        """
        @param text: text to translate
        @return: translated text
        """
        if validate_input(text):
            if self._same_source_target() or is_empty(text):
                return text

            # Create the request parameters.
            translate_endpoint = "translate"
            params = {
                "auth_key": self.api_key,
                "source_lang": self._source,
                "target_lang": self._target,
                "text": text,
            }
            # Do the request and check the connection.
            try:
                response = requests.get(
                    self._base_url + translate_endpoint, params=params
                )
            except ConnectionError:
                raise ServerException(503)
            # If the answer is not success, raise server exception.
            if response.status_code == 403:
                raise AuthorizationException(self.api_key)
            elif response.status_code != 200:
                raise ServerException(response.status_code)
            # Get the response and check is not empty.
            res = response.json()
            if not res:
                raise TranslationNotFound(text)
            # Process and return the response.
            return res["translations"][0]["text"]

    def translate_file(self, path, **kwargs):
        return self._translate_file(path, **kwargs)

    def translate_batch(self, batch, **kwargs):
        """
        @param batch: list of texts to translate
        @return: list of translations
        """
        return self._translate_batch(batch, **kwargs)


if __name__ == "__main__":
    d = DeeplTranslator(target="en", api_key="some-key")
    t = d.translate("Ich habe keine ahnung")
    print("text: ", t)