diff --git a/diagnostic.py b/diagnostic.py index d56132c..8d0faeb 100755 --- a/diagnostic.py +++ b/diagnostic.py @@ -125,21 +125,22 @@ def check_configuration(spinner): cfg.read(configfile) configuration_file = cfg cfg = {s: dict(cfg.items(s)) for s in cfg.sections()} - configfile = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'config/config.cfg.default') + configfile_default = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'config/config.cfg.default') cfg_default = configparser.ConfigParser() - cfg_default.read(configfile) + cfg_default.read(configfile_default) cfg_default = {s: dict(cfg_default.items(s)) for s in cfg_default.sections()} # Check if all fields from config.default exists in config result, faulties = diagnostic_util.dict_compare(cfg_default, cfg) - faulties = [item for sublist in faulties for item in sublist] if result: port = configuration_file.get("Server", "port") return (True, '') else: - return (False, f'''Configuration incomplete. -\tUpdate your configuration file `config.cfg`.\n\t➥ Faulty fields: {", ".join(faulties)}''') - # TODO: propose auto fix + return_text = '''Configuration incomplete. +\tUpdate your configuration file `config.cfg`.\n\t➥ Faulty fields:\n''' + for field_name in faulties: + return_text += f'\t\t- {field_name}\n' + return (False, return_text) @add_spinner(name='dot') diff --git a/diagnostic_util.py b/diagnostic_util.py index a86b95e..2898e9a 100644 --- a/diagnostic_util.py +++ b/diagnostic_util.py @@ -1,19 +1,27 @@ -def dict_compare(dict1, dict2): +import configparser + + +def dict_compare(dict1, dict2, itercount=0): dict1_keys = set(dict1.keys()) dict2_keys = set(dict2.keys()) intersection = dict1_keys.difference(dict2_keys) - if len(intersection) > 0: + faulties = [] + if itercount > 0 and len(intersection) > 0: return (False, list(intersection)) flag_no_error = True - faulties = [] for k, v in dict1.items(): - if (isinstance(v, dict)): - status, faulty = dict_compare(v, dict2[k]) - flag_no_error = flag_no_error and status - faulties.append(faulty) + if isinstance(v, dict): + if k not in dict2: + faulties.append({k: dict1[k]}) + flag_no_error = False + else: + status, faulty = dict_compare(v, dict2[k], itercount+1) + flag_no_error = flag_no_error and status + if len(faulty) > 0: + faulties.append({k: faulty}) else: - (True, []) + return (True, []) if flag_no_error: return (True, []) else: