'Extract the fault from the specified soap reply.  If I{faults} is True, an
exception is raised.  Otherwise, the I{unmarshalled} fault L{Object} is
returned.  This method is called when the server raises a I{web fault}.
@param reply: A soap reply message.
@type reply: str
@return: A fault object.
@rtype: tuple ( L{Element}, L{Object} )'

def get_fault(self, reply):

    reply = self.replyfilter(reply)
    sax = Parser()
    faultroot = sax.parse(string=reply)
    soapenv = faultroot.getChild('Envelope')
    soapbody = soapenv.getChild('Body')
    fault = soapbody.getChild('Fault')
    unmarshaller = self.unmarshaller(False)
    p = unmarshaller.process(fault)
    if self.options().faults:
        raise WebFault(p, faultroot)
    return (faultroot, p.detail)
