Parse and show relevant configuration section

This commit is contained in:
Matthias 2020-03-22 20:09:01 +01:00
parent e079d36f84
commit 45aaa8c09d

View File

@ -1,13 +1,15 @@
""" """
This module contain functions to load the configuration file This module contain functions to load the configuration file
""" """
import rapidjson
import logging import logging
import re
import sys import sys
from pathlib import Path
from typing import Any, Dict from typing import Any, Dict
from freqtrade.exceptions import OperationalException import rapidjson
from freqtrade.exceptions import OperationalException
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -15,6 +17,22 @@ logger = logging.getLogger(__name__)
CONFIG_PARSE_MODE = rapidjson.PM_COMMENTS | rapidjson.PM_TRAILING_COMMAS CONFIG_PARSE_MODE = rapidjson.PM_COMMENTS | rapidjson.PM_TRAILING_COMMAS
def log_config_error_range(path: str, errmsg: str) -> str:
"""
Parses configuration file and prints range around error
"""
if path != '-':
offsetlist = re.findall(r'(?<=Parse\serror\sat\soffset\s)\d+', errmsg)
if offsetlist:
offset = int(offsetlist[0])
text = Path(path).read_text()
# Fetch an offset of 80 characters around the error line
subtext = text[offset-min(80, offset):offset+80]
segments = subtext.split('\n')
# Remove first and last lines, to avoid odd truncations
return '\n'.join(segments[1:-1])
def load_config_file(path: str) -> Dict[str, Any]: def load_config_file(path: str) -> Dict[str, Any]:
""" """
Loads a config file from the given path Loads a config file from the given path
@ -29,5 +47,11 @@ def load_config_file(path: str) -> Dict[str, Any]:
raise OperationalException( raise OperationalException(
f'Config file "{path}" not found!' f'Config file "{path}" not found!'
' Please create a config file or check whether it exists.') ' Please create a config file or check whether it exists.')
except rapidjson.JSONDecodeError as e:
err_range = log_config_error_range(path, str(e))
raise OperationalException(
f'{e}\n'
f'Please verify the following segment of your configuration:\n{err_range}'
)
return config return config