[Python-3000-checkins] r59894 - in python/branches/py3k-importhook: Lib/test/test_imp.py Python/import.c

christian.heimes python-3000-checkins at python.org
Thu Jan 10 20:48:40 CET 2008


Author: christian.heimes
Date: Thu Jan 10 20:48:40 2008
New Revision: 59894

Modified:
   python/branches/py3k-importhook/Lib/test/test_imp.py
   python/branches/py3k-importhook/Python/import.c
Log:
Moved the notification to import_submodule()
import a.b.c now calls the callbacks in the right order (first a, then a.b, at last a.b.c)

Modified: python/branches/py3k-importhook/Lib/test/test_imp.py
==============================================================================
--- python/branches/py3k-importhook/Lib/test/test_imp.py	(original)
+++ python/branches/py3k-importhook/Lib/test/test_imp.py	Thu Jan 10 20:48:40 2008
@@ -92,6 +92,15 @@
                     f.write('\n')
     return root
 
+hier = [
+    ("pih_test", None),
+    ("pih_test __init__", "package = 0"),
+    ("pih_test a", None),
+    ("pih_test a __init__", "package = 1"),
+    ("pih_test a b", None),
+    ("pih_test a b __init__", "package = 2"),
+]
+
 class CallBack:
     def __init__(self):
         self.mods = {}
@@ -171,14 +180,6 @@
         imp.notify_module_loaded(mod)
 
     def test_hook_hirarchie(self):
-        hier = [
-            ("pih_test", None),
-            ("pih_test __init__", "package = 0"),
-            ("pih_test a", None),
-            ("pih_test a __init__", "package = 1"),
-            ("pih_test a b", None),
-            ("pih_test a b __init__", "package = 2"),
-        ]
         self.tmpdir = mkhier(hier)
         callback = CallBack()
         imp.register_post_import_hook(callback, "pih_test")
@@ -198,6 +199,23 @@
         self.assertEqual(callback.names,
                          ["pih_test", "pih_test.a", "pih_test.a.b"])
 
+    def test_hook_hirarchie_recursive(self):
+        self.tmpdir = mkhier(hier)
+        callback = CallBack()
+        imp.register_post_import_hook(callback, "pih_test")
+        imp.register_post_import_hook(callback, "pih_test.a")
+        imp.register_post_import_hook(callback, "pih_test.a.b")
+
+        import pih_test.a.b
+        self.assertEqual(callback.names,
+                         ["pih_test", "pih_test.a", "pih_test.a.b"])
+        import pih_test
+        self.assertEqual(callback.names,
+                         ["pih_test", "pih_test.a", "pih_test.a.b"])
+        import pih_test.a
+        self.assertEqual(callback.names,
+                         ["pih_test", "pih_test.a", "pih_test.a.b"])
+
 
 def test_main():
     test_support.run_unittest(

Modified: python/branches/py3k-importhook/Python/import.c
==============================================================================
--- python/branches/py3k-importhook/Python/import.c	(original)
+++ python/branches/py3k-importhook/Python/import.c	Thu Jan 10 20:48:40 2008
@@ -2286,7 +2286,7 @@
 	PyObject *result;
 	lock_import();
 	result = import_module_level(name, globals, locals, fromlist, level);
-	result = PyImport_NotifyModuleLoaded(result);
+	/* result = PyImport_NotifyModuleLoaded(result); */
 	if (unlock_import() < 0) {
 		Py_XDECREF(result);
 		PyErr_SetString(PyExc_RuntimeError,
@@ -2697,6 +2697,8 @@
 			Py_XDECREF(m);
 			m = NULL;
 		}
+		/* notify that the module was loaded */
+		m = PyImport_NotifyModuleLoaded(m);
 	}
 
 	return m;


More information about the Python-3000-checkins mailing list