diff --git a/Lib/test/test_imp.py b/Lib/test/test_imp.py index f597728b16b..513ca608841 100644 --- a/Lib/test/test_imp.py +++ b/Lib/test/test_imp.py @@ -37,9 +37,28 @@ class LockTests(unittest.TestCase): self.fail("release_lock() without lock should raise " "RuntimeError") +class ReloadTests(unittest.TestCase): + + """Very basic tests to make sure that imp.reload() operates just like + reload().""" + + def test_source(self): + import os + imp.reload(os) + + def test_extension(self): + import time + imp.reload(time) + + def test_builtin(self): + import marshal + imp.reload(marshal) + + def test_main(): test_support.run_unittest( LockTests, + ReloadTests, ) if __name__ == "__main__": diff --git a/Misc/NEWS b/Misc/NEWS index 87b43970fe4..2a01e0157f0 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -41,6 +41,9 @@ Core and Builtins Library ------- +- Issue #2338: Create imp.reload() to help with transitioning to Python 3.0 as + the reload() built-in has been removed. + - Changed code in the following modules/packages to remove warnings raised while running under the ``-3`` flag: aifc, asyncore, bdb, bsddb, ConfigParser, cookielib, DocXMLRPCServer, email, filecmp, fileinput, inspect, diff --git a/Python/import.c b/Python/import.c index f0ee40a6ce0..fd1315442a6 100644 --- a/Python/import.c +++ b/Python/import.c @@ -3030,12 +3030,24 @@ imp_new_module(PyObject *self, PyObject *args) return PyModule_New(name); } +static PyObject * +imp_reload(PyObject *self, PyObject *v) +{ + return PyImport_ReloadModule(v); +} + + /* Doc strings */ PyDoc_STRVAR(doc_imp, "This module provides the components needed to build your own\n\ __import__ function. Undocumented functions are obsolete."); +PyDoc_STRVAR(doc_reload, +"reload(module) -> module\n\ +\n\ +Reload the module. The module must have been successfully imported before."); + PyDoc_STRVAR(doc_find_module, "find_module(name, [path]) -> (file, filename, (suffix, mode, type))\n\ Search for a module. If path is omitted or None, search for a\n\ @@ -3080,6 +3092,7 @@ Release the interpreter's import lock.\n\ On platforms without threads, this function does nothing."); static PyMethodDef imp_methods[] = { + {"reload", imp_reload, METH_O, doc_reload}, {"find_module", imp_find_module, METH_VARARGS, doc_find_module}, {"get_magic", imp_get_magic, METH_NOARGS, doc_get_magic}, {"get_suffixes", imp_get_suffixes, METH_NOARGS, doc_get_suffixes},