🐛[bugfix] Model : Auth keyの復旧作業

This commit is contained in:
misyaguziya
2023-10-19 15:39:39 +09:00
parent 62652dccd4
commit bfe177aa17
7 changed files with 211 additions and 3 deletions

View File

@@ -415,6 +415,19 @@ class Config:
self._OSC_PORT = value
saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, value)
@property
@json_serializable('AUTH_KEYS')
def AUTH_KEYS(self):
return self._AUTH_KEYS
@AUTH_KEYS.setter
def AUTH_KEYS(self, value):
if type(value) is dict and set(value.keys()) == set(self.AUTH_KEYS.keys()):
for key, value in value.items():
if type(value) is str:
self._AUTH_KEYS[key] = value
saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, self.AUTH_KEYS)
@property
@json_serializable('MESSAGE_FORMAT')
def MESSAGE_FORMAT(self):
@@ -550,6 +563,12 @@ class Config:
self._INPUT_SPEAKER_MAX_PHRASES = 10
self._OSC_IP_ADDRESS = "127.0.0.1"
self._OSC_PORT = 9000
self._AUTH_KEYS = {
"DeepL_API": None,
"DeepL": None,
"Bing": None,
"Google": None,
}
self._MESSAGE_FORMAT = "[message]([translation])"
self._ENABLE_AUTO_CLEAR_MESSAGE_BOX = True
self._ENABLE_NOTICE_XSOVERLAY = False

View File

@@ -22,6 +22,8 @@ def sendMicMessage(message):
return
elif config.ENABLE_TRANSLATION is False:
pass
elif model.getTranslatorStatus() is False:
view.printToTextbox_AuthenticationError()
else:
translation = model.getInputTranslate(message)
@@ -85,6 +87,8 @@ def receiveSpeakerMessage(message):
translation = ""
if config.ENABLE_TRANSLATION is False:
pass
elif model.getTranslatorStatus() is False:
view.printToTextbox_AuthenticationError()
else:
translation = model.getOutputTranslate(message)
@@ -150,6 +154,8 @@ def sendChatMessage(message):
translation = ""
if config.ENABLE_TRANSLATION is False:
pass
elif model.getTranslatorStatus() is False:
view.printToTextbox_AuthenticationError()
else:
translation = model.getInputTranslate(message)
@@ -206,6 +212,7 @@ def initSetLanguageAndCountry():
config.TARGET_LANGUAGE = language
config.TARGET_COUNTRY = country
config.CHOICE_TRANSLATOR = model.findTranslationEngine(config.SOURCE_LANGUAGE, config.TARGET_LANGUAGE)
model.authenticationTranslator(callbackSetAuthKeys)
def setYourLanguageAndCountry(select):
languages = config.SELECTED_TAB_YOUR_LANGUAGES
@@ -215,6 +222,7 @@ def setYourLanguageAndCountry(select):
config.SOURCE_LANGUAGE = language
config.SOURCE_COUNTRY = country
config.CHOICE_TRANSLATOR = model.findTranslationEngine(config.SOURCE_LANGUAGE, config.TARGET_LANGUAGE)
model.authenticationTranslator(callbackSetAuthKeys)
view.printToTextbox_selectedYourLanguages(select)
def setTargetLanguageAndCountry(select):
@@ -225,6 +233,7 @@ def setTargetLanguageAndCountry(select):
config.TARGET_LANGUAGE = language
config.TARGET_COUNTRY = country
config.CHOICE_TRANSLATOR = model.findTranslationEngine(config.SOURCE_LANGUAGE, config.TARGET_LANGUAGE)
model.authenticationTranslator(callbackSetAuthKeys)
view.printToTextbox_selectedTargetLanguages(select)
def callbackSelectedLanguagePresetTab(selected_tab_no):
@@ -241,8 +250,11 @@ def callbackSelectedLanguagePresetTab(selected_tab_no):
config.TARGET_LANGUAGE = language
config.TARGET_COUNTRY = country
config.CHOICE_TRANSLATOR = model.findTranslationEngine(config.SOURCE_LANGUAGE, config.TARGET_LANGUAGE)
model.authenticationTranslator(callbackSetAuthKeys)
view.printToTextbox_changedLanguagePresetTab(config.SELECTED_TAB_NO)
def callbackSetAuthKeys(keys):
config.AUTH_KEYS = keys
# command func
def callbackToggleTranslation(is_turned_on):
@@ -362,6 +374,21 @@ def callbackSetUiLanguage(value):
config.UI_LANGUAGE = value
view.showRestartButtonIfRequired(locale=config.UI_LANGUAGE)
# Translation Tab
def callbackSetDeeplAuthkey(value):
print("callbackSetDeeplAuthkey", str(value))
if len(value) > 0 and model.authenticationTranslator(callbackSetAuthKeys, choice_translator="DeepL(auth)", auth_key=value) is True:
config.CHOICE_TRANSLATOR = model.findTranslationEngine(config.SOURCE_LANGUAGE, config.TARGET_LANGUAGE)
model.authenticationTranslator(callbackSetAuthKeys)
view.printToTextbox_AuthenticationSuccess()
elif len(value) == 0:
auth_keys = config.AUTH_KEYS
auth_keys["DeepL(auth)"] = None
config.AUTH_KEYS = auth_keys
model.authenticationTranslator(callbackSetAuthKeys)
else:
view.printToTextbox_AuthenticationError()
# Transcription Tab (Mic)
def callbackSetMicHost(value):
print("callbackSetMicHost", value)
@@ -607,6 +634,12 @@ def createMainWindow():
# init config
initSetLanguageAndCountry()
if model.authenticationTranslator(callbackSetAuthKeys) is False:
# error update Auth key
view.printToTextbox_AuthenticationError()
config.CHOICE_TRANSLATOR = model.findTranslationEngine(config.SOURCE_LANGUAGE, config.TARGET_LANGUAGE)
model.authenticationTranslator(callbackSetAuthKeys)
# set word filter
model.addKeywords()
@@ -666,6 +699,9 @@ def createMainWindow():
"callback_set_font_family": callbackSetFontFamily,
"callback_set_ui_language": callbackSetUiLanguage,
# Translation Tab
"callback_set_deepl_authkey": callbackSetDeeplAuthkey,
# Transcription Tab (Mic)
"callback_set_mic_host": callbackSetMicHost,
"list_mic_host": model.getListInputHost(),

