如何monkeypatch suds.transport.Reply?

时间:2013-06-19 06:54:56

标签: python soap suds monkeypatching

我一直在尝试修改suds.transport的Reply类。

我尝试了以下方法:

import suds.transport
old_reply = suds.transport.Reply

class Reply2:
    """
    A transport reply
    @ivar code: The http code returned.
    @type code: int
    @ivar message: The message to be sent in a POST request.
    @type message: str
    @ivar headers: The http headers to be used for the request.
    @type headers: dict
    """

    def __init__(self, code, headers, message):
        """
        @param code: The http code returned.
        @type code: int
        @param headers: The http returned headers.
        @type headers: dict
        @param message: The (optional) reply message received.
        @type message: str
        """
        print 'hello, i patched the class'
        self.code = code
        self.headers = headers
        self.message = message

    def __str__(self):
        s = []
        s.append('CODE: %s' % self.code)
        s.append('HEADERS: %s' % self.headers)
        s.append('MESSAGE:')
        s.append(self.message)
        return '\n'.join(s)

suds.transport.Reply = Reply2

执行client请求时(与通常使用Suds一样),使用默认的回复而不是修补的回复。

这种方法失败的原因是什么?

注意:似乎单独修补__init__ 可以提供更好的结果。但我需要修改类中的更多行为。 最后,我试图覆盖回复以获取传入的附件,例如询问on SO和解决方案here

1 个答案:

答案 0 :(得分:1)

suds.transport.http模块使用以下行导入Reply

from suds.transport import *

并且之前你可以修补它。您还需要更新该引用:

import suds.transport.http
suds.transport.http.Reply = Reply2