[Python-3000-checkins] r60016 - in python/branches/py3k-importhook: Doc/library/imputil.rst Lib/imputil.py Lib/test/test_imp.py

christian.heimes python-3000-checkins at python.org
Thu Jan 17 08:49:46 CET 2008


Author: christian.heimes
Date: Thu Jan 17 08:49:45 2008
New Revision: 60016

Modified:
   python/branches/py3k-importhook/Doc/library/imputil.rst
   python/branches/py3k-importhook/Lib/imputil.py
   python/branches/py3k-importhook/Lib/test/test_imp.py
Log:
Implemented when_imported decorator. I've moved the decorator to imputils. Implementing the decorator in C is too complex and time consuming for a rather simple task.

Modified: python/branches/py3k-importhook/Doc/library/imputil.rst
==============================================================================
--- python/branches/py3k-importhook/Doc/library/imputil.rst	(original)
+++ python/branches/py3k-importhook/Doc/library/imputil.rst	Thu Jan 17 08:49:45 2008
@@ -14,6 +14,17 @@
 approach to custom :keyword:`import` functions.
 
 
+.. function:: when_imported(name)
+
+   When imported decorator for post import hooks. The *when_imported*
+   decorator provides a convenient way to register a post import 
+   callback for a module::
+
+      @when_imported('name')
+      def callback(module):
+          do_something_with_module(module)
+
+
 .. class:: ImportManager([fs_imp])
 
    Manage the import process.

Modified: python/branches/py3k-importhook/Lib/imputil.py
==============================================================================
--- python/branches/py3k-importhook/Lib/imputil.py	(original)
+++ python/branches/py3k-importhook/Lib/imputil.py	Thu Jan 17 08:49:45 2008
@@ -19,10 +19,26 @@
 import struct
 import marshal
 
-__all__ = ["ImportManager","Importer","BuiltinImporter"]
+__all__ = ["ImportManager","Importer","BuiltinImporter", "when_imported"]
 
 _ModuleType = type(sys)         ### doesn't work in JPython...
 
+def when_imported(name):
+    """When imported decorator for callbacks
+
+    @when_imported('name')
+    def callback(module):
+        do_something_with_module(module)
+
+    The callback is called with the module object as argument when the module
+    is loaded. If the module is already loaded the callback is called
+    immediately.
+    """
+    def register(hook):
+        imp.register_post_import_hook(hook, name)
+    return register
+
+
 class ImportManager:
     "Manage the import process."
 

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 17 08:49:45 2008
@@ -1,5 +1,6 @@
 import os
 import imp
+from imputil import when_imported
 import sys
 import thread
 import unittest
@@ -7,13 +8,6 @@
 import tempfile
 from test import test_support
 
-
-def when_imported(name):
-    def register(hook):
-        imp.register_post_import_hook(hook, name)
-    return register
-
-
 class LockTests(unittest.TestCase):
 
     """Very basic test of import lock functions."""


More information about the Python-3000-checkins mailing list