From 887c45119b9ab6909df81ee78985f937885c1cd7 Mon Sep 17 00:00:00 2001 From: facetoe Date: Sun, 1 Feb 2015 09:15:26 +0800 Subject: [PATCH] Look for protected settings that are in the required tuple. --- i3pystatus/core/settings.py | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/i3pystatus/core/settings.py b/i3pystatus/core/settings.py index 4d132ba..ff8104a 100644 --- a/i3pystatus/core/settings.py +++ b/i3pystatus/core/settings.py @@ -6,7 +6,6 @@ import getpass class SettingsBase: - """ Support class for providing a nice and flexible settings interface @@ -48,19 +47,24 @@ class SettingsBase: def merge_with_parents_settings(): settings = tuple() - # getmro returns base classes according to Method Resolution Order for cls in inspect.getmro(self.__class__): if hasattr(cls, "settings"): settings = settings + cls.settings return settings + self.__name__ = "{}.{}".format( + self.__module__, self.__class__.__name__) + settings = merge_with_parents_settings() settings = self.flatten_settings(settings) sm = KeyConstraintDict(settings, self.required) settings_source = get_argument_dict(args, kwargs) + protected = self.get_protected_settings() + settings_source.update(protected) + try: sm.update(settings_source) except KeyError as exc: @@ -72,20 +76,21 @@ class SettingsBase: raise ConfigMissingError( type(self).__name__, missing=exc.keys) from exc - self.__name__ = "{}.{}".format( - self.__module__, self.__class__.__name__) - self.logger = logging.getLogger(self.__name__) self.logger.setLevel(self.log_level) - self.set_protected_settings() self.init() - def set_protected_settings(self): + def get_protected_settings(self): + found_settings = dict() for setting_name in self.__PROTECTED_SETTINGS: - if hasattr(self, setting_name) and not getattr(self, setting_name): + setting = None + if hasattr(self, 'required') and setting_name in getattr(self, 'required'): setting = self.get_protected_setting("%s.%s" % (self.__name__, setting_name)) - if setting: - setattr(self, setting_name, setting) + elif hasattr(self, setting_name) and not getattr(self, setting_name): + setting = self.get_protected_setting("%s.%s" % (self.__name__, setting_name)) + if setting: + found_settings.update({setting_name: setting}) + return found_settings def get_protected_setting(self, setting_name): # If a custom keyring backend has been defined, use it.