diff --git a/Lib/contextlib.py b/Lib/contextlib.py index d329087c974..9c00ef0777d 100644 --- a/Lib/contextlib.py +++ b/Lib/contextlib.py @@ -78,6 +78,7 @@ def helper(*args, **kwds): 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 7d7f8d281c3..cd8895e873a 100644 --- a/Lib/test/test_contextlib.py +++ b/Lib/test/test_contextlib.py @@ -84,6 +84,21 @@ def woohoo(): 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