From: Phillip J. Eby Date: Tue, 28 Mar 2006 00:07:24 +0000 (+0000) Subject: Fix contextlib not copying function attributes X-Git-Tag: v2.5a0~58 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=35fd142435a5123d3ce740d14068034dab9ee5ec;p=python Fix contextlib not copying function attributes --- diff --git a/Lib/contextlib.py b/Lib/contextlib.py index d329087c97..9c00ef0777 100644 --- a/Lib/contextlib.py +++ b/Lib/contextlib.py @@ -78,6 +78,7 @@ def contextmanager(func): try: helper.__name__ = func.__name__ helper.__doc__ = func.__doc__ + helper.__dict__ = func.__dict__ except: pass return helper diff --git a/Lib/test/test_contextlib.py b/Lib/test/test_contextlib.py index 7d7f8d281c..cd8895e873 100644 --- a/Lib/test/test_contextlib.py +++ b/Lib/test/test_contextlib.py @@ -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