отправляющий объект (рекурсивные структуры данных) с помощью XML-RPC в python

#python #xml-rpc #composite #recursive-datastructures #xmlrpclib

#python #xml-rpc #составной #recursive-структуры данных #xmlrpclib

Вопрос:

Мне нужно отправить объект через XML-RPC в python. Мой объект состоит из составного типа данных для заполнения древовидной структуры:

 class Node(object):
'''Composite data type '''
def __init__(self, pData, pParent=None):
    self.mData = pData
    self.mParent = pParent
    self.mChildren = []
  

self.mParent является ссылкой на его родительский узел. Итак, у меня есть рекурсивные структуры данных для создания этой структуры. Когда я пытаюсь отправить этот тип данных напрямую с помощью XML-RPC, он выдает эту ошибку:

 xmlrpclib.Fault: <Fault 1: "<type 'exceptions.TypeError'>:cannot marshal recursive dictionaries">
  

Я думаю, что это исключение возникло из-за его сложной структуры. Поскольку xml-rpc поддерживает только базовые типы данных. Я не мог использовать словари, потому что мне нужны ссылки в моем клиентском узле. Когда я использую словари со ссылками, это выдает ту же ошибку, что и выше.
Я не мог использовать pickle, он должен быть независимым от языка.

Есть ли у вас какие-либо предложения по отправке объекта через XML-RPC изначально? Может быть, как создать мой собственный тип данных, чтобы отправить его в формате xml?

Ответ №1:

Посмотрите на

http://www.xs4all.nl /~irmen/pyro3/

когда вы хотите передавать объекты Python по проводам.

Поскольку XMLRPC основан на XML — как следует из названия — вы не можете передавать объекты Python по сети без сериализации.

Комментарии:

1. спасибо за ответ. Как вы сказали, его необходимо сериализовать в подходящих представлениях XML перед отправкой объекта. Например, когда я отправляю строковую переменную, XML-RPC автоматически генерирует переменную <string></string>. Так возможно ли также, что я сериализую свой объект в формате xml (без pickle, изменения кода в xmlrpclib) и отправляю его другому узлу?