Skip to content
Snippets Groups Projects
Commit d8ccf644 authored by Sebastian Aksamit's avatar Sebastian Aksamit
Browse files

change sz5_converter to parse xml files as a whole instead of one line

parent c7f4bb45
No related branches found
No related tags found
No related merge requests found
......@@ -6,18 +6,19 @@ from name_extractor import NameExtractor
from xmlparser import XmlParser
import xml.dom.minidom
import re
from convutils import DrawdefinableParamHandler
import argparse
#####
#REQUIRES PYTHON3.8 TO WORK
# REQUIRES PYTHON3.8 TO WORK
####
def getDeamonNameFromNode(node):
return node.parentNode.parentNode.getAttribute("name").split("/")[-1]
class ErrorLogger:
def __init__(self):
pass
......@@ -26,7 +27,7 @@ class ErrorLogger:
print("ERROR: Param {} in changing list while {} not".format(param_in, param_out))
def differentTypes(self, param_a, param_b):
print("ERROR: Trying to merge params {} and {} of different types!".format(lsw_param, msw_param))
print("ERROR: Trying to merge params {} and {} of different types!".format(param_a, param_b))
def suspectedParam(self, param):
print("WARNING: Formula in {} didn't match regexp, but still is suspected having folded param".format(param))
......@@ -42,11 +43,8 @@ class ErrorLogger:
class ElementsReproducer:
def __init__(self, file, error_logger):
lines = file.readlines()
xml_string = "".join([x.strip() for x in lines])
self.dom = xml.dom.minidom.parseString(xml_string)
def __init__(self, filename, error_logger):
self.dom = xml.dom.minidom.parse(filename)
self.lsw_msw_params = []
self.error_logger = error_logger
self.obsolete_attributes = set()
......@@ -83,8 +81,7 @@ class ElementsReproducer:
if node.hasAttribute("modbus:address"):
return int(node.getAttribute("modbus:address"))
#shoud not happen
return -1
return None
def getParamEndian(self, node):
if node.hasAttribute("extra:FloatOrder"):
......@@ -116,12 +113,12 @@ class ElementsReproducer:
def setAddress(self, lsw_node, msw_node):
msw_register = self.getParamAddress(msw_node)
if msw_register == -1:
if msw_register is None:
self.error_logger.paramNoAddress(msw_node.getAttribute("name"))
return False
lsw_register = self.getParamAddress(lsw_node)
if lsw_register == -1:
if lsw_register is None:
self.error_logger.paramNoAddress(lsw_node.getAttribute("name"))
return False
......@@ -151,7 +148,7 @@ class ElementsReproducer:
def mergeLong(self, drawdefinable, lsw_node, msw_node):
msw_reg = self.getParamAddress(msw_node)
lsw_reg = self.getParamAddress(lsw_node)
if msw_reg != -1 and lsw_reg != -1:
if msw_reg is not None and lsw_reg is not None:
if lsw_reg < msw_reg:
lsw_node.setAttribute("extra:FloatOrder", "lsbmsb")
else:
......@@ -224,7 +221,7 @@ class ElementsReproducer:
self.error_logger.differentTypes(lsw_param, msw_param)
continue
#returns true if node was merged
# returns true if node was merged
merging_functions = {
"long": self.mergeLong,
"integer": self.mergeInt,
......@@ -241,13 +238,19 @@ class ElementsReproducer:
if(merging_functions[merge_type](param, lsw_node, msw_node)):
self.deleteNode(param)
def saveXml(self, file):
file.write(self.dom.toprettyxml(indent=" ", encoding="utf-8").decode("utf-8"))
# Set new line symbol to '' so minidom won't generate unnecessary double spaces between tags
pretty_xml = self.dom.toprettyxml(indent=" ", newl='', encoding="utf-8").decode("utf-8")
# toprettyxml adds many unnecessary spaces after each line, get rid of that too
for line in pretty_xml.splitlines():
line = line.rstrip(' ')
file.write(f'{line}\n')
def addObsoleteAttributes(self, attributes):
self.obsolete_attributes.update(attributes)
if __name__ == "__main__":
parser = argparse.ArgumentParser(description='SZ5 converter', epilog='Python3.8 is minimum required version')
parser.add_argument('xml_path', type=str, help='path to params.xml')
......@@ -261,7 +264,7 @@ if __name__ == "__main__":
filename = args.xml_path
daemons_to_change = []
params_to_change = []
if(args.daemons != None):
if(args.daemons is not None):
daemons_to_change = [int(x.strip()) for x in args.daemons.split(",")]
name_extractor = NameExtractor(XmlParser())
with open(filename, "rb") as file:
......@@ -269,10 +272,10 @@ if __name__ == "__main__":
name_extractor.parseFile(file)
params_to_change = name_extractor.getParamsNames()
with open(filename, "r") as file:
elements_reproducer = ElementsReproducer(file, ErrorLogger())
if(args.keep_data_type == False):
elements_reproducer.addObsoleteAttributes(['data_type'])
elements_reproducer.correctLswMswScalableParams(params_to_change)
elements_reproducer = ElementsReproducer(filename, ErrorLogger())
if(args.keep_data_type is False):
elements_reproducer.addObsoleteAttributes(['data_type'])
elements_reproducer.correctLswMswScalableParams(params_to_change)
with open("tmp.xml", "w") as file:
elements_reproducer.saveXml(file)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment