# HG changeset patch # User Sylvain Thénault # Date 1276617626 -7200 # Node ID 487ab6ac90cc932b1f521e17f547c005538b15a6 # Parent d6ac0cd30fde89ab1967051a13ce8247ecd5f981 [auto-reload] we should never call load_module with use_sys=False, that may lead to inconsistency with module interdependancy (eg module get imported by another one, then is reimported by the vreg to load its appobjects. Cleanup of sys.modules done before reloading should be enough. diff -r d6ac0cd30fde -r 487ab6ac90cc cwvreg.py --- a/cwvreg.py Mon Jun 14 17:56:10 2010 +0200 +++ b/cwvreg.py Tue Jun 15 18:00:26 2010 +0200 @@ -521,7 +521,7 @@ cpath = cfg.build_vregistry_cube_path([cfg.cube_dir(cube)]) cleanup_sys_modules(cpath) self.reset() - self.register_objects(path, force_reload) + self.register_objects(path) CW_EVENT_MANAGER.emit('after-registry-reload') def _set_schema(self, schema): @@ -566,10 +566,11 @@ if ifaces: self._needs_iface[obj] = ifaces - def register_objects(self, path, force_reload=False): - """overriden to remove objects requiring a missing interface""" + def register_objects(self, path): + """overriden to give cubicweb's extrapath (eg cubes package's __path__) + """ super(CubicWebVRegistry, self).register_objects( - path, force_reload, self.config.extrapath) + path, self.config.extrapath) def initialization_completed(self): """cw specific code once vreg initialization is completed: diff -r d6ac0cd30fde -r 487ab6ac90cc vregistry.py --- a/vregistry.py Mon Jun 14 17:56:10 2010 +0200 +++ b/vregistry.py Tue Jun 15 18:00:26 2010 +0200 @@ -413,11 +413,11 @@ self._loadedmods = {} return filemods - def register_objects(self, path, force_reload=False, extrapath=None): + def register_objects(self, path, extrapath=None): # load views from each directory in the instance's path filemods = self.init_registration(path, extrapath) for filepath, modname in filemods: - self.load_file(filepath, modname, force_reload) + self.load_file(filepath, modname) self.initialization_completed() def initialization_completed(self): @@ -455,7 +455,7 @@ return True return False - def load_file(self, filepath, modname, force_reload=False): + def load_file(self, filepath, modname): """load app objects from a python file""" from logilab.common.modutils import load_module_from_name if modname in self._loadedmods: @@ -472,7 +472,7 @@ # module self._lastmodifs[filepath] = mdate # load the module - module = load_module_from_name(modname, use_sys=not force_reload) + module = load_module_from_name(modname) self.load_module(module) def load_module(self, module):