如何使用spyne

时间:2016-07-05 08:22:18

标签: python web-services wcf python-decorators spyne

我遇到多个spyne装饰器的问题。我想在类中为每个方法添加通用try / except装饰器。我的代码如下所示:

def try_except(fn):
       def wrapped(*args, **kwargs):
           try:
               return fn(*args, **kwargs)
           except Exception:
               do_sth()
   return wrapped

class A(ServiceBase):

@rpc(Unicode, Integer, _returns=[Boolean, Integer], _out_variable_names=["FooResult", "bar"])
@try_except
def Foo(self, foo, bar):
    do_sth()
    return True, 0

使用@try_except我得到的参数数量错误,我做错了什么?

1 个答案:

答案 0 :(得分:1)

我不推荐装饰师。不是因为它们不受支持,而是因为它们不是很强大而且也有神秘的行为。

对于异常处理,您可以覆盖项目中类的call_wrapperApplication的{​​{1}}函数,并使用它而不是库存Spyne类。您应该将{try / except块围绕ServiceBase来电。

请参阅ServiceBase.call_wrapperApplication.call_wrapper的API文档。

你不喜欢这样做吗?您可以向服务类或应用程序添加事件处理程序。 events example可以帮助您入门。

您还想使用装饰器吗?见this FAQ entry。引用相关位:

super()
     

请注意,装饰者的位置很重要。将它放在@srpc之前会使它在服务初始化时运行一次。将它放在后面将使它在每次调用方法时运行,而不是在初始化时运行。

再次,不要使用装饰者!!

你被警告过:)