# HG changeset patch # Parent 04162e06323f369c1468d2009b4d8ba6805a6b0c diff -r 04162e06323f Lib/contextlib.py --- a/Lib/contextlib.py Sun May 31 09:16:13 2015 +0300 +++ b/Lib/contextlib.py Sun May 31 08:20:16 2015 +0000 @@ -34,7 +34,7 @@ class _GeneratorContextManager(ContextDecorator): """Helper for @contextmanager decorator.""" - def __init__(self, func, *args, **kwds): + def __init__(self, func, args, kwds): self.gen = func(*args, **kwds) self.func, self.args, self.kwds = func, args, kwds # Issue 19330: ensure context manager instances have good docstrings @@ -52,7 +52,7 @@ # _GCM instances are one-shot context managers, so the # CM must be recreated each time a decorated function is # called - return self.__class__(self.func, *self.args, **self.kwds) + return self.__class__(self.func, self.args, self.kwds) def __enter__(self): try: @@ -130,7 +130,7 @@ """ @wraps(func) def helper(*args, **kwds): - return _GeneratorContextManager(func, *args, **kwds) + return _GeneratorContextManager(func, args, kwds) return helper diff -r 04162e06323f Lib/test/test_contextlib.py --- a/Lib/test/test_contextlib.py Sun May 31 09:16:13 2015 +0300 +++ b/Lib/test/test_contextlib.py Sun May 31 08:20:16 2015 +0000 @@ -147,6 +147,16 @@ baz = self._create_contextmanager_attribs()(None) self.assertEqual(baz.__doc__, "Whee!") + def test_keywords(self): + # Ensure no keyword arguments are inhibited + state = list() + @contextmanager + def woohoo(self, func, args, kwds): + state.append((self, func, args, kwds)) + yield + with woohoo(self=11, func=22, args=33, kwds=44): + self.assertSequenceEqual(state, ((11, 22, 33, 44),)) + class ClosingTestCase(unittest.TestCase): diff -r 04162e06323f Lib/test/test_with.py --- a/Lib/test/test_with.py Sun May 31 09:16:13 2015 +0300 +++ b/Lib/test/test_with.py Sun May 31 08:20:16 2015 +0000 @@ -11,8 +11,8 @@ class MockContextManager(_GeneratorContextManager): - def __init__(self, func, *args, **kwds): - super().__init__(func, *args, **kwds) + def __init__(self, *args): + super().__init__(*args) self.enter_called = False self.exit_called = False self.exit_args = None @@ -30,7 +30,7 @@ def mock_contextmanager(func): def helper(*args, **kwds): - return MockContextManager(func, *args, **kwds) + return MockContextManager(func, args, kwds) return helper