core: paramaters are now merged: if a parameter doens't exist in loaded xml but exists in default parameters, it is added
This commit is contained in:
parent
2d7fa87643
commit
9cd074ebd2
1 changed files with 29 additions and 6 deletions
|
|
@ -71,9 +71,32 @@ class Params():
|
|||
def load_default_params(self):
|
||||
self.dom = minidom.parseString(Params.default_xml.encode('utf-8'))
|
||||
|
||||
def load_xml(self, file):
|
||||
def _mergeParams(self, source_node, dest_node):
|
||||
"""Look for every node in source_node and recursively copy them to dest if they don't exists"""
|
||||
def getNodesMap(children):
|
||||
ret = {}
|
||||
for child in children:
|
||||
if child.nodeType == child.ELEMENT_NODE:
|
||||
ret[(child.tagName, child.getAttribute('name'))] = child
|
||||
return ret
|
||||
source_map = getNodesMap(source_node.childNodes)
|
||||
dest_map = getNodesMap(dest_node.childNodes)
|
||||
source_set = set(source_map.keys())
|
||||
dest_set = set(dest_map.keys())
|
||||
to_add = source_set.difference(dest_set)
|
||||
|
||||
for node_key in to_add:
|
||||
dest_node.appendChild(source_map[node_key].cloneNode(True))
|
||||
|
||||
to_recurse = source_set - to_add
|
||||
for node_key in to_recurse:
|
||||
self._mergeParams(source_map[node_key], dest_map[node_key])
|
||||
|
||||
def load_xml(self, xml_file):
|
||||
"""Load parameters template from file"""
|
||||
self.dom = minidom.parse(file)
|
||||
self.dom = minidom.parse(xml_file)
|
||||
default_dom = minidom.parseString(Params.default_xml.encode('utf-8'))
|
||||
self._mergeParams(default_dom.documentElement, self.dom.documentElement)
|
||||
|
||||
def loadGenParams(self):
|
||||
"""Load general parameters data from storage
|
||||
|
|
@ -150,7 +173,7 @@ class Params():
|
|||
return True
|
||||
if self.host.isConnected(profile):
|
||||
error(_("Trying to delete a connected profile"))
|
||||
raise exceptions.ConnectedProfileError
|
||||
raise exceptions.NotConnectedProfileError
|
||||
self.storage.deleteProfile(profile)
|
||||
return False
|
||||
|
||||
|
|
@ -277,7 +300,7 @@ class Params():
|
|||
|
||||
if profile not in self.params:
|
||||
error(_('Requesting synchronous param for not connected profile'))
|
||||
raise exceptions.ConnectedProfileError
|
||||
raise exceptions.NotConnectedProfileError(profile)
|
||||
|
||||
if attr == "value":
|
||||
value = self.__getParam(profile, category, name)
|
||||
|
|
@ -565,8 +588,8 @@ class Memory:
|
|||
try:
|
||||
self.params.load_xml(param_file_xml)
|
||||
debug(_("params template loaded"))
|
||||
except:
|
||||
error (_("Can't load params template !"))
|
||||
except Exception as e:
|
||||
error (_("Can't load params template: %s") % (e,))
|
||||
self.params.load_default_params()
|
||||
else:
|
||||
info (_("No params template, using default template"))
|
||||
|
|
|
|||
Loading…
Reference in a new issue