def new_module(self, source_code=None): loader = TestingImporter() if source_code is not None: loader.source_code = source_code spec = util.spec_from_loader(TestingImporter.module_name, util.LazyLoader(loader)) module = spec.loader.create_module(spec) module.__spec__ = spec module.__loader__ = spec.loader spec.loader.exec_module(module) # Module is now lazy. self.assertIsNone(loader.loaded) return module
def _lazy_load(fullname): ''' Lazy loading for simulation. From: https://stackoverflow.com/a/51126745/5962321 ''' try: return sys.modules[fullname] except KeyError: spec = imputil.find_spec(fullname) module = imputil.module_from_spec(spec) loader = imputil.LazyLoader(spec.loader) # setup module and insert into sys.modules loader.exec_module(module) return module
def test_init(self): with self.assertRaises(TypeError): # Classes that don't define exec_module() trigger TypeError. util.LazyLoader(object)
def find_spec(self, name, path, target=None): if name != self.module_name: return None return util.spec_from_loader(name, util.LazyLoader(self))
def test_init(self): with self.assertRaises(TypeError): util.LazyLoader(object)