Merge pull request #1994 from hroff-1902/fix-validate_timeframes
fix validate_timeframes()
This commit is contained in:
commit
e19c192570
@ -274,12 +274,15 @@ class Exchange(object):
|
|||||||
"""
|
"""
|
||||||
Checks if ticker interval from config is a supported timeframe on the exchange
|
Checks if ticker interval from config is a supported timeframe on the exchange
|
||||||
"""
|
"""
|
||||||
if not hasattr(self._api, "timeframes"):
|
if not hasattr(self._api, "timeframes") or self._api.timeframes is None:
|
||||||
# If timeframes is missing, the exchange probably has no fetchOHLCV method.
|
# If timeframes attribute is missing (or is None), the exchange probably
|
||||||
|
# has no fetchOHLCV method.
|
||||||
# Therefore we also show that.
|
# Therefore we also show that.
|
||||||
raise OperationalException(
|
raise OperationalException(
|
||||||
f"This exchange ({self.name}) does not have a `timeframes` attribute and "
|
f"The ccxt library does not provide the list of timeframes "
|
||||||
f"is therefore not supported. fetchOHLCV: {self.exchange_has('fetchOHLCV')}")
|
f"for the exchange \"{self.name}\" and this exchange "
|
||||||
|
f"is therefore not supported. ccxt fetchOHLCV: {self.exchange_has('fetchOHLCV')}")
|
||||||
|
|
||||||
timeframes = self._api.timeframes
|
timeframes = self._api.timeframes
|
||||||
if timeframe not in timeframes:
|
if timeframe not in timeframes:
|
||||||
raise OperationalException(
|
raise OperationalException(
|
||||||
|
@ -396,7 +396,7 @@ def test_validate_timeframes_failed(default_conf, mocker):
|
|||||||
Exchange(default_conf)
|
Exchange(default_conf)
|
||||||
|
|
||||||
|
|
||||||
def test_validate_timeframes_emulated_ohlcv(default_conf, mocker):
|
def test_validate_timeframes_emulated_ohlcv_1(default_conf, mocker):
|
||||||
default_conf["ticker_interval"] = "3m"
|
default_conf["ticker_interval"] = "3m"
|
||||||
api_mock = MagicMock()
|
api_mock = MagicMock()
|
||||||
id_mock = PropertyMock(return_value='test_exchange')
|
id_mock = PropertyMock(return_value='test_exchange')
|
||||||
@ -409,7 +409,29 @@ def test_validate_timeframes_emulated_ohlcv(default_conf, mocker):
|
|||||||
mocker.patch('freqtrade.exchange.Exchange._load_markets', MagicMock(return_value={}))
|
mocker.patch('freqtrade.exchange.Exchange._load_markets', MagicMock(return_value={}))
|
||||||
mocker.patch('freqtrade.exchange.Exchange.validate_pairs', MagicMock())
|
mocker.patch('freqtrade.exchange.Exchange.validate_pairs', MagicMock())
|
||||||
with pytest.raises(OperationalException,
|
with pytest.raises(OperationalException,
|
||||||
match=r'This exchange (.*) does not have a `timeframes` attribute and*'):
|
match=r'The ccxt library does not provide the list of timeframes '
|
||||||
|
r'for the exchange ".*" and this exchange '
|
||||||
|
r'is therefore not supported. *'):
|
||||||
|
Exchange(default_conf)
|
||||||
|
|
||||||
|
|
||||||
|
def test_validate_timeframes_emulated_ohlcvi_2(default_conf, mocker):
|
||||||
|
default_conf["ticker_interval"] = "3m"
|
||||||
|
api_mock = MagicMock()
|
||||||
|
id_mock = PropertyMock(return_value='test_exchange')
|
||||||
|
type(api_mock).id = id_mock
|
||||||
|
|
||||||
|
# delete timeframes so magicmock does not autocreate it
|
||||||
|
del api_mock.timeframes
|
||||||
|
|
||||||
|
mocker.patch('freqtrade.exchange.Exchange._init_ccxt', MagicMock(return_value=api_mock))
|
||||||
|
mocker.patch('freqtrade.exchange.Exchange._load_markets',
|
||||||
|
MagicMock(return_value={'timeframes': None}))
|
||||||
|
mocker.patch('freqtrade.exchange.Exchange.validate_pairs', MagicMock())
|
||||||
|
with pytest.raises(OperationalException,
|
||||||
|
match=r'The ccxt library does not provide the list of timeframes '
|
||||||
|
r'for the exchange ".*" and this exchange '
|
||||||
|
r'is therefore not supported. *'):
|
||||||
Exchange(default_conf)
|
Exchange(default_conf)
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user