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)
if self.xml != "":
# only popup the window if we have something to show
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)