From 95c3c45ec95c3c4daa4c190f62bff3f867d0375b Mon Sep 17 00:00:00 2001 From: Matthias Date: Fri, 27 Nov 2020 20:24:04 +0100 Subject: [PATCH 1/3] Remove long deprecated settings that moved from experimental to ask_strategy --- .../configuration/deprecated_settings.py | 30 ++++++++--- freqtrade/constants.py | 3 -- tests/test_configuration.py | 50 +++++++++++++++++-- 3 files changed, 70 insertions(+), 13 deletions(-) diff --git a/freqtrade/configuration/deprecated_settings.py b/freqtrade/configuration/deprecated_settings.py index 03ed41ab8..6873ab405 100644 --- a/freqtrade/configuration/deprecated_settings.py +++ b/freqtrade/configuration/deprecated_settings.py @@ -26,6 +26,24 @@ def check_conflicting_settings(config: Dict[str, Any], ) +def process_removed_setting(config: Dict[str, Any], + section1: str, name1: str, + section2: str, name2: str) -> None: + """ + :param section1: Removed section + :param name1: Removed setting name + :param section2: new section for this key + :param name2: new setting name + """ + section1_config = config.get(section1, {}) + if name1 in section1_config: + raise OperationalException( + f"Setting `{section1}.{name1}` has been moved to `{section2}.{name2}. " + f"Please delete it from your configuration and use the `{section2}.{name2}` " + "setting instead." + ) + + def process_deprecated_setting(config: Dict[str, Any], section1: str, name1: str, section2: str, name2: str) -> None: @@ -51,12 +69,12 @@ def process_temporary_deprecated_settings(config: Dict[str, Any]) -> None: check_conflicting_settings(config, 'ask_strategy', 'ignore_roi_if_buy_signal', 'experimental', 'ignore_roi_if_buy_signal') - process_deprecated_setting(config, 'ask_strategy', 'use_sell_signal', - 'experimental', 'use_sell_signal') - process_deprecated_setting(config, 'ask_strategy', 'sell_profit_only', - 'experimental', 'sell_profit_only') - process_deprecated_setting(config, 'ask_strategy', 'ignore_roi_if_buy_signal', - 'experimental', 'ignore_roi_if_buy_signal') + process_removed_setting(config, 'experimental', 'use_sell_signal', + 'ask_strategy', 'use_sell_signal') + process_removed_setting(config, 'experimental', 'sell_profit_only', + 'ask_strategy', 'sell_profit_only') + process_removed_setting(config, 'experimental', 'ignore_roi_if_buy_signal', + 'ask_strategy', 'ignore_roi_if_buy_signal') if (config.get('edge', {}).get('enabled', False) and 'capital_available_percentage' in config.get('edge', {})): diff --git a/freqtrade/constants.py b/freqtrade/constants.py index 2022556d2..3e523a49e 100644 --- a/freqtrade/constants.py +++ b/freqtrade/constants.py @@ -182,9 +182,6 @@ CONF_SCHEMA = { 'experimental': { 'type': 'object', 'properties': { - 'use_sell_signal': {'type': 'boolean'}, - 'sell_profit_only': {'type': 'boolean'}, - 'ignore_roi_if_buy_signal': {'type': 'boolean'}, 'block_bad_exchanges': {'type': 'boolean'} } }, diff --git a/tests/test_configuration.py b/tests/test_configuration.py index e6c91a96e..6c895a00b 100644 --- a/tests/test_configuration.py +++ b/tests/test_configuration.py @@ -16,6 +16,7 @@ from freqtrade.configuration import (Configuration, check_exchange, remove_crede from freqtrade.configuration.config_validation import validate_config_schema from freqtrade.configuration.deprecated_settings import (check_conflicting_settings, process_deprecated_setting, + process_removed_setting, process_temporary_deprecated_settings) from freqtrade.configuration.load_config import load_config_file, log_config_error_range from freqtrade.constants import DEFAULT_DB_DRYRUN_URL, DEFAULT_DB_PROD_URL @@ -1061,13 +1062,11 @@ def test_pairlist_resolving_fallback(mocker): assert config['datadir'] == Path.cwd() / "user_data/data/binance" +@pytest.mark.skip(reason='Currently no deprecated / moved sections') +# The below is kept as a sample for the future. @pytest.mark.parametrize("setting", [ ("ask_strategy", "use_sell_signal", True, "experimental", "use_sell_signal", False), - ("ask_strategy", "sell_profit_only", False, - "experimental", "sell_profit_only", True), - ("ask_strategy", "ignore_roi_if_buy_signal", False, - "experimental", "ignore_roi_if_buy_signal", True), ]) def test_process_temporary_deprecated_settings(mocker, default_conf, setting, caplog): patched_configuration_load_config_file(mocker, default_conf) @@ -1097,6 +1096,25 @@ def test_process_temporary_deprecated_settings(mocker, default_conf, setting, ca assert default_conf[setting[0]][setting[1]] == setting[5] +@pytest.mark.parametrize("setting", [ + ("experimental", "use_sell_signal", False), + ("experimental", "sell_profit_only", True), + ("experimental", "ignore_roi_if_buy_signal", True), + ]) +def test_process_removed_settings(mocker, default_conf, setting, caplog): + patched_configuration_load_config_file(mocker, default_conf) + + # Create sections for new and deprecated settings + # (they may not exist in the config) + default_conf[setting[0]] = {} + # Assign removed setting + default_conf[setting[0]][setting[1]] = setting[2] + + # New and deprecated settings are conflicting ones + with pytest.raises(OperationalException, + match=r'Setting .* has been moved'): + process_temporary_deprecated_settings(default_conf) + def test_process_deprecated_setting_edge(mocker, edge_conf, caplog): patched_configuration_load_config_file(mocker, edge_conf) edge_conf.update({'edge': { @@ -1196,6 +1214,30 @@ def test_process_deprecated_setting(mocker, default_conf, caplog): assert default_conf['sectionA']['new_setting'] == 'valA' +def test_process_removed_setting(mocker, default_conf, caplog): + patched_configuration_load_config_file(mocker, default_conf) + + # Create sections for new and deprecated settings + # (they may not exist in the config) + default_conf['sectionA'] = {} + default_conf['sectionB'] = {} + # Assign new setting + default_conf['sectionB']['somesetting'] = 'valA' + + # Only new setting exists (nothing should happen) + process_removed_setting(default_conf, + 'sectionA', 'somesetting', + 'sectionB', 'somesetting') + # Assign removed setting + default_conf['sectionA']['somesetting'] = 'valB' + + with pytest.raises(OperationalException, + match=r"Setting .* has been moved"): + process_removed_setting(default_conf, + 'sectionA', 'somesetting', + 'sectionB', 'somesetting') + + def test_process_deprecated_ticker_interval(mocker, default_conf, caplog): message = "DEPRECATED: Please use 'timeframe' instead of 'ticker_interval." config = deepcopy(default_conf) From af1b3721fb736409cb8107912b664b07d4d7be30 Mon Sep 17 00:00:00 2001 From: Matthias Date: Fri, 27 Nov 2020 20:28:17 +0100 Subject: [PATCH 2/3] remove duplicate settings check --- freqtrade/configuration/deprecated_settings.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/freqtrade/configuration/deprecated_settings.py b/freqtrade/configuration/deprecated_settings.py index 6873ab405..6b2a20c8c 100644 --- a/freqtrade/configuration/deprecated_settings.py +++ b/freqtrade/configuration/deprecated_settings.py @@ -62,12 +62,11 @@ def process_deprecated_setting(config: Dict[str, Any], def process_temporary_deprecated_settings(config: Dict[str, Any]) -> None: - check_conflicting_settings(config, 'ask_strategy', 'use_sell_signal', - 'experimental', 'use_sell_signal') - check_conflicting_settings(config, 'ask_strategy', 'sell_profit_only', - 'experimental', 'sell_profit_only') - check_conflicting_settings(config, 'ask_strategy', 'ignore_roi_if_buy_signal', - 'experimental', 'ignore_roi_if_buy_signal') + # Kept for future deprecated / moved settings + # check_conflicting_settings(config, 'ask_strategy', 'use_sell_signal', + # 'experimental', 'use_sell_signal') + # process_deprecated_setting(config, 'ask_strategy', 'use_sell_signal', + # 'experimental', 'use_sell_signal') process_removed_setting(config, 'experimental', 'use_sell_signal', 'ask_strategy', 'use_sell_signal') From 4cb331b5ad644f9d1aeee2909e158de25078a913 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sat, 28 Nov 2020 10:24:44 +0100 Subject: [PATCH 3/3] Remove non-needed parameters from tests --- tests/test_configuration.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/test_configuration.py b/tests/test_configuration.py index 6c895a00b..167215f29 100644 --- a/tests/test_configuration.py +++ b/tests/test_configuration.py @@ -1101,7 +1101,7 @@ def test_process_temporary_deprecated_settings(mocker, default_conf, setting, ca ("experimental", "sell_profit_only", True), ("experimental", "ignore_roi_if_buy_signal", True), ]) -def test_process_removed_settings(mocker, default_conf, setting, caplog): +def test_process_removed_settings(mocker, default_conf, setting): patched_configuration_load_config_file(mocker, default_conf) # Create sections for new and deprecated settings @@ -1115,7 +1115,8 @@ def test_process_removed_settings(mocker, default_conf, setting, caplog): match=r'Setting .* has been moved'): process_temporary_deprecated_settings(default_conf) -def test_process_deprecated_setting_edge(mocker, edge_conf, caplog): + +def test_process_deprecated_setting_edge(mocker, edge_conf): patched_configuration_load_config_file(mocker, edge_conf) edge_conf.update({'edge': { 'enabled': True,