From 95f3943b0204a6fac26205804e15bf26f7df2441 Mon Sep 17 00:00:00 2001 From: Faraphel Date: Thu, 18 Aug 2022 19:45:12 +0200 Subject: [PATCH] AbstractModSettings.get now return an AbstractModSettings object instead of a dictionary of AbstractModSettings --- source/mkw/ModConfig.py | 13 +++++++------ source/mkw/ModSettings/__init__.py | 18 ++++++------------ 2 files changed, 13 insertions(+), 18 deletions(-) diff --git a/source/mkw/ModConfig.py b/source/mkw/ModConfig.py index 4ae2c29..e523ca6 100644 --- a/source/mkw/ModConfig.py +++ b/source/mkw/ModConfig.py @@ -91,13 +91,14 @@ class ModConfig: self.macros = macros if macros is not None else {} self.messages = messages if messages is not None else {} - self.global_settings = AbstractModSettings.get(merge_dict( - default_global_settings, global_settings, - dict_keys=default_global_settings.keys() # Avoid modder to add their own settings to globals one - )) - self.specific_settings = AbstractModSettings.get( + self.global_settings = {name: AbstractModSettings.get(data) for name, data in merge_dict( + # Avoid modder to add their own settings to globals one + default_global_settings, global_settings, dict_keys=default_global_settings.keys() + ).items()} + + self.specific_settings = {name: AbstractModSettings.get(data) for name, data in ( specific_settings if specific_settings is not None else {} - ) + ).items()} self.name = name self.nickname = nickname if nickname is not None else name diff --git a/source/mkw/ModSettings/__init__.py b/source/mkw/ModSettings/__init__.py index 81baec6..fa1a712 100644 --- a/source/mkw/ModSettings/__init__.py +++ b/source/mkw/ModSettings/__init__.py @@ -48,21 +48,15 @@ class AbstractModSettings(ABC): ... @classmethod - def get(cls, settings_dict: dict) -> dict[str, "AbstractModSettings"]: + def get(cls, settings_data: dict) -> "AbstractModSettings": """ Load all the settings in mod_settings_dict - :param settings_dict: dictionary containing all the settings defined for the mod + :param settings_data: dictionary containing all the settings defined for the mod """ - settings: dict[str, AbstractModSettings] = {} - - for settings_name, settings_data in settings_dict.items(): - for subclass in filter(lambda subclass: subclass.type == settings_data["type"], cls.__subclasses__()): - settings_data.pop("type") - settings[settings_name] = subclass(**settings_data) - break - else: raise InvalidSettingsType(settings_name) - - return settings + for subclass in filter(lambda subclass: subclass.type == settings_data["type"], cls.__subclasses__()): + settings_data.pop("type") + return subclass(**settings_data) + else: raise InvalidSettingsType(settings_data["type"]) # these import load the different ModSettings, and so get_mod_settings will be able to fetch them with __subclasses__