[pypy-svn] r70089 - in pypy/branch/import-builtin/pypy/module/imp: . test
afa at codespeak.net
afa at codespeak.net
Mon Dec 14 10:56:36 CET 2009
Author: afa
Date: Mon Dec 14 10:56:35 2009
New Revision: 70089
Modified:
pypy/branch/import-builtin/pypy/module/imp/importing.py
pypy/branch/import-builtin/pypy/module/imp/test/test_import.py
Log:
Add a test + fix for the reload() function
Modified: pypy/branch/import-builtin/pypy/module/imp/importing.py
==============================================================================
--- pypy/branch/import-builtin/pypy/module/imp/importing.py (original)
+++ pypy/branch/import-builtin/pypy/module/imp/importing.py Mon Dec 14 10:56:35 2009
@@ -326,7 +326,7 @@
if pkgdir is not None:
space.setattr(w_mod, w('__path__'), space.newlist([w(pkgdir)]))
-def load_module(space, w_modulename, find_info, ispkg=False):
+def load_module(space, w_modulename, find_info, reuse=False):
if find_info is None:
return
if find_info.w_loader:
@@ -336,7 +336,7 @@
return space.getbuiltinmodule(find_info.filename)
if find_info.modtype in (PY_SOURCE, PY_COMPILED, PKG_DIRECTORY):
- if ispkg:
+ if reuse:
w_mod = space.getitem(space.sys.get('modules'), w_modulename)
else:
w_mod = space.wrap(Module(space, w_modulename))
@@ -364,7 +364,10 @@
w_path, use_loader=False)
if find_info is None:
return w_mod
- load_module(space, w_modulename, find_info, ispkg=True)
+ try:
+ load_module(space, w_modulename, find_info, reuse=True)
+ finally:
+ find_info.stream.close()
# fetch the module again, in case of "substitution"
w_mod = check_sys_modules(space, w_modulename)
return w_mod
@@ -442,7 +445,11 @@
msg = "No module named %s" % modulename
raise OperationError(space.w_ImportError, space.wrap(msg))
- return load_module(space, w_modulename, find_info)
+ try:
+ return load_module(space, w_modulename, find_info, reuse=True)
+ finally:
+ find_info.stream.close()
+
# __________________________________________________________________
#
Modified: pypy/branch/import-builtin/pypy/module/imp/test/test_import.py
==============================================================================
--- pypy/branch/import-builtin/pypy/module/imp/test/test_import.py (original)
+++ pypy/branch/import-builtin/pypy/module/imp/test/test_import.py Mon Dec 14 10:56:35 2009
@@ -34,6 +34,7 @@
a = "imamodule = 1\ninpackage = 0",
b = "imamodule = 1\ninpackage = 0",
ambig = "imamodule = 1",
+ test_reload = "def test():\n raise ValueError\n",
)
root.ensure("notapackage", dir=1) # empty, no __init__.py
setuppkg("pkg",
@@ -383,6 +384,34 @@
assert mod.b == 16
assert mod.c == "foo\nbar"
+ def test_reload(self):
+ import test_reload
+ try:
+ test_reload.test()
+ except ValueError:
+ pass
+
+ # If this test runs too quickly, test_reload.py's mtime
+ # attribute will remain unchanged even if the file is rewritten.
+ # Consequently, the file would not reload. So, added a sleep()
+ # delay to assure that a new, distinct timestamp is written.
+ import time
+ time.sleep(1)
+
+ f = open(test_reload.__file__, "w")
+ f.write("def test():\n raise NotImplementedError\n")
+ f.close()
+ reload(test_reload)
+ try:
+ test_reload.test()
+ except NotImplementedError:
+ pass
+
+ # Ensure that the file is closed
+ # (on windows at least)
+ import os
+ os.unlink(test_reload.__file__)
+
def _getlong(data):
x = marshal.dumps(data)
return x[-4:]
More information about the Pypy-commit
mailing list