2013-08-01 2 views
0

Я пытаюсь использовать комбинацию Spyne и Suds (хотя я не очень разбираюсь в использовании Suds), чтобы создать модуль, который работает посредником между двумя SOAP-объектами.От Spyne to Suds

Существует клиент C, который подключается к серверу S, вызывает метод M, который возвращает ComplexType, D. Тот же объект данных должен быть отправлен S на другой сервер S1. Конечно, существует метод M1, который принимает тип D как параметр на сервере S1. Проблема, с которой я столкнулся, - это не просто отправить D на S1, не превращаясь в тип, который распознается Suds.

Есть ли разумный способ сделать это, не копируя поле по полю атрибутами D от одного «типа» к другому?

ответ

0

Вы можете действительно преобразовать входящие объекты dicts и передать их в мыльной пене. Но Spyne уже предлагает оба способа объекта < ==> диктовки преобразования.

Для преобразования в dict вы можете использовать spyne.util.dictdoc.

например.

from spyne.model.complex import ComplexModel 
from spyne.model.primitive import Integer 

class B(ComplexModel): 
    c = Integer 

class A(ComplexModel): 
    a = Integer 
    b = B 

from spyne.util.dictdoc import get_object_as_dict 
print get_object_as_dict(A(a=4, b=B(c=5)), A) 
# prints {'a': 4, 'b': {'c': 5}} 

get_object_as_dict(A(a=4, b=B(c=5)), A, ignore_wrappers=False) 
# prints {'A': {'a': 4, 'b': {'B': {'c': 5}}}} 

Надеюсь, это поможет.

0

Вы можете преобразовать объект типа D делать Dict и передать Dict методе обслуживания, Suds принять dicts, уважающую структуру объектов: https://fedorahosted.org/suds/wiki/Documentation#ComplexArgumentsUsingPythondict

Чтобы преобразовать в Сыроватских вы можете использовать код здесь: Recursively convert python object graph to dictionary ,

Ie:

D_inst = S.service.M() 
    D_dict = to_dict(D_inst) 
    S1.service.M1(D_dict) 
0

У Suds есть большие проблемы, анализирующие сложные объекты.

E.g.

class C(ComplexModel): 
    d = Integer 

class B(ComplexModel): 
    c = Array(C) 

class A(ComplexModel): 
    a = Integer 
    b = B 

В этом случае с помощью get_object_to_dict преобразовать в словарь исправен, но пена не может вызвать метод SOAP и терпит неудачу с Type not found 'c'.

Смежные вопросы