=
testing docs issues
6a08467
raw
history blame
2.24 kB
"""Main module."""
try:
from bs4 import BeautifulSoup
except:
raise Exception("Import Error")
import requests
from .models import BaseTranslator
from .constants import BASE_URLS, LANGUAGES_TO_CODES
from .exceptions import LanguageNotSupportedException, NotValidPayload
class GoogleTranslator(BaseTranslator):
def __init__(self, source="auto", target="en"):
self.__base_url = BASE_URLS.get("GOOGLE_TRANSLATE")
super(GoogleTranslator, self).__init__()
if self._validate_languages([source.lower(), target.lower()]):
self._source = self._map_language_to_code(source.lower())
self._target = self._map_language_to_code(target.lower())
def _validate_payload(self, payload):
if not isinstance(payload, str):
return False
elif not payload:
return False
elif len(payload) > 5000:
return False
else:
return True
def _map_language_to_code(self, language):
if language in LANGUAGES_TO_CODES.values() or language == 'auto':
return language
elif language in LANGUAGES_TO_CODES.keys():
return LANGUAGES_TO_CODES[language]
else:
raise LanguageNotSupportedException(language)
def _validate_languages(self, languages):
for lang in languages:
if lang != 'auto' and lang not in LANGUAGES_TO_CODES.keys():
if lang != 'auto' and lang not in LANGUAGES_TO_CODES.values():
raise LanguageNotSupportedException(lang)
return True
def translate(self, payload):
valid = self._validate_payload(payload)
if not valid:
raise NotValidPayload(payload)
try:
payload = payload.strip()
params = {
"hl": self._target,
"sl": self._source,
"q": payload
}
res = requests.get(self.__base_url, params=params)
soup = BeautifulSoup(res.text, 'html.parser')
res = soup.find("div", {"class": "t0"})
return res.get_text(strip=True)
except Exception as e:
print(e.args)
raise