View File

@@ -81,6 +81,22 @@ class Model:
del self.keyword_processor
self.keyword_processor = KeywordProcessor()
def authenticationTranslator(self, fnc, choice_translator=None, auth_key=None):
if choice_translator == None:
choice_translator = config.CHOICE_TRANSLATOR
if auth_key == None:
auth_key = config.AUTH_KEYS[choice_translator]
result = self.translator.authentication(choice_translator, auth_key)
if result:
auth_keys = config.AUTH_KEYS
auth_keys[choice_translator] = auth_key
try:
fnc(auth_keys)
except:
pass
return result
def startLogger(self):
os_makedirs(os_path.join(os_path.dirname(sys.argv[0]), "logs"), exist_ok=True)
logger = getLogger()
@@ -121,10 +137,32 @@ class Model:
if source_lang in source_languages and target_lang in target_languages:
compatible_engines.append(engine)
engine_name = compatible_engines[0]
if engine_name == "DeepL" and config.AUTH_KEYS["DeepL_API"] != None:
engine_name = "DeepL"
return engine_name
def getTranslatorStatus(self):
return self.translator.translator_status[config.CHOICE_TRANSLATOR]
def getListTranslatorName(self):
return list(self.translator.translator_status.keys())
def getInputTranslate(self, message):
try:
if config.CHOICE_TRANSLATOR == "DeepL_API":
if config.TARGET_LANGUAGE == "English":
if config.TARGET_COUNTRY in ["United States", "Canada", "Philippines"]:
config.TARGET_LANGUAGE = "English American"
else:
config.TARGET_LANGUAGE = "English British"
elif config.TARGET_LANGUAGE in ["Portuguese"]:
if config.TARGET_COUNTRY == "Portugal":
config.TARGET_LANGUAGE = "Portuguese European"
else:
config.TARGET_LANGUAGE = "Portuguese Brazilian"
translation = self.translator.translate(
translator_name=config.CHOICE_TRANSLATOR,
source_language=config.SOURCE_LANGUAGE,
@@ -137,6 +175,18 @@ class Model:
def getOutputTranslate(self, message):
try:
if config.CHOICE_TRANSLATOR == "DeepL_API":
if config.SOURCE_LANGUAGE == "English":
if config.SOURCE_COUNTRY in ["United States", "Canada", "Philippines"]:
config.SOURCE_LANGUAGE = "English American"
else:
config.SOURCE_LANGUAGE = "English British"
elif config.SOURCE_LANGUAGE in ["Portuguese"]:
if config.SOURCE_COUNTRY == "Portugal":
config.SOURCE_LANGUAGE = "Portuguese European"
else:
config.SOURCE_LANGUAGE = "Portuguese Brazilian"
translation = self.translator.translate(
translator_name=config.CHOICE_TRANSLATOR,
source_language=config.TARGET_LANGUAGE,

View File

@@ -1,4 +1,4 @@
translatorEngine = ["DeepL", "Google", "Bing"]
translatorEngine = ["DeepL", "DeepL_API", "Google", "Bing"]
translation_lang = {}
dict_deepl_languages = {
"Japanese":"JA",
@@ -36,6 +36,76 @@ translation_lang["DeepL"] = {
"target":dict_deepl_languages,
}
dict_deepl_api_source_languages = {
"Japanese":"ja",
"English":"en",
"Bulgarian":"bg",
"Czech":"cs",
"Danish":"da",
"German":"de",
"Greek":"el",
"Spanish":"es",
"Estonian":"et",
"Finnish":"fi",
"French":"fr",
"Hungarian":"hu",
"Indonesian":"id",
"Italian":"it",
"Korean":"ko",
"Lithuanian":"lt",
"Latvian":"lv",
"Norwegian":"nb",
"Dutch":"nl",
"Polish":"pl",
"Portuguese":"pt",
"Romanian":"ro",
"Russian":"ru",
"Slovak":"sk",
"Slovenian":"sl",
"Swedish":"sv",
"Turkish":"tr",
"Ukrainian":"uk",
"Chinese":"zh"
}
dict_deepl_api_target_languages = {
"Japanese":"ja",
"English American":"en-US",
"English British":"en-GB",
"Bulgarian":"bg",
"Czech":"cs",
"Danish":"da",
"German":"de",
"Greek":"el",
"English":"en",
"Spanish":"es",
"Estonian":"et",
"Finnish":"fi",
"French":"fr",
"Hungarian":"hu",
"Indonesian":"id",
"Italian":"it",
"Korean":"ko",
"Lithuanian":"lt",
"Latvian":"lv",
"Norwegian":"nb",
"Dutch":"nl",
"Polish":"pl",
"Portuguese Brazilian":"pt-BR",
"Portuguese European":"pt-PT",
"Romanian":"ro",
"Russian":"ru",
"Slovak":"sk",
"Slovenian":"sl",
"Swedish":"sv",
"Turkish":"tr",
"Ukrainian":"uk",
"Chinese":"zh"
}
translation_lang["DeepL_API"] = {
"source": dict_deepl_api_source_languages,
"target": dict_deepl_api_target_languages,
}
dict_google_languages = {
"Japanese":"ja",
"English":"en",

View File

@@ -1,3 +1,4 @@
from deepl import Translator as deepl_Translator
from deepl_translate import translate as deepl_web_Translator
from translators import translate_text as other_web_Translator
from .translation_languages import translatorEngine, translation_lang
@@ -5,7 +6,32 @@ from .translation_languages import translatorEngine, translation_lang
# Translator
class Translator():
def __init__(self):
pass
self.translator_status = {}
for translator in translatorEngine:
self.translator_status[translator] = False
self.deepl_client = None
def authentication(self, translator_name, authkey=None):
result = False
match translator_name:
case "DeepL":
self.translator_status[translator_name] = True
result = True
case "DeepL_API":
try:
self.deepl_client = deepl_Translator(authkey)
self.deepl_client.translate_text(" ", target_lang="EN-US")
self.translator_status[translator_name] = True
result = True
except:
self.translator_status[translator_name] = False
case "Google":
self.translator_status[translator_name] = True
result = True
case "Bing":
self.translator_status[translator_name] = True
result = True
return result
def translate(self, translator_name, source_language, target_language, message):
try:
@@ -19,6 +45,12 @@ class Translator():
target_language=target_language,
text=message
)
case "DeepL_API":
result = self.deepl_client.translate_text(
message,
source_lang=source_language,
target_lang=target_language,
).text
case "Google":
result = other_web_Translator(
query_text=message,

View File

@@ -2,6 +2,7 @@ pillow == 10.0.0
PyAudioWPatch == 0.2.12.6
python-osc == 1.8.3
customtkinter == 5.2.0
deepl == 1.15.0
flashtext == 2.7
pyyaml == 6.0.1
python-i18n == 0.3.9

View File

@@ -226,7 +226,7 @@ class View():
# VAR_LABEL_DEEPL_AUTH_KEY=StringVar(value=i18n.t("config_window.deepl_auth_key.label")),
# VAR_DESC_DEEPL_AUTH_KEY=None,
# CALLBACK_SET_DEEPL_AUTH_KEY=None,
# VAR_DEEPL_AUTH_KEY=StringVar(value=""),
# VAR_DEEPL_AUTH_KEY=StringVar(value="config.AUTH_KEYS["DeepL_API"]"),
# Transcription Tab (Mic)