From 9e7839877d1fe013161b0bbe7d76792a13dc8c62 Mon Sep 17 00:00:00 2001 From: smbaker Date: Tue, 6 Sep 2011 19:44:17 -0700 Subject: [PATCH] remove body: with a double-quote before it, tolerate parsing errors in parseMethodResponse --- sface/xmlrpcwindow.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/sface/xmlrpcwindow.py b/sface/xmlrpcwindow.py index cc17584..81007c0 100644 --- a/sface/xmlrpcwindow.py +++ b/sface/xmlrpcwindow.py @@ -20,10 +20,17 @@ class XmlrpcReader(): self.rawOutput = rawOutput def parseMethodResponse(self, mr): - tree = etree.fromstring(str(mr)) + mr = str(mr) # PyQT supplies a QByteArray; make it a string response = {"kind": "unknown"} + try: + tree = etree.fromstring(mr) + except etree.XMLSyntaxError, e: + print "failed to parse XML response", str(e) + #file("badparse.xml","w").write(mr) + return response + if tree.tag != "methodResponse" or (len(list(tree))==0): return response @@ -62,7 +69,7 @@ class XmlrpcReader(): 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 = [ x.replace('\\n','\n').replace("'\nbody: '", '').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 -- 2.43.0