[Python-checkins] r72995 - in python/branches/py3k: Doc/library/contextlib.rst Doc/whatsnew/3.1.rst Lib/contextlib.py Lib/test/test_contextlib.py Misc/NEWS
raymond.hettinger
python-checkins at python.org
Fri May 29 00:20:03 CEST 2009
Author: raymond.hettinger
Date: Fri May 29 00:20:03 2009
New Revision: 72995
Log:
Deprecate contextlib.nested(). The with-statement now provides this functionality directly.
Modified:
python/branches/py3k/Doc/library/contextlib.rst
python/branches/py3k/Doc/whatsnew/3.1.rst
python/branches/py3k/Lib/contextlib.py
python/branches/py3k/Lib/test/test_contextlib.py
python/branches/py3k/Misc/NEWS
Modified: python/branches/py3k/Doc/library/contextlib.rst
==============================================================================
--- python/branches/py3k/Doc/library/contextlib.rst (original)
+++ python/branches/py3k/Doc/library/contextlib.rst Fri May 29 00:20:03 2009
@@ -80,6 +80,8 @@
:meth:`__exit__` methods should avoid raising exceptions, and in particular they
should not re-raise a passed-in exception.
+ .. deprecated:: 3.1
+ The with-statement now supports this functionality directly.
.. function:: closing(thing)
Modified: python/branches/py3k/Doc/whatsnew/3.1.rst
==============================================================================
--- python/branches/py3k/Doc/whatsnew/3.1.rst (original)
+++ python/branches/py3k/Doc/whatsnew/3.1.rst Fri May 29 00:20:03 2009
@@ -164,6 +164,9 @@
... if '<critical>' in line:
... outfile.write(line)
+ With the new syntax, the :func:`contextlib.nested` function is no longer
+ needed and is not deprecated.
+
(Contributed by Georg Brandl and Mattias Brändström;
`appspot issue 53094 <http://codereview.appspot.com/53094>`_.)
Modified: python/branches/py3k/Lib/contextlib.py
==============================================================================
--- python/branches/py3k/Lib/contextlib.py (original)
+++ python/branches/py3k/Lib/contextlib.py Fri May 29 00:20:03 2009
@@ -2,6 +2,7 @@
import sys
from functools import wraps
+from warnings import warn
__all__ = ["contextmanager", "nested", "closing"]
@@ -101,6 +102,8 @@
<body>
"""
+ warn("With-statements now directly support multiple context managers",
+ DeprecationWarning, 2)
exits = []
vars = []
exc = (None, None, None)
Modified: python/branches/py3k/Lib/test/test_contextlib.py
==============================================================================
--- python/branches/py3k/Lib/test/test_contextlib.py (original)
+++ python/branches/py3k/Lib/test/test_contextlib.py Fri May 29 00:20:03 2009
@@ -100,128 +100,6 @@
self.assertEqual(baz.foo, 'bar')
self.assertEqual(baz.__doc__, "Whee!")
-class NestedTestCase(unittest.TestCase):
-
- # XXX This needs more work
-
- def test_nested(self):
- @contextmanager
- def a():
- yield 1
- @contextmanager
- def b():
- yield 2
- @contextmanager
- def c():
- yield 3
- with nested(a(), b(), c()) as (x, y, z):
- self.assertEqual(x, 1)
- self.assertEqual(y, 2)
- self.assertEqual(z, 3)
-
- def test_nested_cleanup(self):
- state = []
- @contextmanager
- def a():
- state.append(1)
- try:
- yield 2
- finally:
- state.append(3)
- @contextmanager
- def b():
- state.append(4)
- try:
- yield 5
- finally:
- state.append(6)
- try:
- with nested(a(), b()) as (x, y):
- state.append(x)
- state.append(y)
- 1/0
- except ZeroDivisionError:
- self.assertEqual(state, [1, 4, 2, 5, 6, 3])
- else:
- self.fail("Didn't raise ZeroDivisionError")
-
- def test_nested_right_exception(self):
- state = []
- @contextmanager
- def a():
- yield 1
- class b(object):
- def __enter__(self):
- return 2
- def __exit__(self, *exc_info):
- try:
- raise Exception()
- except:
- pass
- try:
- with nested(a(), b()) as (x, y):
- 1/0
- except ZeroDivisionError:
- self.assertEqual((x, y), (1, 2))
- except Exception:
- self.fail("Reraised wrong exception")
- else:
- self.fail("Didn't raise ZeroDivisionError")
-
- def test_nested_b_swallows(self):
- @contextmanager
- def a():
- yield
- @contextmanager
- def b():
- try:
- yield
- except:
- # Swallow the exception
- pass
- try:
- with nested(a(), b()):
- 1/0
- except ZeroDivisionError:
- self.fail("Didn't swallow ZeroDivisionError")
-
- def test_nested_break(self):
- @contextmanager
- def a():
- yield
- state = 0
- while True:
- state += 1
- with nested(a(), a()):
- break
- state += 10
- self.assertEqual(state, 1)
-
- def test_nested_continue(self):
- @contextmanager
- def a():
- yield
- state = 0
- while state < 3:
- state += 1
- with nested(a(), a()):
- continue
- state += 10
- self.assertEqual(state, 3)
-
- def test_nested_return(self):
- @contextmanager
- def a():
- try:
- yield
- except:
- pass
- def foo():
- with nested(a(), a()):
- return 1
- return 10
- self.assertEqual(foo(), 1)
-
class ClosingTestCase(unittest.TestCase):
# XXX This needs more work
Modified: python/branches/py3k/Misc/NEWS
==============================================================================
--- python/branches/py3k/Misc/NEWS (original)
+++ python/branches/py3k/Misc/NEWS Fri May 29 00:20:03 2009
@@ -15,7 +15,8 @@
- Issue #6089: Fixed str.format with certain invalid field specifiers
that would raise SystemError.
-- Added support for multiple context managers in the same with statement.
+- Added support for multiple context managers in the same with-statement.
+ Deprecated contextlib.nested() which is no longer needed.
- Issue #5829: complex("1e500") no longer raises OverflowError. This
makes it consistent with float("1e500") and interpretation of real
More information about the Python-checkins
mailing list