【问题标题】:Spyne Fault - HTTP Return CodesSpyne 故障 - HTTP 返回代码
【发布时间】:2017-06-21 10:53:56
【问题描述】:

我已阅读有关 Spyne 故障 (http://spyne.io/docs/2.10/manual/03_types.html) 的信息,但无法通过 400 返回代码正确地引发故障。我的故障响应正确形成,但是当我需要返回 400 时,返回代码为 500。

@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 开头的字符串,它将返回 400 错误。 (我知道 if-else 不好,我只是想在正确编写代码之前获得一个概念证明)

我认为我需要对错误进行子类化,而不是仅仅提出它,但我无法理解它。我深入研究了代码 /protocol/soap/soap11,发现 fault_to_http_reponse_code 只返回 HTTP 500。

提前致谢

【问题讨论】:

    标签: python http exception spyne


    【解决方案1】:

    我放弃了子类方法,而是只更新了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)
    

    希望有人能以适当的方式解决这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多