''' Created on September , 2012 @author: ''' from xml.etree.ElementTree import Element, SubElement, ElementTree from xml.etree import ElementTree as ET from xml.dom import minidom import sys def prettify(elem): """Return a pretty-printed XML string for the Element. """ rough_string = ET.tostring(elem, 'utf-8') reparsed = minidom.parseString(rough_string) return reparsed.toprettyxml(indent=" ") class Controller(): id = None name = None description = None readBranchObjList = None procBranchObjList = None def __init__(self): # self.id = id # self.name = name # self.description = description self.readBranchObjList = [] self.procBranchObjList = [] def setParms(self, id, name, description): self.id = id self.name = name self.description = description def addReadBranch(self, dpath, dataformat, readMode, startDate='', endDate='', startTime='', endTime=''): id = self.getNewId() readBranchObj = ReadBranch() readBranchObj.setup(id, dpath, dataformat, readMode, startDate, endDate, startTime, endTime) self.readBranchObjList.append(readBranchObj) return readBranchObj def addProcBranch(self, name): id = self.getNewId() procBranchObj = ProcBranch() procBranchObj.setup(id, name) self.procBranchObjList.append(procBranchObj) return procBranchObj def getNewId(self): id = int(self.id)*10 + len(self.readBranchObjList) + len(self.procBranchObjList) + 1 return id def makeXml(self): projectElement = Element('Controller') projectElement.set('id', str(self.id)) projectElement.set('name', self.name) projectElement.set('description', self.description) for readBranchObj in self.readBranchObjList: readBranchObj.makeXml(projectElement) for procBranchObj in self.procBranchObjList: procBranchObj.makeXml(projectElement) self.projectElement = projectElement def writeXml(self, filename): self.makeXml() ElementTree(self.projectElement).write(filename, method='xml') print prettify(self.projectElement) def readXml(self, filename): #tree = ET.parse(filename) self.projectElement = None self.readBranchObjList = None self.procBranchObjList = None self.projectElement = ElementTree().parse(filename) self.project = self.projectElement.tag self.id = self.projectElement.get('id') self.name = self.projectElement.get('name') self.readBranchObjList = [] readBranchElementList = self.projectElement.getiterator('readBranch') for readBranchElement in readBranchElementList: readBrachObj = ReadBranch() readBrachObj.readXml(readBranchElement) self.readBranchObjList.append(readBranchObj) self.procBranchObjList = [] procBranchElementList = self.projectElement.getiterator('procBranch') for procBranchElement in procBranchElementList: procBranchObj = ProcBranch() procBranchObj.readXml(procBranchElement) self.procBranchObjList.append(procBranchObj) def printattr(self): print "Controller[%s]: name = %s, description = %s" %(self.id, self.name, self.description) for readBranchObj in self.readBranchObjList: readBranchObj.printattr() for procBranchObj in self.procBranchObjList: procBranchObj.printattr() class ReadBranch(): id = None name = None # dpath = None # dataformat = None # readMode = None # startDate = None # endDate = None # startTime = None # endTime = None parmObjList = [] def __init__(self): self.parmObjList = [] def setup(self, id, dpath, dataformat, readMode, startDate, endDate, startTime, endTime): self.id = id self.dpath = dpath self.dataformat = dataformat self.readMode = readMode self.startDate = startDate self.endDate = endDate self.startTime = startTime self.endTime = endTime def addParameter(self, name, value): id = int(self.id)*10 + len(self.parmObjList) + 1 parmObj = ParameterConf() parmObj.setup(id, name, value) self.parmObjList.append(parmObj) return parmObj def makeXml(self, projectElement): readBranchElement = SubElement(projectElement, 'readBranch') readBranchElement.set('id', str(self.id)) self.addParameter(name='dpath' , value=self.dpath) self.addParameter(name='dataformat', value=self.dataformat) self.addParameter(name='startDate' , value=self.startDate) self.addParameter(name='endDate' , value=self.endDate) self.addParameter(name='startTime' , value=self.startTime) self.addParameter(name='endTime' , value=self.endTime) self.addParameter(name='readMode' , value=str(self.readMode)) for parmObj in self.parmObjList: parmObj.makeXml(readBranchElement) def readXml(self, readBranchElement): self.id = readBranchElement.get('id') self.parmObjList = [] parmElementList = readBranchElement.getiterator('Parameter') for parmElement in parmElementList: parmObj = ParameterConf() parmObj.readXml(parmElement) self.parmObjList.append(parmObj) def printattr(self): print "ReadBranch[%s]: name = %s" %(self.id, self.name) for parmObj in self.parmObjList: parmObj.printattr() class ProcBranch(): id = None name = None upObjList = None def __init__(self): pass def setup(self, id, name): self.id = id self.name = name self.upObjList = [] def addUP(self, name, type, inputId): id = int(self.id)*10 + len(self.upObjList) + 1 upObj = UPConf() upObj.setup(id, name, type, inputId) self.upObjList.append(upObj) return upObj def makeXml(self, projectElement): procBranchElement = SubElement(projectElement, 'procBranch') procBranchElement.set('id', str(self.id)) procBranchElement.set('name', self.name) for upObj in self.upObjList: upObj.makeXml(procBranchElement) def readXml(self, procBranchElement): self.id = procBranchElement.get('id') self.name = procBranchElement.get('name') self.upObjList = [] upElementList = procBranchElement.getiterator('UP') for upElement in upElementList: upObj = UPConf() upObj.readXml(upElement) self.upObjList.append(upObj) def printattr(self): print "ProcBranch[%s]: name = %s" %(self.id, self.name) for upObj in self.upObjList: upObj.printattr() class UPConf(): id = None name = None type = None inputId = None opObjList = [] def __init__(self): pass def setup(self, id, name, type, inputId): self.id = id self.name = name self.type = type self.inputId = inputId self.opObjList = [] def addOperation(self, name, priority, type='self'): id = int(self.id)*10 + len(self.opObjList) + 1 opObj = OperationConf() opObj.setup(id, name, priority, type) self.opObjList.append(opObj) return opObj def makeXml(self, procBranchElement): upElement = SubElement(procBranchElement, 'UP') upElement.set('id', str(self.id)) upElement.set('name', self.name) upElement.set('type', self.type) upElement.set('inputId', str(self.inputId)) for opObj in self.opObjList: opObj.makeXml(upElement) def readXml(self, upElement): self.id = upElement.get('id') self.name = upElement.get('name') self.type = upElement.get('type') self.inputId = upElement.get('inputId') self.opObjList = [] opElementList = upElement.getiterator('Operation') for opElement in opElementList: opObj = OperationConf() opObj.readXml(opElement) self.opObjList.append(opObj) def getOperationObjList(self): return self.opObjList def printattr(self): print "UP[%s]: name = %s, type = %s, inputId = %s" %(self.id, self.name, self.type, self.inputId) for opObj in self.opObjList: opObj.printattr() class OperationConf(): id = 0 name = None priority = None type = 'self' parmObjList = [] def __init__(self): pass def setup(self, id, name, priority, type): self.id = id self.name = name self.priority = priority self.type = type self.parmObjList = [] def addParameter(self, name, value): id = int(self.id)*10 + len(self.parmObjList) + 1 parmObj = ParameterConf() parmObj.setup(id, name, value) self.parmObjList.append(parmObj) return parmObj def makeXml(self, upElement): opElement = SubElement(upElement, 'Operation') opElement.set('id', str(self.id)) opElement.set('name', self.name) opElement.set('priority', str(self.priority)) for parmObj in self.parmObjList: parmObj.makeXml(opElement) def readXml(self, opElement): self.id = opElement.get('id') self.name = opElement.get('name') self.type = opElement.get('type') self.parmObjList = [] parmElementList = opElement.getiterator('Parameter') for parmElement in parmElementList: parmObj = ParameterConf() parmObj.readXml(parmElement) self.parmObjList.append(parmObj) def getParameterObjList(self): return self.parmObjList def printattr(self): print "Operation[%s]: name = %s, type = %s, priority = %s" %(self.id, self.name, self.type, self.priority) for parmObj in self.parmObjList: parmObj.printattr() class ParameterConf(): id = None name = None value = None def __init__(self): pass def setup(self, id, name, value): self.id = id self.name = name self.value = value def makeXml(self, opElement): parmElement = SubElement(opElement, 'Parameter') parmElement.set('id', str(self.id)) parmElement.set('name', self.name) parmElement.set('value', self.value) def readXml(self, parmElement): self.id = parmElement.get('id') self.name = parmElement.get('name') self.value = parmElement.get('value') def printattr(self): print "Parameter[%s]: name = %s, value = %s" %(self.id, self.name, self.value) if __name__ == '__main__': desc = "Este es un test" filename = "test.xml" projectObj = Controller() projectObj.setParms(id = '191', name='test01', description=desc) readBranchObj = projectObj.addReadBranch(dpath='mydata', dataformat='rawdata', readMode=0, startDate='1', endDate='3', startTime='4', endTime='5') procBranchObj = projectObj.addProcBranch(name='Branch1') procBranchObj1 = projectObj.addProcBranch(name='Branch2') upObj1 = procBranchObj.addUP(name='UP1', type='Voltage', inputId=readBranchObj.id) upObj2 = procBranchObj.addUP(name='UP2', type='Voltage', inputId=upObj1.id) opObj11 = upObj1.addOperation(name='removeDC', priority=1) opObj11.addParameter(name='type', value='1') opObj12 = upObj1.addOperation(name='decoder', priority=2) opObj12.addParameter(name='ncode', value='2') opObj12.addParameter(name='nbauds', value='8') opObj12.addParameter(name='code0', value='001110011') opObj12.addParameter(name='code1', value='001110011') print "Escribiendo el archivo XML" projectObj.writeXml(filename) print "Leyendo el archivo XML" projectObj.readXml(filename) projectObj.printattr()