Выявление простых типов в WSDL с помощью Spyne

Мы пытаемся создать SOAP-приложение с помощью Django + Spyne, создавая определенные требуемые конечные точки. Открытый WSDL должен точно соответствовать заранее определенному XML файлу, включая пользовательские определения простых типов. В настоящее время нам не удается показать определения простых типов в нашем WSDL, все остальное точно соответствует.

Простым примером является следующее приложение hello world:

import logging
logging.basicConfig(level=logging.DEBUG)
from spyne import Application, rpc, ServiceBase, \
    Integer, Unicode, SimpleModel

from spyne import Iterable
from spyne.protocol.xml import XmlDocument
from spyne.protocol.soap import Soap11
from spyne.interface.wsdl import Wsdl11
from spyne.server.django import DjangoApplication
from django.views.decorators.csrf import csrf_exempt


class IdType(SimpleModel):
    __type_name__ = "IdType"
    __namespace__ = 'spyne.examples.hello'
    __extends__ = Unicode

    class Attributes(Unicode.Attributes):
        out_type = 'TxnIdType'

class HelloWorldService(ServiceBase):
    @rpc(IdType, Integer, _returns=Iterable(Unicode))
    def say_hello(ctx, TxnIdType, times):
        for i in range(times):
            yield 'Hello, %s' % TxnIdType

application = Application([HelloWorldService],
    tns='spyne.examples.hello',
    interface = Wsdl11(),
    in_protocol=Soap11(validator = 'lxml'),
    # out_protocol=XmlDocument(validator='schema')
    out_protocol=Soap11()
)

hello_app = csrf_exempt(DjangoApplication(application))

Что дает следующий WSDL:

Как видите, simpleType "IdType" не отображается. Есть ли способ заставить Spyne отразить эти теги? В настоящее время наш выходной WSDL не проходит необходимую проверку, поскольку не распознает пользовательские simpleTypes.

Наш ожидаемый результат следующий:

        <simpleType name="IdType">
                <restriction base="xsd:string">
                    <xsd:maxLength value="10"/>
                </restriction>
        </simpleType>

Любая помощь будет высоко оценена.

Спасибо!

Так ты этот парень, верно? https://github.com/arskom/spyne/discussions/681

Вставляю свой ответ и здесь. Надеюсь, на этот раз вы не откажетесь ответить.

=================

Читали ли вы это? http://spyne.io/docs/2.10/manual/03_types.html#customization

IdType = Unicode(10, type_name='IdType')

class HelloWorldService(ServiceBase):
    @rpc(IdType, Integer, _returns=Iterable(Unicode))
    def say_hello(ctx, TxnIdType, times):
        for i in range(times):
            yield 'Hello, %s' % TxnIdType

Создает ли это нужный вам wsdl?

Вернуться на верх