From 3d2e46c8ed0a5163c2844a281ba1edf4aedd8384 Mon Sep 17 00:00:00 2001 From: Oliwerix Date: Tue, 22 Nov 2022 21:30:34 +0100 Subject: patch list generation --- utils/README.md | 3 +++ utils/patchlist.py | 42 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 utils/README.md create mode 100755 utils/patchlist.py diff --git a/utils/README.md b/utils/README.md new file mode 100644 index 0000000..0d3eb50 --- /dev/null +++ b/utils/README.md @@ -0,0 +1,3 @@ +# Useful utilities for manipulating and extracting data from qlcplus showfiles and fixture definitions +## patchlist.py +Generates a patchlist in tsv format from given showfile \ No newline at end of file diff --git a/utils/patchlist.py b/utils/patchlist.py new file mode 100755 index 0000000..ba9042b --- /dev/null +++ b/utils/patchlist.py @@ -0,0 +1,42 @@ +#!/usr/bin/python3 +###################################################### +## ## +## Outputs patch listing for given showfile ## +## Output is in tsv format ## +## v0.1 ## +## ## +## TODO: ## +## - add options for selecting output params ## +## ## +###################################################### + + +import xml.etree.ElementTree as ET +import sys + +namespaces = {"qlc" : "http://www.qlcplus.org/Workspace"} + +def parseXML(xml_file): + tree = ET.ElementTree(file=xml_file) + ET.register_namespace("qlc", namespaces["qlc"]) + root = tree.getroot() + fixtures = root.findall('.//qlc:Engine/qlc:Fixture', namespaces) + + print("Address", "Mfctr", "Model", "Mode", "CNAME", sep="\t") + for fixture in fixtures: + fixture_Name = fixture.find('.//qlc:Name').text + fixture_Universe = int(fixture.find('.//qlc:Universe', namespaces).text)+1 + fixture_Address = int(fixture.find('.//qlc:Address', namespaces).text)+1 + fixture_Manufacturer = fixture.find('.//qlc:Manufacturer', namespaces).text + fixture_Model = fixture.find('.//qlc:Model', namespaces).text + fixture_Mode = fixture.find('.//qlc:Mode', namespaces).text + fixture_Dip = '{0:010b}'.format(fixture_Address)[::-1] # can show dip switch position, unused + print(f"{fixture_Universe}.{fixture_Address}",fixture_Manufacturer, fixture_Model, fixture_Mode, fixture_Name, sep="\t") + +if __name__ == "__main__": + if len(sys.argv) >= 2: + filename = sys.argv[1] + parseXML(filename) + else: + print("Please specify a patch file to read", file=sys.stderr) + exit(1) \ No newline at end of file -- cgit v1.2.3