import re from PyQt4.QtXml import QDomDocument from sface.xmlwidget import XmlWindow, DomModel class XmlrpcTracker(): def __init__(self): self.xmlrpcWindow = XmlrpcWindow() def getAndPrint(self, rawOutput): self.store(rawOutput) self.extractXml() self.xmlrpcWindow.setData(self.xml) self.showXmlrpc() def showXmlrpc(self): self.xmlrpcWindow.show() self.xmlrpcWindow.resize(500, 640) self.xmlrpcWindow.raise_() self.xmlrpcWindow.activateWindow() def store(self, rawOutput): self.rawOutput = rawOutput def extractXml(self): pttrnAsk = '.*?' pttrnAns = '.*?' answers = re.compile(pttrnAsk, re.DOTALL).findall(self.rawOutput) replies = re.compile(pttrnAns, re.DOTALL).findall(self.rawOutput) # cleaning answers = [ x.replace('\\n','\n') for x in answers ] replies = [ x.replace('\\n','\n').replace("'\nbody: '", '') for x in replies ] replies.reverse() # so that I use pop() as popleft # A well-formed XML document must have one, and only one, top-level element self.xml = '' for ans in answers: self.xml += ans + replies.pop() self.xml += '' def stats(self): # statistics: round-trip time, size of the com pass class XmlrpcWindow(XmlWindow): def __init__(self, parent=None): # super __init__() calls updateView, # which assumes you have some data self.data = '' XmlWindow.__init__(self, parent, 'XMLRPC window') def setData(self, XmlrpcCom): self.data = XmlrpcCom def updateView(self): XmlWindow.updateView(self) self.document.setContent(self.data)