Skip to content

Commit

Permalink
translate: catch requests exceptions
Browse files Browse the repository at this point in the history
This is #2153, cherry-picked back to 7.1.x by @dgw.
  • Loading branch information
Exirel authored and dgw committed Jul 10, 2021
1 parent 7a52c9c commit a61bbd9
Showing 1 changed file with 35 additions and 2 deletions.
37 changes: 35 additions & 2 deletions sopel/modules/translate.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
from __future__ import absolute_import, division, print_function, unicode_literals

import json
import logging
import random
import sys

Expand All @@ -21,6 +22,7 @@
if sys.version_info.major >= 3:
unicode = str

LOGGER = logging.getLogger(__name__)
PLUGIN_OUTPUT_PREFIX = '[translate] '


Expand Down Expand Up @@ -68,6 +70,9 @@ def translate(text, in_lang='auto', out_lang='en'):
try:
data = json.loads(result)
except ValueError:
LOGGER.error(
'Error parsing JSON response from translate API (%s to %s: "%s")',
in_lang, out_lang, text)
return None, None

if raw:
Expand Down Expand Up @@ -104,7 +109,21 @@ def tr(bot, trigger):
bot.reply('Language guessing failed, so try suggesting one!')
return

msg, in_lang = translate(phrase, in_lang, out_lang)
try:
msg, in_lang = translate(phrase, in_lang, out_lang)
except requests.Timeout:
bot.reply("Translation service unavailable (timeout).")
LOGGER.error(
'Translate API error (%s to %s: "%s"): timeout.',
in_lang, out_lang, phrase)
return
except requests.RequestException as http_error:
bot.reply("Translation request failed.")
LOGGER.exception(
'Translate API error (%s to %s: "%s"): %s.',
in_lang, out_lang, phrase, http_error)
return

if not in_lang:
bot.reply("Translation failed, probably because of a rate-limit.")
return
Expand Down Expand Up @@ -171,7 +190,21 @@ def langcode(p):
bot.reply('Language guessing failed, so try suggesting one!')
return

msg, src = translate(phrase, src, dest)
try:
msg, src = translate(phrase, src, dest)
except requests.Timeout:
bot.reply("Translation service unavailable (timeout).")
LOGGER.error(
'Translate API error (%s to %s: "%s"): timeout.',
src, dest, phrase)
return
except requests.RequestException as http_error:
bot.reply("Translation request failed.")
LOGGER.exception(
'Translate API error (%s to %s: "%s"): %s.',
src, dest, phrase, http_error)
return

if not src:
return bot.say("Translation failed, probably because of a rate-limit.")

Expand Down

0 comments on commit a61bbd9

Please sign in to comment.