From 1347107c1e4c77daa7ddf11520d3ae020a43a5d1 Mon Sep 17 00:00:00 2001 From: Matthias Date: Thu, 7 Apr 2022 20:13:52 +0200 Subject: [PATCH] extract load_from_files to load_config --- freqtrade/configuration/configuration.py | 23 +++-------------------- freqtrade/configuration/load_config.py | 23 ++++++++++++++++++++++- tests/conftest.py | 2 +- tests/test_configuration.py | 6 +++--- 4 files changed, 29 insertions(+), 25 deletions(-) diff --git a/freqtrade/configuration/configuration.py b/freqtrade/configuration/configuration.py index 08853f7dd..12f833174 100644 --- a/freqtrade/configuration/configuration.py +++ b/freqtrade/configuration/configuration.py @@ -12,7 +12,7 @@ from freqtrade.configuration.check_exchange import check_exchange from freqtrade.configuration.deprecated_settings import process_temporary_deprecated_settings from freqtrade.configuration.directory_operations import create_datadir, create_userdata_dir from freqtrade.configuration.environment_vars import enironment_vars_to_dict -from freqtrade.configuration.load_config import load_config_file, load_file +from freqtrade.configuration.load_config import load_file, load_from_files from freqtrade.enums import NON_UTIL_MODES, TRADING_MODES, CandleType, RunMode, TradingMode from freqtrade.exceptions import OperationalException from freqtrade.loggers import setup_logging @@ -55,34 +55,17 @@ class Configuration: :param files: List of file paths :return: configuration dictionary """ + # Keep this method as staticmethod, so it can be used from interactive environments c = Configuration({'config': files}, RunMode.OTHER) return c.get_config() - def load_from_files(self, files: List[str]) -> Dict[str, Any]: - - # Keep this method as staticmethod, so it can be used from interactive environments - config: Dict[str, Any] = {} - - if not files: - return deepcopy(constants.MINIMAL_CONFIG) - - # We expect here a list of config filenames - for path in files: - logger.info(f'Using config: {path} ...') - # Merge config options, overwriting old values - config = deep_merge_dicts(load_config_file(path), config) - - config['config_files'] = files - - return config - def load_config(self) -> Dict[str, Any]: """ Extract information for sys.argv and load the bot configuration :return: Configuration dictionary """ # Load all configs - config: Dict[str, Any] = self.load_from_files(self.args.get("config", [])) + config: Dict[str, Any] = load_from_files(self.args.get("config", [])) # Load environment variables env_data = enironment_vars_to_dict() diff --git a/freqtrade/configuration/load_config.py b/freqtrade/configuration/load_config.py index 27190d259..254ce3126 100644 --- a/freqtrade/configuration/load_config.py +++ b/freqtrade/configuration/load_config.py @@ -4,12 +4,15 @@ This module contain functions to load the configuration file import logging import re import sys +from copy import deepcopy from pathlib import Path -from typing import Any, Dict +from typing import Any, Dict, List import rapidjson +from freqtrade.constants import MINIMAL_CONFIG from freqtrade.exceptions import OperationalException +from freqtrade.misc import deep_merge_dicts logger = logging.getLogger(__name__) @@ -70,3 +73,21 @@ def load_config_file(path: str) -> Dict[str, Any]: ) return config + + +def load_from_files(files: List[str]) -> Dict[str, Any]: + + config: Dict[str, Any] = {} + + if not files: + return deepcopy(MINIMAL_CONFIG) + + # We expect here a list of config filenames + for path in files: + logger.info(f'Using config: {path} ...') + # Merge config options, overwriting old values + config = deep_merge_dicts(load_config_file(path), config) + + config['config_files'] = files + + return config diff --git a/tests/conftest.py b/tests/conftest.py index 7c3bbe4a5..9cbb95531 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -87,7 +87,7 @@ def get_mock_coro(return_value): def patched_configuration_load_config_file(mocker, config) -> None: mocker.patch( - 'freqtrade.configuration.configuration.load_config_file', + 'freqtrade.configuration.load_config.load_config_file', lambda *args, **kwargs: config ) diff --git a/tests/test_configuration.py b/tests/test_configuration.py index 15b32b44d..f8ec4656b 100644 --- a/tests/test_configuration.py +++ b/tests/test_configuration.py @@ -160,7 +160,7 @@ def test_load_config_combine_dicts(default_conf, mocker, caplog) -> None: configsmock = MagicMock(side_effect=config_files) mocker.patch( - 'freqtrade.configuration.configuration.load_config_file', + 'freqtrade.configuration.load_config.load_config_file', configsmock ) @@ -191,7 +191,7 @@ def test_from_config(default_conf, mocker, caplog) -> None: mocker.patch('freqtrade.configuration.configuration.create_datadir', lambda c, x: x) configsmock = MagicMock(side_effect=config_files) - mocker.patch('freqtrade.configuration.configuration.load_config_file', configsmock) + mocker.patch('freqtrade.configuration.load_config.load_config_file', configsmock) validated_conf = Configuration.from_files(['test_conf.json', 'test2_conf.json']) @@ -214,7 +214,7 @@ def test_print_config(default_conf, mocker, caplog) -> None: configsmock = MagicMock(side_effect=config_files) mocker.patch('freqtrade.configuration.configuration.create_datadir', lambda c, x: x) - mocker.patch('freqtrade.configuration.configuration.load_config_file', configsmock) + mocker.patch('freqtrade.configuration.configuration.load_from_files', configsmock) validated_conf = Configuration.from_files(['test_conf.json'])