Parse an error from an XML-RPC call.

        raises: ``IOError`` when the Twisted XML-RPC connection times out.
        raises: ``BugzillaNotFoundException``
        raises: ``BugzillaNotAuthorizedException``
        raises: ``BugzillaException`` if we got a response from the XML-RPC
                server but it is not one of the ``xmlrpc.Fault``s above that
                we know about.
        raises: ``Exception`` if it is not one of the above.

def _parse_errback(self, error):
        """
        Parse an error from an XML-RPC call.

        raises: ``IOError`` when the Twisted XML-RPC connection times out.
        raises: ``BugzillaNotFoundException``
        raises: ``BugzillaNotAuthorizedException``
        raises: ``BugzillaException`` if we got a response from the XML-RPC
                server but it is not one of the ``xmlrpc.Fault``s above that
                we know about.
        raises: ``Exception`` if it is not one of the above.
        """
        if isinstance(error.value, IOError):
            raise error.value
        if hasattr(xmlrpc, 'Fault'):  # Python 2:
            fault = xmlrpc.Fault
        else:
            fault = xmlrpc.client.Fault
        if isinstance(error.value, fault):
            if error.value.faultCode == 101:
                raise BugzillaNotFoundException(error.value.faultString)
            if error.value.faultCode == 102:
                raise BugzillaNotAuthorizedException(error.value.faultString)
            if error.value.faultCode == 32000:
                raise BugzillaTokenExpiredException(error.value.faultString)
            raise BugzillaException(error.value)
        # We don't know what this is, so just raise it.
        raise error