From 91dc2b96fc3b08d849f05c15d6c30eb3d5eca562 Mon Sep 17 00:00:00 2001 From: hroff-1902 Date: Mon, 8 Apr 2019 04:23:29 +0300 Subject: [PATCH] support for defaults in json.schema --- freqtrade/configuration.py | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/freqtrade/configuration.py b/freqtrade/configuration.py index fdd71f2f5..b0dc0b212 100644 --- a/freqtrade/configuration.py +++ b/freqtrade/configuration.py @@ -10,13 +10,14 @@ from logging.handlers import RotatingFileHandler from typing import Any, Dict, List, Optional import ccxt -from jsonschema import Draft4Validator, validate +from jsonschema import Draft4Validator, validators from jsonschema.exceptions import ValidationError, best_match from freqtrade import OperationalException, constants from freqtrade.misc import deep_merge_dicts from freqtrade.state import RunMode + logger = logging.getLogger(__name__) @@ -33,6 +34,27 @@ def set_loggers(log_level: int = 0) -> None: logging.getLogger('telegram').setLevel(logging.INFO) +def _extend_with_default(validator_class): + validate_properties = validator_class.VALIDATORS["properties"] + + def set_defaults(validator, properties, instance, schema): + for prop, subschema in properties.items(): + if "default" in subschema: + instance.setdefault(prop, subschema["default"]) + + for error in validate_properties( + validator, properties, instance, schema, + ): + yield error + + return validators.extend( + validator_class, {"properties": set_defaults}, + ) + + +ValidatorWithDefaults = _extend_with_default(Draft4Validator) + + class Configuration(object): """ Class to read and init the bot configuration @@ -318,7 +340,7 @@ class Configuration(object): :return: Returns the config if valid, otherwise throw an exception """ try: - validate(conf, constants.CONF_SCHEMA, Draft4Validator) + ValidatorWithDefaults(constants.CONF_SCHEMA).validate(conf) return conf except ValidationError as exception: logger.critical(