2017-06-21 100 views
0

我已阅读关于Spyne Faults(http://spyne.io/docs/2.10/manual/03_types.html)的信息,但无法正确地使用400返回码提醒错误。我有故障的反应形成正确的,但有一个500 HTTP返回代码时,我有一个要求返回400Spyne Fault - HTTP返回代码

@srpc(Boolean, _returns=String) 
def requestConfiguration(value): 
    #if value is true, get all the data 
    if value == True: 
     #todo - get the config 
     return 'True Received' 

    else: 
     # if anything other than True is received, MUST respond with a SOAP fault and HTTP 400 
     raise Fault(faultcode="Client.", faultstring="Value must be True") 
     # raise error.InvalidInputError("problem", "problem") 

阅读一些文件(http://spyne.io/docs/2.10/modules/spyne/model/fault.html#Fault)的,我将其解释为在faultcode必须是字符串从客户端开始,它将返回400错误。 (我知道如果 - 否则是坏的,即时只是试图得到一个概念证明工作之前,我写代码正常)

我想我需要继承故障,而不是只提高它,但不能提高我的头它。我跳入代码/协议/ SOAP/soap11,只见那fault_to_http_reponse_code只是返回HTTP提前

回答

0

我放弃了在子类中的方法500

谢谢你,相反,我刚刚更新的soap11的fault_to_http_reponse_code功能。 PY。它是一个总体补丁,但它为我想要的工作做好了工作。

def fault_to_http_response_code(self, fault): 
    from spyne.const.http import HTTP_400, HTTP_401, HTTP_404, HTTP_405, HTTP_413, HTTP_500 
    from spyne.error import Fault, InternalError, ResourceNotFoundError, RequestTooLongError, RequestNotAllowed, InvalidCredentialsError 
    if isinstance(fault, RequestTooLongError): 
     return HTTP_413 
    if isinstance(fault, ResourceNotFoundError): 
     return HTTP_404 
    if isinstance(fault, RequestNotAllowed): 
     return HTTP_405 
    if isinstance(fault, InvalidCredentialsError): 
     return HTTP_401 
    if isinstance(fault, Fault) and (fault.faultcode.startswith('Client.') 
              or fault.faultcode == 'Client'): 
     return HTTP_400 

    return HTTP_500 

然后我只是养正断层,与客户端开始在faultcode。

raise Fault(faultcode="Client.", faultstring="value must be True) 

有些人会用适当的方法切入。