Я пытаюсь использовать spyne для реализации SOAP-сервиса в Python. Мой клиент отправляет SOAP-запросы следующим образом:spyne генерирует плохую схему WSDL/XSD для ComplexModels with ComplexModel children
<ns1:loadServices xmlns:ns1="dummy">
<serviceParams xmlns="dummy">
<header>
<user>foo</user>
<password>secret</password>
</header>
</serviceParams>
</ns1:loadServices>
Но у меня возникают трудности с установкой этой структуры в модель spyne.
До сих пор я придумал этот код:
class Header(ComplexModel):
__type_name__ = 'header'
user = Unicode
password = Unicode
class serviceParams(ComplexModel):
__type_name__ = 'serviceParams'
header = Header()
class DummyService(ServiceBase):
@rpc(serviceParams, _returns=Unicode)
def loadServices(ctx, serviceParams):
return '42'
Проблема в том, что spyne генерирует и XSD, как это:
...
<xs:complexType name="loadServices">
<xs:sequence>
<xs:element name="serviceParams" type="tns:serviceParams" minOccurs="0" nillable="true"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="serviceParams"/>
...
, который не то, что я хочу, потому что по существу он говорит, что " serviceParams "- это всего лишь пустой тег без детей.
Это ошибка в spyne? Или я чего-то не хватает?
Ну, я согласен, что это легко пропустить, но я бы сказал, что это Python, а не Spyne. Вызов класса реализует этот класс. Возможно, Spyne может выпустить предупреждение или что-то еще, когда он увидит экземпляр маркера типа, поскольку я не могу придумать правильный пример использования для использования экземпляров маркеров, где сами маркеры должны использоваться. –
да, я думаю, что это «противно», потому что spyne просто молча игнорирует элемент. Если возникло исключение или хотя бы четко видимое предупреждение (например, с использованием модуля предупреждений), это будет совершенно другая история. –
Справа. Это довольно просто реализовать на самом деле. Если вам это нужно как можно скорее, патчи приветствуются :) Смотрите: https://github.com/arskom/spyne/issues/273 –