AbstractModSettings.get now return an AbstractModSettings object instead of a dictionary of AbstractModSettings

This commit is contained in:
Faraphel 2022-08-18 19:45:12 +02:00
parent 6d5dae63af
commit 95f3943b02
2 changed files with 13 additions and 18 deletions

View file

@ -91,13 +91,14 @@ class ModConfig:
self.macros = macros if macros is not None else {} self.macros = macros if macros is not None else {}
self.messages = messages if messages is not None else {} self.messages = messages if messages is not None else {}
self.global_settings = AbstractModSettings.get(merge_dict( self.global_settings = {name: AbstractModSettings.get(data) for name, data in merge_dict(
default_global_settings, global_settings, # Avoid modder to add their own settings to globals one
dict_keys=default_global_settings.keys() # 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 = AbstractModSettings.get(
self.specific_settings = {name: AbstractModSettings.get(data) for name, data in (
specific_settings if specific_settings is not None else {} specific_settings if specific_settings is not None else {}
) ).items()}
self.name = name self.name = name
self.nickname = nickname if nickname is not None else name self.nickname = nickname if nickname is not None else name

View file

@ -48,21 +48,15 @@ class AbstractModSettings(ABC):
... ...
@classmethod @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 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 subclass in filter(lambda subclass: subclass.type == settings_data["type"], cls.__subclasses__()):
settings_data.pop("type")
for settings_name, settings_data in settings_dict.items(): return subclass(**settings_data)
for subclass in filter(lambda subclass: subclass.type == settings_data["type"], cls.__subclasses__()): else: raise InvalidSettingsType(settings_data["type"])
settings_data.pop("type")
settings[settings_name] = subclass(**settings_data)
break
else: raise InvalidSettingsType(settings_name)
return settings
# these import load the different ModSettings, and so get_mod_settings will be able to fetch them with __subclasses__ # these import load the different ModSettings, and so get_mod_settings will be able to fetch them with __subclasses__