allow_none в скрученном XML-RPC-сервере - PullRequest
6 голосов
/ 21 сентября 2010

Я создаю службу xml rpc с использованием twisted, и я хотел бы использовать None так же, как это можно сделать в стандартной библиотеке Python. Как я могу передать allow_none для витой версии сервера xmlrpc?

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/python2.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">

Ответы [ 2 ]

8 голосов
/ 21 сентября 2010

XMLRPC принимает allowNone в качестве аргумента для своего инициализатора.Итак, передайте True при создании экземпляра ваших ресурсов, если вы хотите поддержать None.

from twisted.web.xmlrpc import XMLRPC
resource = XMLRPC(allowNone=True)
0 голосов
/ 21 сентября 2010

Я думаю, что это должно быть указано на стороне клиента ...

, когда вы создаете прокси из вашего клиента xmlrpc - вы можете передать ключевое слово аргумент allow_none = True для модуля python xmlrpclib, как показано ниже ...

In [184]: import xmlrpclib as rpc

In [185]: sock = rpc.ServerProxy('http://localhost/xmlrpc/object',allow_none=True)

РЕДАКТИРОВАТЬ:

from twisted.web.xmlrpc import Proxy
proxy = Proxy('http://localhost/xmlrpc', allowNone=True)
...