def test_preimport(): from types import ModuleType from dummy_replacements import ReplacementRequest ms = MetaServices() class ModuleWatcher(ModuleType): def __init__(self, modname): self.modname = modname def __getattribute__(self, name): modname = ModuleType.__getattribute__(self, 'modname') logging.info(".......... fetching attr %r of module %r" % (name, modname)) if name == 'Request': return ReplacementRequest else: return ModuleType.__getattribute__(self, name) ms.subclass_module('dummy_request', ModuleWatcher) from dummy_webapp import HTTPServer hs = HTTPServer() assert isinstance(hs.handle_request(), ReplacementRequest)
def test_postimport(): from dummy_replacements import ReplacementRequest ms = MetaServices() def adjust(mod): # function to modify the target module before it is used mod.Request = ReplacementRequest ms.call_after_import_of('dummy_webapp', adjust) from dummy_webapp import HTTPServer hs = HTTPServer() assert isinstance(hs.handle_request(), ReplacementRequest)