]> granicus.if.org Git - python/commitdiff
Fix contextlib not copying function attributes
authorPhillip J. Eby <pje@telecommunity.com>
Tue, 28 Mar 2006 00:07:24 +0000 (00:07 +0000)
committerPhillip J. Eby <pje@telecommunity.com>
Tue, 28 Mar 2006 00:07:24 +0000 (00:07 +0000)
Lib/contextlib.py
Lib/test/test_contextlib.py

index d329087c974e6b25a67374a2b424d73d0b6f8b90..9c00ef0777dab262d2560d5ee421157d25f34ce3 100644 (file)
@@ -78,6 +78,7 @@ def contextmanager(func):
     try:
         helper.__name__ = func.__name__
         helper.__doc__ = func.__doc__
+        helper.__dict__ = func.__dict__
     except:
         pass
     return helper
index 7d7f8d281c34908955ca2f01e1a044274f053db1..cd8895e873a60c3b0b2cf45704b5ee3a42efa480 100644 (file)
@@ -84,6 +84,21 @@ class ContextManagerTestCase(unittest.TestCase):
             raise ZeroDivisionError(999)
         self.assertEqual(state, [1, 42, 999])
 
+    def test_contextmanager_attribs(self):
+        def attribs(**kw):
+            def decorate(func):
+                for k,v in kw.items():
+                    setattr(func,k,v)
+                return func
+            return decorate
+        @contextmanager
+        @attribs(foo='bar')
+        def baz(spam):
+            """Whee!"""
+        self.assertEqual(baz.__name__,'baz')
+        self.assertEqual(baz.foo, 'bar')
+        self.assertEqual(baz.__doc__, "Whee!")
+
 class NestedTestCase(unittest.TestCase):
 
     # XXX This needs more work