gpt4 book ai didi

python - 如何防止 Spyne 包装我的响应?

转载 作者:数据小太阳 更新时间:2023-10-29 02:30:41 29 4
gpt4 key购买 nike

这是示例服务

NS = 'my_app_namespace'

class MyMethodRS(ComplexModel):
__tns__ = NS
Version = XmlAttribute(Unicode)

class MyService(ServiceBase):
__tns__ = NS

@srpc(Unicode, _returns=MyMethodRS, _out_variable_name='MyMethodRS')
def my_method(foo):
response = MyMethodRS()
response.Version = '1.0'
return response

# and then application will be created and starged as wsgi app

然后我发布一个请求

<?xml version='1.0' encoding='UTF-8' ?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<my_method xmlns="my_app_namespace">
<foo>bar</foo>
<my_method>
</soap:Body>
</soap:Envelope>

我得到了

<?xml version='1.0' encoding='UTF-8' ?>
<senv:Envelope>
<senv:Body>
<tns:my_methodResponse>
<tns:MyMethodRS Version="1.0" />
</tns:my_methodResponse>
</senv:Body>
</senv:Envelope>

我不想将响应包装到 my_methodResponse 中。我尝试将 _body_style='bare' 添加到 @srpc 并失败了

<?xml version='1.0' encoding='UTF-8' ?>
<senv:Envelope>
<senv:Body>
<senv:Fault>
<faultcode>senv:Client.SchemaValidationError</faultcode>
<faultstring><string>:14:0:ERROR:SCHEMASV:SCHEMAV_CVC_TYPE_3_1_2: Element '{http://www.opentravel.org/OTA/2003/05}my_method': Element content is not allowed, because the type definition is simple.</faultstring>
<faultactor />
</senv:Fault>
</senv:Body>
</senv:Envelope>

我该如何处理?我正在尝试实现严格的 API,无法向我的响应添加任何包装器。

最佳答案

从这个请求来看:

<my_method xmlns="my_app_namespace">
<foo>bar</foo>
<my_method>

你需要这个:

class MyMethodRequest(ComplexModel):
foo = Unicode

class MyService(ServiceBase):
@srpc(MyMethodRequest, _returns=MyMethodRS, _body_style='bare'
_out_variable_name='MyMethodRS')
def my_method(request):
foo = request.foo
response = MyMethodRS()
response.Version = '1.0'
return response

这非常接近于非裸模式的实际作用。

关于python - 如何防止 Spyne 包装我的响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19536282/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com