Spyne 故障 - HTTP Return 代码
Spyne Fault - HTTP Return Codes
我已阅读有关 Spyne 故障的信息 (http://spyne.io/docs/2.10/manual/03_types.html),但我无法理解使用 400 Return 代码正确引发故障。我有正确形成的故障响应,但是当我需要 return 400.
时使用 500 HTTP return 代码
@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 必须是以 Client 开头的字符串,并且它将 return 出现 400 错误。 (我知道 if-else 不好,我只是想在正确编写代码之前获得概念验证)
我想我需要将故障子类化,而不是仅仅提出它但无法理解它。我深入研究了代码 /protocol/soap/soap11,发现 fault_to_http_reponse_code 只是 returns HTTP 500。
提前致谢
我放弃了子类方法,而是更新了 soap11.py 中的 fault_to_http_reponse_code 函数。这是一个粗糙的补丁,但它可以满足我的需求。
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
那么我只是抛出一个正常故障,故障代码以Client开头。
raise Fault(faultcode="Client.", faultstring="value must be True)
希望有人能用正确的方法来解决这个问题。
我已阅读有关 Spyne 故障的信息 (http://spyne.io/docs/2.10/manual/03_types.html),但我无法理解使用 400 Return 代码正确引发故障。我有正确形成的故障响应,但是当我需要 return 400.
时使用 500 HTTP return 代码@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 必须是以 Client 开头的字符串,并且它将 return 出现 400 错误。 (我知道 if-else 不好,我只是想在正确编写代码之前获得概念验证)
我想我需要将故障子类化,而不是仅仅提出它但无法理解它。我深入研究了代码 /protocol/soap/soap11,发现 fault_to_http_reponse_code 只是 returns HTTP 500。
提前致谢
我放弃了子类方法,而是更新了 soap11.py 中的 fault_to_http_reponse_code 函数。这是一个粗糙的补丁,但它可以满足我的需求。
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
那么我只是抛出一个正常故障,故障代码以Client开头。
raise Fault(faultcode="Client.", faultstring="value must be True)
希望有人能用正确的方法来解决这个问题。