mirror of
https://github.com/WinampDesktop/winamp.git
synced 2025-06-13 15:35:46 -04:00
Add script to merge compatibility lists
This commit is contained in:
59
scripts/merge_compatibility_list.py
Normal file
59
scripts/merge_compatibility_list.py
Normal file
@ -0,0 +1,59 @@
|
||||
from copy import deepcopy
|
||||
import sys
|
||||
import argparse
|
||||
import xml.etree.ElementTree as ET
|
||||
from xml.dom import minidom
|
||||
|
||||
# https://pymotw.com/2/xml/etree/ElementTree/create.html
|
||||
def prettify(elem):
|
||||
"""Return a pretty-printed XML string for the Element.
|
||||
"""
|
||||
rough_string = ET.tostring(elem, 'utf-8')
|
||||
reparsed = minidom.parseString(rough_string)
|
||||
dom_string = reparsed.toprettyxml(indent=" ")
|
||||
return '\n'.join([s for s in dom_string.splitlines() if s.strip()])
|
||||
|
||||
|
||||
# https://stackoverflow.com/questions/25338817/sorting-xml-in-python-etree/25339725#25339725
|
||||
def sortchildrenby(parent, attr):
|
||||
parent[:] = sorted(parent, key=lambda child: child.get(attr))
|
||||
|
||||
|
||||
def add_entries_from_file(filename, new_tree, overwrite_existing = False):
|
||||
tree = ET.parse(filename)
|
||||
for child in tree.getroot():
|
||||
if (child.tag != "entry"):
|
||||
print("!!! Skipping invalid tag '%s'" % child.tag)
|
||||
continue
|
||||
|
||||
game_code = child.get("code")
|
||||
existing_node = new_tree.getroot().find(".//*[@code='%s']" % game_code)
|
||||
if existing_node is not None:
|
||||
if overwrite_existing:
|
||||
print("*** Replacing %s from new list" % game_code)
|
||||
new_tree.getroot().remove(existing_node)
|
||||
else:
|
||||
print("*** Skipping %s from new list" % game_code)
|
||||
continue
|
||||
|
||||
new_tree.getroot().append(deepcopy(child))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("--overwrite", action="store_true")
|
||||
parser.add_argument("existing_list", action="store")
|
||||
parser.add_argument("list_to_merge", action="store")
|
||||
parser.add_argument("output_list", action="store")
|
||||
args = parser.parse_args()
|
||||
|
||||
new_tree = ET.ElementTree(ET.Element("compatibility-list"))
|
||||
add_entries_from_file(args.existing_list, new_tree, False)
|
||||
add_entries_from_file(args.list_to_merge, new_tree, args.overwrite)
|
||||
|
||||
sortchildrenby(new_tree.getroot(), "title")
|
||||
|
||||
output_file = open(args.output_list, "w")
|
||||
output_file.write(prettify(new_tree.getroot()))
|
||||
output_file.close()
|
||||
|
Reference in New Issue
Block a user