return __file__
"""
+reload_src = test_src+"""\
+reloaded = True
+"""
+
test_co = compile(test_src, "<???>", "exec")
+reload_co = compile(reload_src, "<???>", "exec")
+
test_path = "!!!_test_!!!"
"hooktestpackage": (True, test_co),
"hooktestpackage.sub": (True, test_co),
"hooktestpackage.sub.subber": (False, test_co),
+ "reloadmodule": (False, test_co),
}
def __init__(self, path=test_path):
def load_module(self, fullname):
ispkg, code = self.modules[fullname]
- mod = imp.new_module(fullname)
- sys.modules[fullname] = mod
+ mod = sys.modules.setdefault(fullname,imp.new_module(fullname))
mod.__file__ = "<%s>" % self.__class__.__name__
mod.__loader__ = self
if ispkg:
self.assertEqual(hooktestpackage.sub.__loader__, importer)
self.assertEqual(hooktestpackage.sub.subber.__loader__, importer)
+ TestImporter.modules['reloadmodule'] = (False, test_co)
+ import reloadmodule
+ self.failIf(hasattr(reloadmodule,'reloaded'))
+
+ TestImporter.modules['reloadmodule'] = (False, reload_co)
+ reload(reloadmodule)
+ self.failUnless(hasattr(reloadmodule,'reloaded'))
+
def testMetaPath(self):
i = MetaImporter()
sys.meta_path.append(i)
PyImport_ReloadModule(PyObject *m)
{
PyObject *modules = PyImport_GetModuleDict();
- PyObject *path = NULL;
+ PyObject *path = NULL, *loader = NULL;
char *name, *subname;
char buf[MAXPATHLEN+1];
struct filedescr *fdp;
PyErr_Clear();
}
buf[0] = '\0';
- fdp = find_module(name, subname, path, buf, MAXPATHLEN+1, &fp, NULL);
+ fdp = find_module(name, subname, path, buf, MAXPATHLEN+1, &fp, &loader);
Py_XDECREF(path);
- if (fdp == NULL)
+
+ if (fdp == NULL) {
+ Py_XDECREF(loader);
return NULL;
- newm = load_module(name, fp, buf, fdp->type, NULL);
+ }
+
+ newm = load_module(name, fp, buf, fdp->type, loader);
+ Py_XDECREF(loader);
+
if (fp)
fclose(fp);
if (newm == NULL) {