Add 'set functions' to Config.. These functions get called when the

specified key's value changes.
This commit is contained in:
Andrew Resch 2007-09-18 14:40:19 +00:00
parent 685e20fbf1
commit 66192d0f8d
1 changed files with 20 additions and 4 deletions

View File

@ -45,6 +45,8 @@ class Config:
log.debug("Config created with filename: %s", filename) log.debug("Config created with filename: %s", filename)
log.debug("Config defaults: %s", defaults) log.debug("Config defaults: %s", defaults)
self.config = {} self.config = {}
self.set_functions = {}
# If defaults is not None then we need to use "defaults". # If defaults is not None then we need to use "defaults".
if defaults != None: if defaults != None:
self.config = defaults self.config = defaults
@ -111,9 +113,18 @@ class Config:
"""Set the 'key' with 'value'.""" """Set the 'key' with 'value'."""
# Sets the "key" with "value" in the config dict # Sets the "key" with "value" in the config dict
log.debug("Setting '%s' to %s", key, value) log.debug("Setting '%s' to %s", key, value)
self.config[key] = value if self.config[key] != value:
# Whenever something is set, we should save self.config[key] = value
self.save() # Whenever something is set, we should save
self.save()
# Run the set_function for this key if any
try:
self.set_functions[key](value)
except KeyError:
pass
else:
log.debug("Not set as value is same.")
def get(self, key): def get(self, key):
"""Get the value of 'key'. If it is an invalid key then get() will """Get the value of 'key'. If it is an invalid key then get() will
@ -131,7 +142,12 @@ class Config:
def get_config(self): def get_config(self):
"""Returns the entire configuration as a dictionary.""" """Returns the entire configuration as a dictionary."""
return self.config return self.config
def register_set_function(self, key, function):
"""Register a function to be run when a config value changes."""
self.set_functions[key] = function
return
def __getitem__(self, key): def __getitem__(self, key):
return self.config[key] return self.config[key]