XMLRPC服务器函数包装器

时间:2014-04-07 10:52:06

标签: python wrapper xml-rpc

我正在尝试包装我的xml-rpc服务器(python 2.7) 我正在使用此post

中的代码

这是我的代码:

class XMLRPCWrapperProxy(object):
    def __init__(self, wrapped=None):
        if wrapped is None:
            wrapped = xmlrpclib.ServerProxy('http://xxx.xxx.xxx.xxx:xxxx')
        self.tf = wrapped

    def __getattr__(self, name):
        print "before"
        attr = getattr(self.tf, name)
        print "after"
        return type(self)(attr)

    def __call__(self, *args, **kw):
        return self.tf(*args, **kw)

server_w = XMLRPCWrapperProxy()

server_w.tf.do_function1()
server_w.tf.do_function2(param1)
server_w.tf.do_function3()
server_w.tf.do_function4(param1)

我想wrap do_fuxntion...调用但由于某种原因我看不到打印语句,我想我正在包装self.tf而不是调用方法,任何想法我怎么能扭曲任何方法调用?

2 个答案:

答案 0 :(得分:1)

这可能相当明显,但您无法看到print语句,因为永远不会调用__getattr__方法。如果我理解正确的意图,我怀疑你的电话会遗漏.tf部分。因此它应该是:

# ...
server_w.do_function1()
server_w.do_function2(param1)
server_w.do_function3()
server_w.do_function4(param1)

答案 1 :(得分:1)

如果要包装tf,为什么在测试中调用server_w.tf? 这使得包装毫无意义。

如果您尝试server_w.do_function1(),您会看到print-statements。 我不明白你用type(self)(attr)行试图实现的目标......

我会尝试__getattr__,就像这样:

def __getattr__(self, name):
    print "before"
    attr = getattr(self.tf, name)
    print "after"
    return attr

这应该正确返回包装对象的功能。