Added an emit method, more tests, and some clean up
svn: r13353
This commit is contained in:
parent
ce2a168d3a
commit
b4b57edab4
@ -58,7 +58,7 @@ INIFILE = os.path.join(const.HOME_DIR, "gramps32.ini")
|
|||||||
#---------------------------------------------------------------
|
#---------------------------------------------------------------
|
||||||
def eval_item(setting):
|
def eval_item(setting):
|
||||||
"""
|
"""
|
||||||
Given a value from an ini file, return it in proper type.
|
Given a value from an ini file, return it in its proper type.
|
||||||
May be recursively called, in the case of nested structures.
|
May be recursively called, in the case of nested structures.
|
||||||
"""
|
"""
|
||||||
setting = setting.strip()
|
setting = setting.strip()
|
||||||
@ -121,12 +121,20 @@ class ConfigManager(object):
|
|||||||
self.data = {}
|
self.data = {}
|
||||||
self.reset()
|
self.reset()
|
||||||
|
|
||||||
def reset(self, section=None, setting=None):
|
def reset(self, key=None):
|
||||||
"""
|
"""
|
||||||
Resets one, a section, or all settings values to their defaults.
|
Resets one, a section, or all settings values to their defaults.
|
||||||
|
This does not disconnect callbacks.
|
||||||
"""
|
"""
|
||||||
if section is not None and "." in section:
|
if key is None:
|
||||||
section, setting = section.split(".", 1)
|
section = None
|
||||||
|
setting = None
|
||||||
|
elif "." in key:
|
||||||
|
section, setting = key.split(".", 1)
|
||||||
|
else: # key is not None and doesn't have a "."
|
||||||
|
section = key
|
||||||
|
setting = None
|
||||||
|
# Now, do the reset on the right parts:
|
||||||
if section is None:
|
if section is None:
|
||||||
self.data = {}
|
self.data = {}
|
||||||
for section in self.default:
|
for section in self.default:
|
||||||
@ -341,6 +349,8 @@ class ConfigManager(object):
|
|||||||
|
|
||||||
def disconnect(self, callback_id):
|
def disconnect(self, callback_id):
|
||||||
"""
|
"""
|
||||||
|
Removes a callback given its callback ID. The ID is generated and
|
||||||
|
returned when the function is connected to the key (section.setting).
|
||||||
"""
|
"""
|
||||||
for section in self.callbacks:
|
for section in self.callbacks:
|
||||||
for setting in self.callbacks[section]:
|
for setting in self.callbacks[section]:
|
||||||
@ -348,6 +358,24 @@ class ConfigManager(object):
|
|||||||
if callback_id == cbid:
|
if callback_id == cbid:
|
||||||
self.callbacks[section][setting].remove((cbid, func))
|
self.callbacks[section][setting].remove((cbid, func))
|
||||||
|
|
||||||
|
def emit(self, key):
|
||||||
|
"""
|
||||||
|
Emits the signal "key" which will call the callbacks associated
|
||||||
|
with that setting.
|
||||||
|
"""
|
||||||
|
if "." in key:
|
||||||
|
section, setting = key.split(".", 1)
|
||||||
|
else:
|
||||||
|
raise AttributeError("Invalid config section.setting name: '%s'" %
|
||||||
|
key)
|
||||||
|
if section not in self.callbacks:
|
||||||
|
raise AttributeError("No such config section name: '%s'" % section)
|
||||||
|
if setting not in self.callbacks[section]:
|
||||||
|
raise AttributeError("No such config setting name: '%s.%s'" %
|
||||||
|
(section, setting))
|
||||||
|
for (cbid, func) in self.callbacks[section][setting]:
|
||||||
|
func(self, 0, str(self.data[section][setting]), None)
|
||||||
|
|
||||||
def set(self, key, value):
|
def set(self, key, value):
|
||||||
"""
|
"""
|
||||||
Set the setting's value. There are only two ways to get into
|
Set the setting's value. There are only two ways to get into
|
||||||
@ -720,4 +748,16 @@ if __name__ == "__main__":
|
|||||||
CM.reset("section.setting1")
|
CM.reset("section.setting1")
|
||||||
assert CM.get("section.setting1") == 1
|
assert CM.get("section.setting1") == 1
|
||||||
|
|
||||||
|
# No callback:
|
||||||
|
x = None
|
||||||
|
CM.set("section.setting1", 200)
|
||||||
|
assert x == None
|
||||||
|
# Now, set one:
|
||||||
|
cbid = CM.connect("section.setting1", callback)
|
||||||
|
# Now, call it:
|
||||||
|
CM.emit("section.setting1")
|
||||||
|
assert x == "200"
|
||||||
|
|
||||||
CM.save("./test2.ini")
|
CM.save("./test2.ini")
|
||||||
|
CM.reset()
|
||||||
|
CM.load("./test2.ini")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user