Exemplo n.º 1
0
 def _unpackageResult(self, header, response):
     status = header['status']
     if status == '200':
         result = httputil.unserialize(header, response)
         return self._returnOrRaise(result)
     else:
         raise error.ProtocolError("Request Failed: %s:%s" %
                                   (status, response))
Exemplo n.º 2
0
class Transport(xmlrpclib.Transport):
    """Handles an HTTP transaction to an XML-RPC server."""
    def __init__(self):
        self.connection = None

    # client identifier (may be overridden)
    user_agent = "xmlrpclib.py/%s (by www.pythonware.com)" % xmlrpclib.__version__

    ##
    # Send a complete request, and parse the response.
    #
    # @param host Target host.
    # @param handler Target PRC handler.
    # @param request_body XML-RPC request body.
    # @param verbose Debugging flag.
    # @return Parsed response.

    def _full_request(self, host, handler, request_body):
        self.send_request(handler, request_body)
        self.send_host(host)
        self.send_user_agent()
        self.send_content(request_body)

    def request(self, host, handler, request_body, verbose=0):
        # issue XML-RPC request

        self.make_connection(host)
        if verbose:
            self.connection.set_debuglevel(1)

        try:
            self._full_request(host, handler, request_body)
        except:
            # If anything goes wrong, retry by first closing the connection.
            # Any exceptions at this point are allowed to propagate out for
            # handling code to deal with them.
            try:
                self.connection.close()
                self._full_request(host, handler, request_body)
            except Exception, e:
                # last_type = e.__name__
                msg = ("Error connecting to the server, please recreate the "
                       "client.\n"
                       "The original internal error was:\n"
                       "%r" % e)
                raise error.ConnectionError(msg)

        response = self.connection.getresponse()
        errcode = response.status
        errmsg = response.reason
        headers = response.msg

        if errcode != 200:
            raise error.ProtocolError(host + handler, errcode, errmsg, headers)

        self.verbose = verbose

        return self.parse_response(response)
Exemplo n.º 3
0
 def _badRequest(self, request):
     e = error.ProtocolError("Improperly Formed Request: %s:%s" %
                             (request.path, request.args))
     return self.packageFailure(failure.Failure(e))