XML-RPC - не может маршалировать рекурсивные словари - PullRequest
5 голосов
/ 23 мая 2011

У меня есть простой пример для отправки словаря через xml-rpc:

 class CTest(object):
    def __init__(self):
        self.node1 = {'data':'zek', 'parent':{},  'children':[]}
        self.node2 = {'data':'bill', 'parent':{}, 'children':[]}
        self.node1['children'].append(self.node2)
        self.node2['parent'] = self.node1

    def getNode(self):
        return self.node1

У меня есть два словаря: узел2 является дочерним узлом узла1, и в то же время узел2 имеет ссылку на узел1 в качестве родительской переменной. Так что это рекурсивный словарь. Когда я пытаюсь отправить node1 через XML-RPC, я получаю следующее исключение:

#Command to execute xml-rpc dump method for serialization
test = CTest()
xmlrpclib.dumps((test,), 'Node Object')
#Exception
raise TypeError, "cannot marshal recursive dictionaries"

Можно ли отправить узел 1 через XML-RPC (без изменения структуры словаря)?

Спасибо.

1 Ответ

4 голосов
/ 23 мая 2011

Сериализуйте и десериализуйте «тест» самостоятельно с помощью модуля «pickle» в Python.

cPickle.dumps(test)

работает. На другой стороне провода вы используете

cPickle.loads(received_test_pickle)

Возможно, потребуется base-64 для кодирования / декодирования рассола до / после вызова XMLRPC.

Но также посмотрите на PyRo

http://pyro.sourceforge.net/

...