2017-06-21 88 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) 

有些人會用適當的方法切入。