From 50c9679e23d9d2fe219d7cc09e5256ffebc66b4b Mon Sep 17 00:00:00 2001 From: hroff-1902 Date: Sat, 10 Aug 2019 14:24:14 +0300 Subject: [PATCH 1/4] move load_config_file() to separate module --- freqtrade/configuration/configuration.py | 22 ++-------------------- 1 file changed, 2 insertions(+), 20 deletions(-) diff --git a/freqtrade/configuration/configuration.py b/freqtrade/configuration/configuration.py index 17ad37d6a..e564c79ce 100644 --- a/freqtrade/configuration/configuration.py +++ b/freqtrade/configuration/configuration.py @@ -1,9 +1,7 @@ """ This module contains the configuration class """ -import json import logging -import sys import warnings from argparse import Namespace from typing import Any, Callable, Dict, Optional @@ -12,6 +10,7 @@ from freqtrade import OperationalException, constants from freqtrade.configuration.check_exchange import check_exchange from freqtrade.configuration.create_datadir import create_datadir from freqtrade.configuration.json_schema import validate_config_schema +from freqtrade.configuration.load_config import load_config_file from freqtrade.loggers import setup_logging from freqtrade.misc import deep_merge_dicts from freqtrade.state import RunMode @@ -52,24 +51,7 @@ class Configuration(object): logger.info('Using config: %s ...', path) # Merge config options, overwriting old values - config = deep_merge_dicts(self._load_config_file(path), config) - - return config - - def _load_config_file(self, path: str) -> Dict[str, Any]: - """ - Loads a config file from the given path - :param path: path as str - :return: configuration as dictionary - """ - try: - # Read config from stdin if requested in the options - with open(path) if path != '-' else sys.stdin as file: - config = json.load(file) - except FileNotFoundError: - raise OperationalException( - f'Config file "{path}" not found!' - ' Please create a config file or check whether it exists.') + config = deep_merge_dicts(load_config_file(path), config) return config From ad6a249832e2c0429fb534fa648607a705ee0f7d Mon Sep 17 00:00:00 2001 From: hroff-1902 Date: Sat, 10 Aug 2019 15:14:37 +0300 Subject: [PATCH 2/4] download_backtest_data.py adjusted --- scripts/download_backtest_data.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/download_backtest_data.py b/scripts/download_backtest_data.py index ed96cec71..580592294 100755 --- a/scripts/download_backtest_data.py +++ b/scripts/download_backtest_data.py @@ -12,6 +12,7 @@ from freqtrade.configuration import Arguments, TimeRange from freqtrade.configuration import Configuration from freqtrade.configuration.arguments import ARGS_DOWNLOADER from freqtrade.configuration.check_exchange import check_exchange +from freqtrade.configuration.load_config import load_config_file from freqtrade.data.history import download_pair_history from freqtrade.exchange import Exchange from freqtrade.misc import deep_merge_dicts @@ -42,7 +43,7 @@ if args.config: for path in args.config: logger.info(f"Using config: {path}...") # Merge config options, overwriting old values - config = deep_merge_dicts(configuration._load_config_file(path), config) + config = deep_merge_dicts(load_config_file(path), config) config['stake_currency'] = '' # Ensure we do not use Exchange credentials From 28d8fc871a14418a44521f2635809ad66dbbff3f Mon Sep 17 00:00:00 2001 From: hroff-1902 Date: Sat, 10 Aug 2019 15:15:09 +0300 Subject: [PATCH 3/4] tests adjusted --- freqtrade/configuration/load_config.py | 30 ++++++++++++++++++++++++++ freqtrade/tests/conftest.py | 2 +- freqtrade/tests/test_configuration.py | 14 ++++++------ 3 files changed, 37 insertions(+), 9 deletions(-) create mode 100644 freqtrade/configuration/load_config.py diff --git a/freqtrade/configuration/load_config.py b/freqtrade/configuration/load_config.py new file mode 100644 index 000000000..25504144f --- /dev/null +++ b/freqtrade/configuration/load_config.py @@ -0,0 +1,30 @@ +""" +This module contain functions to load the configuration file +""" +import json +import logging +import sys +from typing import Any, Dict + +from freqtrade import OperationalException + + +logger = logging.getLogger(__name__) + + +def load_config_file(path: str) -> Dict[str, Any]: + """ + Loads a config file from the given path + :param path: path as str + :return: configuration as dictionary + """ + try: + # Read config from stdin if requested in the options + with open(path) if path != '-' else sys.stdin as file: + config = json.load(file) + except FileNotFoundError: + raise OperationalException( + f'Config file "{path}" not found!' + ' Please create a config file or check whether it exists.') + + return config diff --git a/freqtrade/tests/conftest.py b/freqtrade/tests/conftest.py index 71ed23901..88257bcae 100644 --- a/freqtrade/tests/conftest.py +++ b/freqtrade/tests/conftest.py @@ -45,7 +45,7 @@ def get_args(args): def patched_configuration_load_config_file(mocker, config) -> None: mocker.patch( - 'freqtrade.configuration.configuration.Configuration._load_config_file', + 'freqtrade.configuration.load_config.load_config_file', lambda *args, **kwargs: config ) diff --git a/freqtrade/tests/test_configuration.py b/freqtrade/tests/test_configuration.py index 1e76297a6..d4c8704be 100644 --- a/freqtrade/tests/test_configuration.py +++ b/freqtrade/tests/test_configuration.py @@ -15,6 +15,7 @@ from freqtrade.configuration import Arguments, Configuration from freqtrade.configuration.check_exchange import check_exchange from freqtrade.configuration.create_datadir import create_datadir from freqtrade.configuration.json_schema import validate_config_schema +from freqtrade.configuration.load_config import load_config_file from freqtrade.constants import DEFAULT_DB_DRYRUN_URL, DEFAULT_DB_PROD_URL from freqtrade.loggers import _set_loggers from freqtrade.state import RunMode @@ -26,8 +27,7 @@ from freqtrade.tests.conftest import (log_has, log_has_re, def all_conf(): config_file = Path(__file__).parents[2] / "config_full.json.example" print(config_file) - configuration = Configuration(Namespace()) - conf = configuration._load_config_file(str(config_file)) + conf = load_config_file(str(config_file)) return conf @@ -53,12 +53,11 @@ def test_load_config_incorrect_stake_amount(default_conf) -> None: def test_load_config_file(default_conf, mocker, caplog) -> None: - file_mock = mocker.patch('freqtrade.configuration.configuration.open', mocker.mock_open( + file_mock = mocker.patch('freqtrade.configuration.load_config.open', mocker.mock_open( read_data=json.dumps(default_conf) )) - configuration = Configuration(Namespace()) - validated_conf = configuration._load_config_file('somefile') + validated_conf = load_config_file('somefile') assert file_mock.call_count == 1 assert validated_conf.items() >= default_conf.items() @@ -114,7 +113,7 @@ def test_load_config_combine_dicts(default_conf, mocker, caplog) -> None: configsmock = MagicMock(side_effect=config_files) mocker.patch( - 'freqtrade.configuration.configuration.Configuration._load_config_file', + 'freqtrade.configuration.load_config.load_config_file', configsmock ) @@ -154,10 +153,9 @@ def test_load_config_file_exception(mocker) -> None: 'freqtrade.configuration.configuration.open', MagicMock(side_effect=FileNotFoundError('File not found')) ) - configuration = Configuration(Namespace()) with pytest.raises(OperationalException, match=r'.*Config file "somefile" not found!*'): - configuration._load_config_file('somefile') + load_config_file('somefile') def test_load_config(default_conf, mocker) -> None: From 48d83768787a7222b30b04b3d40289df143f24ab Mon Sep 17 00:00:00 2001 From: hroff-1902 Date: Sat, 10 Aug 2019 18:47:58 +0300 Subject: [PATCH 4/4] tests fixed --- freqtrade/tests/conftest.py | 2 +- freqtrade/tests/test_configuration.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/freqtrade/tests/conftest.py b/freqtrade/tests/conftest.py index 88257bcae..4b9bf6cd8 100644 --- a/freqtrade/tests/conftest.py +++ b/freqtrade/tests/conftest.py @@ -45,7 +45,7 @@ def get_args(args): def patched_configuration_load_config_file(mocker, config) -> None: mocker.patch( - 'freqtrade.configuration.load_config.load_config_file', + 'freqtrade.configuration.configuration.load_config_file', lambda *args, **kwargs: config ) diff --git a/freqtrade/tests/test_configuration.py b/freqtrade/tests/test_configuration.py index d4c8704be..e325a0de2 100644 --- a/freqtrade/tests/test_configuration.py +++ b/freqtrade/tests/test_configuration.py @@ -113,7 +113,7 @@ def test_load_config_combine_dicts(default_conf, mocker, caplog) -> None: configsmock = MagicMock(side_effect=config_files) mocker.patch( - 'freqtrade.configuration.load_config.load_config_file', + 'freqtrade.configuration.configuration.load_config_file', configsmock )