From e1921c88490b29735da7d959068bace13ee26c30 Mon Sep 17 00:00:00 2001 From: Matthias Date: Wed, 8 Aug 2018 21:55:48 +0200 Subject: [PATCH] Fix bug causing /balance to fail --- freqtrade/exchange/__init__.py | 2 +- freqtrade/rpc/rpc.py | 12 +++++++---- freqtrade/tests/rpc/test_rpc.py | 35 ++++++--------------------------- 3 files changed, 15 insertions(+), 34 deletions(-) diff --git a/freqtrade/exchange/__init__.py b/freqtrade/exchange/__init__.py index a6ec70636..485599c2c 100644 --- a/freqtrade/exchange/__init__.py +++ b/freqtrade/exchange/__init__.py @@ -322,7 +322,7 @@ class Exchange(object): return data except (ccxt.NetworkError, ccxt.ExchangeError) as e: raise TemporaryError( - f'Could not load ticker history due to {e.__class__.__name__}. Message: {e}') + f'Could not load ticker due to {e.__class__.__name__}. Message: {e}') except ccxt.BaseError as e: raise OperationalException(e) else: diff --git a/freqtrade/rpc/rpc.py b/freqtrade/rpc/rpc.py index f58fbae9a..a39469d07 100644 --- a/freqtrade/rpc/rpc.py +++ b/freqtrade/rpc/rpc.py @@ -13,6 +13,7 @@ import sqlalchemy as sql from numpy import mean, nan_to_num from pandas import DataFrame +from freqtrade import TemporaryError from freqtrade.fiat_convert import CryptoToFiatConverter from freqtrade.misc import shorten_date from freqtrade.persistence import Trade @@ -271,10 +272,13 @@ class RPC(object): if coin == 'BTC': rate = 1.0 else: - if coin == 'USDT': - rate = 1.0 / self._freqtrade.exchange.get_ticker('BTC/USDT', False)['bid'] - else: - rate = self._freqtrade.exchange.get_ticker(coin + '/BTC', False)['bid'] + try: + if coin == 'USDT': + rate = 1.0 / self._freqtrade.exchange.get_ticker('BTC/USDT', False)['bid'] + else: + rate = self._freqtrade.exchange.get_ticker(coin + '/BTC', False)['bid'] + except TemporaryError: + continue est_btc: float = rate * balance['total'] total = total + est_btc output.append({ diff --git a/freqtrade/tests/rpc/test_rpc.py b/freqtrade/tests/rpc/test_rpc.py index 01130fccf..c17ab6b2f 100644 --- a/freqtrade/tests/rpc/test_rpc.py +++ b/freqtrade/tests/rpc/test_rpc.py @@ -286,11 +286,12 @@ def test_rpc_balance_handle(default_conf, mocker): 'used': 2.0, }, 'ETH': { - 'free': 0.0, - 'total': 0.0, - 'used': 0.0, + 'free': 1.0, + 'total': 5.0, + 'used': 4.0, } } + # ETH will be skipped due to mocked Error below mocker.patch.multiple( 'freqtrade.fiat_convert.Market', @@ -302,7 +303,8 @@ def test_rpc_balance_handle(default_conf, mocker): mocker.patch.multiple( 'freqtrade.exchange.Exchange', validate_pairs=MagicMock(), - get_balances=MagicMock(return_value=mock_balance) + get_balances=MagicMock(return_value=mock_balance), + get_ticker=MagicMock(side_effect=TemporaryError('Could not load ticker due to xxx')) ) freqtradebot = FreqtradeBot(default_conf) @@ -323,31 +325,6 @@ def test_rpc_balance_handle(default_conf, mocker): }] assert result['total'] == 12.0 - mock_balance = { - 'ETH': { - 'free': 10.0, - 'total': 12.0, - 'used': 2.0, - } - } - mocker.patch.multiple( - 'freqtrade.exchange.Exchange', - validate_pairs=MagicMock(), - get_balances=MagicMock(return_value=mock_balance), - get_ticker=MagicMock(side_effect=TemporaryError('Could not load ticker due to xxx')) - ) - result = rpc._rpc_balance(default_conf['fiat_display_currency']) - assert prec_satoshi(result['total'], 12) - assert prec_satoshi(result['value'], 180000) - assert 'USD' == result['symbol'] - assert result['currencies'] == [{ - 'currency': 'ETH', - 'available': 10.0, - 'balance': 12.0, - 'pending': 2.0, - 'est_btc': 12.0, - }] - def test_rpc_start(mocker, default_conf) -> None: patch_coinmarketcap(mocker)