Mercurial > cpython-lru_cache-weakref
diff Python/import.c @ 6285:337054e9d4fa legacy-trunk
Added support for __all__, which should be a list of modules to be
imported when the user says "from package import *".
| author | Guido van Rossum <guido@python.org> |
|---|---|
| date | Mon, 08 Sep 1997 16:07:11 +0000 |
| parents | ce2092714484 |
| children | 0054a3840a75 |
line wrap: on
line diff
--- a/Python/import.c Mon Sep 08 16:06:20 1997 +0000 +++ b/Python/import.c Mon Sep 08 16:07:11 1997 +0000 @@ -1000,7 +1000,7 @@ char **p_name, char *buf, int *p_buflen)); static int mark_miss Py_PROTO((char *name)); static int ensure_fromlist Py_PROTO((PyObject *mod, PyObject *fromlist, - char *buf, int buflen)); + char *buf, int buflen, int recursive)); static PyObject * import_submodule Py_PROTO((PyObject *mod, char *name, char *fullname)); @@ -1054,7 +1054,7 @@ } Py_DECREF(head); - if (!ensure_fromlist(tail, fromlist, buf, buflen)) { + if (!ensure_fromlist(tail, fromlist, buf, buflen, 0)) { Py_DECREF(tail); return NULL; } @@ -1203,11 +1203,12 @@ } static int -ensure_fromlist(mod, fromlist, buf, buflen) +ensure_fromlist(mod, fromlist, buf, buflen, recursive) PyObject *mod; PyObject *fromlist; char *buf; int buflen; + int recursive; { int i; @@ -1231,7 +1232,19 @@ return 0; } if (PyString_AS_STRING(item)[0] == '*') { + PyObject *all; Py_DECREF(item); + /* See if the package defines __all__ */ + if (recursive) + continue; /* Avoid endless recursion */ + all = PyObject_GetAttrString(mod, "__all__"); + if (all == NULL) + PyErr_Clear(); + else { + if (!ensure_fromlist(mod, all, buf, buflen, 1)) + return 0; + Py_DECREF(all); + } continue; } hasit = PyObject_HasAttr(mod, item);
