From 511b1d2b2796e0b18bca445a639c6422a37f3dbf Mon Sep 17 00:00:00 2001 From: Jonas Karlman Date: Sat, 14 Oct 2017 22:46:20 +0200 Subject: [PATCH] kodi: fix appliance.xml merge Only combine elements with matching attributes, fixes merge of appliance.xml --- packages/mediacenter/kodi/scripts/xml_merge.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/packages/mediacenter/kodi/scripts/xml_merge.py b/packages/mediacenter/kodi/scripts/xml_merge.py index a64c35c5a8..f7fd547f36 100755 --- a/packages/mediacenter/kodi/scripts/xml_merge.py +++ b/packages/mediacenter/kodi/scripts/xml_merge.py @@ -11,6 +11,10 @@ from xml.etree import ElementTree as et def printerr(*args, **kwargs): print(*args, file=sys.stderr, **kwargs) +class hashabledict(dict): + def __hash__(self): + return hash(tuple(sorted(self.items()))) + class XMLCombiner(object): def __init__(self, filenames): if len(filenames) == 0: @@ -32,19 +36,19 @@ class XMLCombiner(object): return self.prettyPrint(self.roots[0]) def combine_element(self, one, other): - mapping = {el.tag: el for el in one} + mapping = {(el.tag, hashabledict(el.attrib)): el for el in one} for el in other: if len(el) == 0: try: - mapping[el.tag].text = el.text + mapping[(el.tag, hashabledict(el.attrib))].text = el.text except KeyError: - mapping[el.tag] = el + mapping[(el.tag, hashabledict(el.attrib))] = el one.append(el) else: try: - self.combine_element(mapping[el.tag], el) + self.combine_element(mapping[(el.tag, hashabledict(el.attrib))], el) except KeyError: - mapping[el.tag] = el + mapping[(el.tag, hashabledict(el.attrib))] = el one.append(el) if __name__ == '__main__':