diff --git a/i3pystatus/core/settings.py b/i3pystatus/core/settings.py index 6d67ae6..85b87ba 100644 --- a/i3pystatus/core/settings.py +++ b/i3pystatus/core/settings.py @@ -18,6 +18,7 @@ class SettingsBase: Settings are stored as attributes of self. """ + __PROTECTED_SETTINGS = ["password", "email", "username"] settings = ( ("log_level", "Set to true to log error to .i3pystatus- file"), ) @@ -75,8 +76,25 @@ class SettingsBase: self.logger = logging.getLogger(self.__name__) self.logger.setLevel(self.log_level) + + for setting_name in self.__PROTECTED_SETTINGS: + if hasattr(self, setting_name) and not getattr(self, setting_name): + setting = self.get_protected_setting("%s.%s" % (self.__name__, setting_name)) + if setting: + setattr(self, setting_name, setting) + self.init() + @staticmethod + def get_protected_setting(setting_name): + import getpass + try: + import keyring + except ImportError: + keyring = None + else: + return keyring.get_password(setting_name, getpass.getuser()) + def init(self): """Convenience method which is called after all settings are set