From 59d04d1d0cf449ae69e110e9833e48bc4d525a61 Mon Sep 17 00:00:00 2001 From: gcarq Date: Fri, 17 Nov 2017 19:47:29 +0100 Subject: [PATCH] catch TelegramError (fixes #113) --- freqtrade/rpc/telegram.py | 24 ++++++++++++++---------- freqtrade/tests/test_telegram.py | 3 +-- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/freqtrade/rpc/telegram.py b/freqtrade/rpc/telegram.py index 0e0487df6..0bc44c23f 100644 --- a/freqtrade/rpc/telegram.py +++ b/freqtrade/rpc/telegram.py @@ -8,7 +8,7 @@ from tabulate import tabulate import arrow from sqlalchemy import and_, func, text from telegram import ParseMode, Bot, Update -from telegram.error import NetworkError +from telegram.error import NetworkError, TelegramError from telegram.ext import CommandHandler, Updater from freqtrade import exchange, __version__ @@ -475,13 +475,17 @@ def send_msg(msg: str, bot: Bot = None, parse_mode: ParseMode = ParseMode.MARKDO return bot = bot or _UPDATER.bot + try: - bot.send_message(_CONF['telegram']['chat_id'], msg, parse_mode=parse_mode) - except NetworkError as error: - # Sometimes the telegram server resets the current connection, - # if this is the case we send the message again. - logger.warning( - 'Got Telegram NetworkError: %s! Trying one more time.', - error.message - ) - bot.send_message(_CONF['telegram']['chat_id'], msg, parse_mode=parse_mode) + try: + bot.send_message(_CONF['telegram']['chat_id'], msg, parse_mode=parse_mode) + except NetworkError as network_err: + # Sometimes the telegram server resets the current connection, + # if this is the case we send the message again. + logger.warning( + 'Got Telegram NetworkError: %s! Trying one more time.', + network_err.message + ) + bot.send_message(_CONF['telegram']['chat_id'], msg, parse_mode=parse_mode) + except TelegramError as telegram_err: + logger.warning('Got TelegramError: %s! Giving up on that message.', telegram_err.message) diff --git a/freqtrade/tests/test_telegram.py b/freqtrade/tests/test_telegram.py index c5ca9da3f..63a01d429 100644 --- a/freqtrade/tests/test_telegram.py +++ b/freqtrade/tests/test_telegram.py @@ -535,8 +535,7 @@ def test_send_msg_network_error(default_conf, mocker): default_conf['telegram']['enabled'] = True bot = MagicMock() bot.send_message = MagicMock(side_effect=NetworkError('Oh snap')) - with pytest.raises(NetworkError, match=r'Oh snap'): - send_msg('test', bot) + send_msg('test', bot) # Bot should've tried to send it twice assert len(bot.method_calls) == 2