From 5d98ca8e30a5680e95e2ce5edf526751ca9def65 Mon Sep 17 00:00:00 2001 From: Illia Chub Date: Thu, 4 Nov 2021 17:02:46 +0200 Subject: [PATCH] Added selfprivacy-translate integration --- constants.py | 3 ++ main.py | 71 +++++++++++++++++++++++++++++++++++++++++++++++ requirements.txt | 3 ++ translate_docs.sh | 22 +++++++++++++++ 4 files changed, 99 insertions(+) create mode 100644 constants.py create mode 100644 main.py create mode 100644 requirements.txt create mode 100755 translate_docs.sh diff --git a/constants.py b/constants.py new file mode 100644 index 0000000..5e8fbdf --- /dev/null +++ b/constants.py @@ -0,0 +1,3 @@ +TRANSLATE_API_ENDPOINT_URL = "https://api-free.deepl.com/v2/translate" +USAGE_API_ENDPOINT_URL = "https://api-free.deepl.com/v2/usage" +API_ACCESS_KEY = "" diff --git a/main.py b/main.py new file mode 100644 index 0000000..b2f50f8 --- /dev/null +++ b/main.py @@ -0,0 +1,71 @@ +import requests +from requests_toolbelt.multipart.encoder import MultipartEncoder +import json +import argparse +import os +import constants + +def main(): + # Impl + print("[INFO][PREFLIGHT] Initializing translator...") + + argumentParser = argparse.ArgumentParser(description="Translate text using Deepl service") + + argumentParser.add_argument( + "--file", + help="File, that contains text to translate", + type=str + ) + + argumentParser.add_argument( + "--output", + help="File, that translation will be written to(specify /dev/stdout for output into console)", + type=str + ) + + arguments = argumentParser.parse_args() + + if not os.path.exists(arguments.file): + print("[ERROR][PREFLIGHT] File {0} not found!".format(arguments.file)) + exit(1) + elif os.path.exists(arguments.file): + readOnlyFileDescriptor = open(arguments.file, "r") + + fileContent = readOnlyFileDescriptor.read() + + params = { + "auth_key": constants.API_ACCESS_KEY, + } + + print("[INFO][PREFLIGHT] Performing subscription check...", end="") + + usageMonitoringRequest = requests.get(constants.USAGE_API_ENDPOINT_URL, data=params) + + responseInJSON = json.loads(str(usageMonitoringRequest.text)) + availableCharacters = int(responseInJSON["character_limit"]) + + if len(fileContent) > availableCharacters: + print("[ERROR][PREFLIGHT] Amount of characters in the text file exceeds available!") + readOnlyFileDescriptor.close() + exit(1) + elif len(fileContent) <= availableCharacters: + print("done") + + params = { + "auth_key": constants.API_ACCESS_KEY, + "text": fileContent, + "target_lang": "EN" + } + + translationRequest = requests.get(constants.TRANSLATE_API_ENDPOINT_URL, data=params) + + responseInJSON = json.loads(str(translationRequest.text)) + translation = responseInJSON["translations"][0]["text"] + + readWriteFileDescriptor = open(arguments.output, "w") + readWriteFileDescriptor.write(translation) + + readOnlyFileDescriptor.close() + readWriteFileDescriptor.close() + +main() \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..69ea33e --- /dev/null +++ b/requirements.txt @@ -0,0 +1,3 @@ +requests +requests_toolbelt +argparse \ No newline at end of file diff --git a/translate_docs.sh b/translate_docs.sh new file mode 100755 index 0000000..c4cdd6a --- /dev/null +++ b/translate_docs.sh @@ -0,0 +1,22 @@ +export ruInputFiles=$(ls src/ru/src) + +for inputFile in ${ruInputFiles} +do + python3.9 ${1} --file src/ru/src/${inputFile} --output src/en/src/${inputFile} +done + +buildEnglishTranslation() +{ + cd src/en/ + mdbook build +} + +buildRussianTranslations() +{ + cd src/ru/ + mdbook build +} + +buildEnglishTranslation +cd ../../ +buildRussianTranslations \ No newline at end of file