NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #1199 most downloaded on PyPI
Backports and enhancements for the contextlib module
Last release 5 years ago
no release in 18 months
Ships unpredictably
gaps range from 2 weeks to 3.7 years
Nearly every release is documented
notes for 14 of 14 stable releases
Nothing withdrawn
no release was ever pulled
15 years old
14 releases · first in 2011
Module API aligned with Python 3.10 (including all asynchronous APIs)
License update: due to the inclusion of type hints from the typeshed project, the contextlib2 project is now under a combination of the Python Software License (existing license) and the Apache License 2.0 (typeshed license)
Switched to calendar based versioning using a "year"-"month"-"serial" scheme, rather than continuing with pre-1.0 semantic versioning
Due to the inclusion of asynchronous features from Python 3.7+, the minimum supported Python version is now Python 3.6 (#29)
Synchronised with the Python 3.10 version of contextlib (#12), making the following new features available on Python 3.6+:
asyncontextmanager (added in Python 3.7, enhanced in Python 3.10)
aclosing (added in Python 3.10)
AbstractAsyncContextManager (added in Python 3.7)
AsyncContextDecorator (added in Python 3.10)
AsyncExitStack (added in Python 3.7)
async support in nullcontext (Python 3.10)
contextlib2 now includes an adapted copy of the contextlib type hints from typeshed (the adaptation removes the Python version dependencies from the API definition) (#33)
to incorporate the type hints stub file and the py.typed marker file, contextlib2 is now installed as a package rather than as a module
Updates to the default compatibility testing matrix:
Added: CPython 3.9, CPython 3.10
Dropped: CPython 2.7, CPython 3.5, PyPy2
One column per quarter.
Post-release NEWS fixup
Post-release NEWS fixup
Issue #24: Correctly update NEWS.rst for the 0.6.0 release.
Issue #16 __: Backport AbstractContextManager from Python 3.6 and nullcontext from Python 3.7 (patch by John Vandenberg)
Issue #16: Backport AbstractContextManager from Python 3.6 and nullcontext from Python 3.7 (patch by John Vandenberg)
Issue #13 __: setup.py now falls back to plain distutils if setuptools is not available (patch by Allan Harwood)
Issue #13: setup.py now falls back to plain distutils if setuptools is not available (patch by Allan Harwood)
Updates to the default compatibility testing matrix:
Added: PyPy3, CPython 3.6 (maintenance), CPython 3.7 (development)
Dropped: CPython 3.3
Thanks to the welcome efforts of Jannis Leidel, contextlib2 is now a Jazzband project! This means that I (Alyssa Coghlan) am no longer a single point
Thanks to the welcome efforts of Jannis Leidel, contextlib2 is now a [Jazzband](https://jazzband.co/) project! This means that I (Alyssa Coghlan) am no longer a single point of failure for backports of future contextlib updates to earlier Python versions.
Issue #7: Backported fix for CPython issue #27122, preventing a potential infinite loop on Python 3.5 when handling RuntimeError (CPython updates by Gregory P. Smith & Serhiy Storchaka)
Updates for 0.5.3 release
Updates for 0.5.3 release
ExitStack now correctly handles context managers implemented as old-style classes in Python 2.x (such as codecs.StreamReader and codecs.StreamWriter)
setup.py has been migrated to setuptools and configured to emit a universal wheel file by default
development migrated from BitBucket to GitHub
development migrated from BitBucket to GitHub
redirect_stream, redirect_stdout, redirect_stderr and suppress now explicitly inherit from object, ensuring compatibility with ExitStack when run under Python 2.x (patch contributed by Devin Jeanpierre).
MANIFEST.in is now included in the published sdist, ensuring the archive can be precisely recreated even without access to the original source repo (patch contributed by Guy Rozendorn)
Python 2.6 compatilibity restored (patch contributed by Armin Ronacher)
Python 2.6 compatilibity restored (patch contributed by Armin Ronacher)
README converted back to reStructured Text formatting
Rebase on Python 3.5 and prep 0.5.0 release
Rebase on Python 3.5 and prep 0.5.0 release
Updated to include all features from the Python 3.4 and 3.5 releases of contextlib (also includes some ExitStack enhancements made following the integration into the standard library for Python 3.3)
The legacy ContextStack and ContextDecorator.refresh_cm APIs are no longer documented and emit DeprecationWarning when used
Python 2.6, 3.2 and 3.3 have been dropped from compatibility testing
tox is now supported for local version compatibility testing (patch by Marc Abramowitz)
(BitBucket) Issue #8: Replace ContextStack with ExitStack (old ContextStack API retained for backwards compatibility)
(BitBucket) Issue #8: Replace ContextStack with ExitStack (old ContextStack API retained for backwards compatibility)
Fall back to unittest2 if unittest is missing required functionality
(BitBucket) Issue #7: Add MANIFEST.in so PyPI package contains all relevant files (patch contributed by Doug Latornell)
(BitBucket) Issue #7: Add MANIFEST.in so PyPI package contains all relevant files (patch contributed by Doug Latornell)
(BitBucket) Issue #5: ContextStack.register no longer pointlessly returns the wrapped function
(BitBucket) Issue #5: ContextStack.register no longer pointlessly returns the wrapped function
(BitBucket) Issue #2: Add examples and recipes section to docs
(BitBucket) Issue #3: ContextStack.register_exit() now accepts objects with __exit__ attributes in addition to accepting exit callbacks directly
(BitBucket) Issue #1: Add ContextStack.preserve() to move all registered callbacks to a new ContextStack object
Wrapped callbacks now expose __wrapped__ (for direct callbacks) or __self__ (for context manager methods) attributes to aid in introspection
Moved version number to a VERSION.txt file (read by both docs and setup.py)
Added NEWS.rst (and incorporated into documentation)
Renamed CleanupManager to ContextStack (hopefully before anyone started using the module for anything, since I didn't alias the old name at all)
Renamed CleanupManager to ContextStack (hopefully before anyone started using the module for anything, since I didn't alias the old name at all)
Initial release as a backport module
Initial release as a backport module
Added CleanupManager (based on a Python feature request)
Added ContextDecorator.refresh_cm() (based on a Python tracker issue)
Your coding agent can read these notes before it upgrades. Set up the MCP server →