[Twisted-Python] Pass error (exception) message to XMLRPC client

Remy Cool mailinglists at smartology.nl
Thu Apr 28 08:34:26 MDT 2005


Jp Calderone wrote:
> On Thu, 28 Apr 2005 10:59:57 +0200, Remy Cool 
> <mailinglists at smartology.nl> wrote:
> 
>> Brett Viren wrote:
>>
>>> Remy C Cool <remy.cool at smartology.nl> writes:
>>>
>>>> Hello,
>>>>
>>>> I've searched on the (Twisted) website and mailinglists, but failed to
>>>> find the answer to my question.
>>>>
>>>> Is is possible to pass the original exception code/message to the
>>>> XMLRPC client? When an exception occurs, the client get's a general
>>>> 'error occured' message and I would like to be able to let the client
>>>> know what went wrong. How can I accomplish this with Twisted?
>>>
>>>
>>>
>>> It isn't really an exception but I use the idiom of returning an
>>> (int,string) tuple:
>>>
>>>   (err,error_message)
>>>
>>> If err != 0, it's interpreted as an error code.  A successful return
>>> is (0,"").
>>>
>>> I don't happen to do it, but I suppose you could then raise an
>>> exception on the client size by hand when non-zero is returned.
>>
>>
>> That's one way to process exceptions, but that's not what I want. You
>> will need to catch all exceptions yourself and send back a tupple as you
>> described above. XMLRPC support exception handling, and I would like to
>>  use that mechanism rather then coding my own solution.
>>
>> If an exception occurs in the backend (XMLRPC server) the client
>> receives an XMLRPC error (created by Twisted?). My question was and is,
>> if it is possible to send the 'real' exception message to the client in
>> place of the general message it now receives.
>>
> 
>  The behavior of that Fault is defined the _ebRender method of  
> twisted.web.client.xmlrpc.XMLRPC.  Presently it is defined as:
> 
>    def _ebRender(self, failure):
>        if isinstance(failure.value, Fault):
>            return failure.value
>        log.err(failure)
>        return Fault(self.FAILURE, "error")
> 
>  Which logs complete error information on the server and sends minimal 
> information to the client.  If you override this method, you can cause 
> more information to be sent to the client.  It probably avoids doing 
> this currently in case the string version of the failure contains 
> sensitive information.
> 
>  Note that _ebRender is private and so may change at any time.  You 
> should be prepared to deal with this, or override the render() method 
> itself and set up your own errback, or contribute a patch that adds a 
> public API for handling all unexpected errors in code invoked from an 
> XMLRPC resource.

Thanks for your reply, I'll look into it.

-- Remy --




More information about the Twisted-Python mailing list