From 7aa42f8868a0afaa81b3d1a6d632c4c01a246bb6 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sat, 21 Sep 2019 12:53:15 +0200 Subject: [PATCH] Fail download-data gracefully if no pairs-file exists --- freqtrade/utils.py | 6 ++++++ tests/test_utils.py | 24 ++++++++++++++++++++++-- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/freqtrade/utils.py b/freqtrade/utils.py index 5b2b08357..276c7267b 100644 --- a/freqtrade/utils.py +++ b/freqtrade/utils.py @@ -5,6 +5,7 @@ from typing import Any, Dict, List import arrow +from freqtrade import OperationalException from freqtrade.configuration import Configuration, TimeRange from freqtrade.configuration.directory_operations import create_userdata_dir from freqtrade.data.history import refresh_backtest_ohlcv_data @@ -70,6 +71,11 @@ def start_download_data(args: Dict[str, Any]) -> None: time_since = arrow.utcnow().shift(days=-config['days']).strftime("%Y%m%d") timerange = TimeRange.parse_timerange(f'{time_since}-') + if 'pairs' not in config: + raise OperationalException( + "Downloading data requires a list of pairs." + "Please check the documentation on how to configure this.") + dl_path = Path(config['datadir']) logger.info(f'About to download pairs: {config["pairs"]}, ' f'intervals: {config["timeframes"]} to {dl_path}') diff --git a/tests/test_utils.py b/tests/test_utils.py index 8126e5055..dc0badd01 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -1,4 +1,5 @@ import re +from pathlib import Path from unittest.mock import MagicMock, PropertyMock import pytest @@ -7,7 +8,7 @@ from freqtrade import OperationalException from freqtrade.state import RunMode from freqtrade.utils import (setup_utils_configuration, start_create_userdir, start_download_data, start_list_exchanges) -from tests.conftest import get_args, log_has, log_has_re, patch_exchange +from tests.conftest import get_args, log_has, patch_exchange def test_setup_utils_configuration(): @@ -114,8 +115,27 @@ def test_download_data_no_exchange(mocker, caplog): 'freqtrade.exchange.Exchange.markets', PropertyMock(return_value={}) ) args = [ - "download-data" + "download-data", ] with pytest.raises(OperationalException, match=r"This command requires a configured exchange.*"): start_download_data(get_args(args)) + + +def test_download_data_no_pairs(mocker, caplog): + mocker.patch.object(Path, "exists", MagicMock(return_value=False)) + + mocker.patch('freqtrade.utils.refresh_backtest_ohlcv_data', + MagicMock(return_value=["ETH/BTC", "XRP/BTC"])) + patch_exchange(mocker) + mocker.patch( + 'freqtrade.exchange.Exchange.markets', PropertyMock(return_value={}) + ) + args = [ + "download-data", + "--exchange", + "binance", + ] + with pytest.raises(OperationalException, + match=r"Downloading data requires a list of pairs\..*"): + start_download_data(get_args(args))