- To allow the use of positional-only argument syntax, the minimum supported Python version is now Python 3.8.
- Synchronised with the Python 3.12.3 (and 3.13.0) version of contextlib
(#12), making the
following new features available on Python 3.8+:
- :class:`chdir` (added in Python 3.11)
- :func:`suppress` filters the contents of
BaseExceptionGroup
(Python 3.12) - improved handling of :class:`StopIteration` subclasses (Python 3.11)
- The exception thrown by :meth:`ExitStack.enter_context` and
:meth:`AsyncExitStack.enter_async_context` when the given object does not
implement the relevant context management protocol is now version-dependent
(:class:`TypeError` on 3.11+, :class:`AttributeError` on earlier versions).
This provides consistency with the
with
andasync with
behaviour on the corresponding versions. - No longer needed object references are now released more promptly
- Update
mypy stubtest
to work with recent mypy versions (mypy 1.8.0 tested) (#54) - The
dev/mypy.allowlist
file needed for themypy stubtest
step in thetox
test configuration is now included in the published sdist (#53) - Type hints have been updated to include
nullcontext
(3.10 API added in 21.6.0) (#41) - Test suite updated to pass on Python 3.11 and 3.12 (21.6.0 works on these versions, the test suite just failed due to no longer valid assumptions) (#51)
- Updates to the default compatibility testing matrix:
- Added: CPython 3.11, CPython 3.12
- Dropped: CPython 3.6, CPython 3.7
- License update: due to the inclusion of type hints from the
typeshed
project, thecontextlib2
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 thecontextlib
type hints fromtypeshed
(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
- 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 #13:
setup.py
now falls back to plaindistutils
ifsetuptools
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](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)
ExitStack
now correctly handles context managers implemented as old-style classes in Python 2.x (such ascodecs.StreamReader
andcodecs.StreamWriter
)setup.py
has been migrated to setuptools and configured to emit a universal wheel file by default
- development migrated from BitBucket to GitHub
redirect_stream
,redirect_stdout
,redirect_stderr
andsuppress
now explicitly inherit fromobject
, ensuring compatibility withExitStack
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)
- README converted back to reStructured Text formatting
- 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
andContextDecorator.refresh_cm
APIs are no longer documented and emitDeprecationWarning
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)
- 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 #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)
- Initial release as a backport module
- Added CleanupManager (based on a Python feature request)
- Added ContextDecorator.refresh_cm() (based on a Python tracker issue)