Fix reload() for package submodules.
authorGuido van Rossum <guido@python.org>
Sat, 6 Sep 1997 19:41:09 +0000 (19:41 +0000)
committerGuido van Rossum <guido@python.org>
Sat, 6 Sep 1997 19:41:09 +0000 (19:41 +0000)
Python/import.c

index a581c4f75f6881b6d3612b0c8526c99eeb56d9f9..d62815eabe38da93db6503c2de1b9abeef4c5ea4 100644 (file)
@@ -1306,7 +1306,8 @@ PyImport_ReloadModule(m)
        PyObject *m;
 {
        PyObject *modules = PyImport_GetModuleDict();
-       char *name;
+       PyObject *path = NULL;
+       char *name, *subname;
        char buf[MAXPATHLEN+1];
        struct filedescr *fdp;
        FILE *fp = NULL;
@@ -1325,8 +1326,29 @@ PyImport_ReloadModule(m)
                             name);
                return NULL;
        }
+       subname = strrchr(name, '.');
+       if (subname == NULL)
+               subname = name;
+       else {
+               PyObject *parentname, *parent;
+               parentname = PyString_FromStringAndSize(name, (subname-name));
+               if (parentname == NULL)
+                       return NULL;
+               parent = PyDict_GetItem(modules, parentname);
+               if (parent == NULL) {
+                       PyErr_Format(PyExc_ImportError,
+                           "reload(): parent %.200s not in sys.modules",
+                           name);
+                       return NULL;
+               }
+               subname++;
+               path = PyObject_GetAttrString(parent, "__path__");
+               if (path == NULL)
+                       PyErr_Clear();
+       }
        buf[0] = '\0';
-       fdp = find_module(name, (PyObject *)NULL, buf, MAXPATHLEN+1, &fp);
+       fdp = find_module(subname, path, buf, MAXPATHLEN+1, &fp);
+       Py_XDECREF(path);
        if (fdp == NULL)
                return NULL;
        m = load_module(name, fp, buf, fdp->type);