]> granicus.if.org Git - python/commitdiff
Create a simple substitute for functools.wraps to use in importlib._bootstrap.
authorBrett Cannon <bcannon@gmail.com>
Sat, 7 Feb 2009 02:13:28 +0000 (02:13 +0000)
committerBrett Cannon <bcannon@gmail.com>
Sat, 7 Feb 2009 02:13:28 +0000 (02:13 +0000)
Lib/importlib/NOTES
Lib/importlib/_bootstrap.py

index e1ec98d19f441dbe9f88d4deccd2c50a530383c9..a9f0c175ae7e05688491524d0c3d8967a92b4a7f 100644 (file)
@@ -1,8 +1,6 @@
 to do
 /////
 
-* Backport a poor-man's functools.wraps.
-
 * Implement PEP 302 protocol for loaders (should just be a matter of testing).
 
     + Built-in.
index 810f793ff186c3639f5d89ee8a5e2aa07703523f..54e2f9de3bce71c77f55cb1d187bb2c8e9acb541 100644 (file)
@@ -90,6 +90,13 @@ class closing:
         self.obj.close()
 
 
+def wrap(new, old):
+    """Simple substitute for functools.wraps."""
+    for replace in ['__module__', '__name__', '__doc__']:
+        setattr(new, replace, getattr(old, replace))
+    new.__dict__.update(old.__dict__)
+
+
 def set___package__(fxn):
     """Set __package__ on the returned module."""
     def wrapper(*args, **kwargs):
@@ -99,6 +106,7 @@ def set___package__(fxn):
             if not hasattr(module, '__path__'):
                 module.__package__ = module.__package__.rpartition('.')[0]
         return module
+    wrap(wrapper, fxn)
     return wrapper
 
 
@@ -213,9 +221,7 @@ def check_name(method):
         if self._name != name:
             raise ImportError("loader cannot handle %s" % name)
         return method(self, name, *args, **kwargs)
-    inner.__name__ = method.__name__
-    inner.__doc__ = method.__doc__
-    inner.__dict__.update(method.__dict__)
+    wrap(inner, method)
     return inner
 
 
@@ -318,6 +324,7 @@ def get_module(fxn):
                     elif hasattr(module, attr):
                         delattr(module, attr)
             raise
+    wrap(decorated, fxn)
     return decorated