class Stub(object):
"""
A simple class to restore/replace objects.
It's not complete, but it's enough for many cases.
"""
def __init__(self):
self.funcs = {}
def replace(self, module, function_name, new_function):
self.funcs.setdefault(module, {})[function_name] = getattr(module, function_name)
setattr(module, function_name, new_function)
def restore(self, module, function_name):
assert getattr(module, function_name)
setattr(module, function_name, self.funcs[module][function_name])
class MyClass(object):
def hello(self, msg):
print msg
def new_hello(self, msg):
print msg + " (by replaced method)"
obj = MyClass()
obj.hello('Testing rocks!')
mystub = stub.Stub()
mystub.replace(MyClass, 'hello', new_hello)
obj.hello('Testing rocks!')
mystub.restore(MyClass, 'hello')
obj.hello('Testing rocks!')