allow_none in twisted XML-RPC server
I am building xml rpc service using twisted and I would like to use None just as it can be done in standard python lib. How can I pass allow_none to the twisted version of xmlrpc server?
EDIT
In [28]: sock = rpc.ServerProxy('http://localhost:7080',allow_none=True)
In [29]: sock
Out[29]: <ServerProxy for localhost:7080/RPC2>
In [30]: sock.list_reports()
Out[30]: ['example']
In [31]: sock.run_report('example')
---------------------------------------------------------------------------
Fault Traceback (most recent call last)
reports/<ipython console> in <module>()
/usr/lib/python2.6/xmlrpclib.pyc in __call__(self, *args)
1197 return _Method(self.__send, "%s.%s" % (self.__name, name))
1198 def __call__(self, *args):
-> 1199 return self.__send(self.__name, args)
1200
1201 ##
/usr/lib/python2.6/xmlrpclib.pyc in __request(self, methodname, params)
1487 self.__handler,
1488 request,
-> 1489 verbose=self.__verbose
1490 )
1491
/usr/lib/python2.6/xmlrpclib.pyc in request(self, host, handler, request_body, verbose)
1251 sock = None
1252
-> 1253 return self._parse_response(h.getfile(), sock)
1254
1255 ##
/usr/lib/pyth开发者_开发百科on2.6/xmlrpclib.pyc in _parse_response(self, file, sock)
1390 p.close()
1391
-> 1392 return u.close()
1393
1394 ##
/usr/lib/python2.6/xmlrpclib.pyc in close(self)
836 raise ResponseError()
837 if self._type == "fault":
--> 838 raise Fault(**self._stack[0])
839 return tuple(self._stack)
840
Fault: <Fault 8002: "Can't serialize output: cannot marshal None unless allow_none is enabled">
XMLRPC accepts allowNone
as an argument to its initializer. So, pass True
when instantiating your resources if you want to support None
.
from twisted.web.xmlrpc import XMLRPC
resource = XMLRPC(allowNone=True)
I think it should be specified on client side...
when you create the proxy from your xmlrpc client - you may pass the keyword argument allow_none = True for python xmlrpclib module like below...
In [184]: import xmlrpclib as rpc
In [185]: sock = rpc.ServerProxy('http://localhost/xmlrpc/object',allow_none=True)
EDIT:
from twisted.web.xmlrpc import Proxy
proxy = Proxy('http://localhost/xmlrpc', allowNone=True)
精彩评论