From 66af41192ac419dcfb79ce46192771a9d9721d3c Mon Sep 17 00:00:00 2001 From: Matthias Date: Sat, 21 Jul 2018 19:50:38 +0200 Subject: [PATCH] Catch all exceptions from fiat-convert api calls --- freqtrade/fiat_convert.py | 5 ++--- freqtrade/tests/test_fiat_convert.py | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/freqtrade/fiat_convert.py b/freqtrade/fiat_convert.py index 2e1a7cac8..6812bf77f 100644 --- a/freqtrade/fiat_convert.py +++ b/freqtrade/fiat_convert.py @@ -7,7 +7,6 @@ import logging import time from typing import Dict, List -from requests.exceptions import RequestException from coinmarketcap import Market from freqtrade.constants import SUPPORTED_FIAT @@ -90,10 +89,10 @@ class CryptoToFiatConverter(object): coinlistings = self._coinmarketcap.listings() self._cryptomap = dict(map(lambda coin: (coin["symbol"], str(coin["id"])), coinlistings["data"])) - except (ValueError, RequestException) as exception: + except (BaseException) as exception: logger.error( "Could not load FIAT Cryptocurrency map for the following problem: %s", - exception + type(exception).__name__ ) def convert_amount(self, crypto_amount: float, crypto_symbol: str, fiat_symbol: str) -> float: diff --git a/freqtrade/tests/test_fiat_convert.py b/freqtrade/tests/test_fiat_convert.py index 5af85d268..8fd3b66b4 100644 --- a/freqtrade/tests/test_fiat_convert.py +++ b/freqtrade/tests/test_fiat_convert.py @@ -183,6 +183,24 @@ def test_fiat_convert_without_network(mocker): CryptoToFiatConverter._coinmarketcap = cmc_temp +def test_fiat_invalid_response(mocker, caplog): + # Because CryptoToFiatConverter is a Singleton we reset the listings + listmock = MagicMock(return_value="{'novalidjson':DEADBEEFf}") + mocker.patch.multiple( + 'freqtrade.fiat_convert.Market', + listings=listmock, + ) + # with pytest.raises(RequestEsxception): + fiat_convert = CryptoToFiatConverter() + fiat_convert._cryptomap = {} + fiat_convert._load_cryptomap() + + length_cryptomap = len(fiat_convert._cryptomap) + assert length_cryptomap == 0 + assert log_has('Could not load FIAT Cryptocurrency map for the following problem: TypeError', + caplog.record_tuples) + + def test_convert_amount(mocker): patch_coinmarketcap(mocker) mocker.patch('freqtrade.fiat_convert.CryptoToFiatConverter.get_price', return_value=12345.0)