2017-06-21 7 views
0

私はSpyne Faults(http://spyne.io/docs/2.10/manual/03_types.html)に関する情報を読んだが、400 ReturnコードでFaultを正しく発生させることはできない。私は適切に形成障害応答を持っていますが、私はドキュメント(http://spyne.io/docs/2.10/modules/spyne/model/fault.html#Fault)の一部を読んで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") 

を返すように要求していたときに500 HTTP戻りコードで、私はのFaultCodeとしてそれを解釈していますことでなければなりませんClientで始まる文字列で、400エラーが返されます。 (私が知っているのは、他の人が悪い、私がコードを正しく書く前に概念の証明を取得しようとしていることです)

私は障害をサブクラス化する必要があると思います。それ。私は、コード/プロトコル/石鹸/ SOAP11に潜っとfault_to_http_reponse_codeは単に

おかげで事前

答えて

0

に私が代わりに私はちょうどSOAP11でfault_to_http_reponse_code機能を更新し、サブクラスのアプローチをあきらめたHTTP 500を返すことがわかりました。 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 

次に、クライアントで始まるフォルトコードで、通常のフォールトを上げるだけです。

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

うまくいけば、誰かがこれに適切なアプローチでチップを作ります。

関連する問題