Skip to content

Commit

Permalink
Merge pull request #2153 from Exirel/translate-error-handling
Browse files Browse the repository at this point in the history
translate: catch requests exceptions
  • Loading branch information
dgw authored Jul 10, 2021
2 parents 677cdbf + a5d4928 commit 1b5c207
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 @@ -9,6 +9,7 @@
from __future__ import generator_stop

import json
import logging
import random

import requests
Expand All @@ -17,6 +18,7 @@
from sopel.tools import web


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


Expand Down Expand Up @@ -64,6 +66,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 @@ -100,7 +105,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 @@ -164,7 +183,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 1b5c207

Please sign in to comment.