contextlib2 is a backport of the standard library's contextlib module to earlier Python versions.
Find a file
Nick Coghlan 77e93832f0
Merge pull request #35 from ncoghlan/issue-12-backport-py3.10-contextlib-docs
Issue #12: Sync API documentation from Python 3.10
2021-06-26 21:44:11 +10:00
.github/workflows Accept 3.10 beta for testing 2021-06-26 15:47:45 +10:00
dev Tweak relative paths for docs patch 2021-06-26 21:28:15 +10:00
docs Issue #12: Sync API documentation from Python 3.10 2021-06-26 21:24:10 +10:00
test Fix test incompatibility with PyPy3 2021-06-26 18:30:55 +10:00
.coveragerc Set up coverage.py. Refs #4. 2016-07-26 14:36:15 +02:00
.gitignore Set up coverage.py. Refs #4. 2016-07-26 14:36:15 +02:00
contextlib2.py Sync test suite, add notes on sync process 2021-06-26 17:49:42 +10:00
CONTRIBUTING.md Updated links for Jazzband move. 2016-07-27 16:42:06 +02:00
LICENSE.txt Add support for tox (http://tox.testrun.org/) 2015-09-14 08:34:55 -07:00
MANIFEST.in Fix test incompatibility with PyPy3 2021-06-26 18:30:55 +10:00
NEWS.rst Sync test suite, add notes on sync process 2021-06-26 17:49:42 +10:00
README.rst Sync test suite, add notes on sync process 2021-06-26 17:49:42 +10:00
setup.cfg Issue #6: Publish universal wheels 2016-05-02 16:54:31 +10:00
setup.py Issue #29: Switch to CalVer, require Python >= 3.6 2021-06-26 15:39:33 +10:00
tox.ini Sync test suite, add notes on sync process 2021-06-26 17:49:42 +10:00
VERSION.txt Issue #29: Switch to CalVer, require Python >= 3.6 2021-06-26 15:39:33 +10:00

.. image:: https://jazzband.co/static/img/badge.svg
   :target: https://jazzband.co/
   :alt: Jazzband

.. image:: https://github.com/jazzband/contextlib2/workflows/Test/badge.svg
   :target: https://github.com/jazzband/contextlib2/actions
   :alt: Tests

.. image:: https://codecov.io/gh/jazzband/contextlib2/branch/master/graph/badge.svg
   :target: https://codecov.io/gh/jazzband/contextlib2
   :alt: Coverage

.. image:: https://readthedocs.org/projects/contextlib2/badge/?version=latest
   :target: https://contextlib2.readthedocs.org/
   :alt: Latest Docs

contextlib2 is a backport of the `standard library's contextlib
module <https://docs.python.org/3/library/contextlib.html>`_ to
earlier Python versions.

It also serves as a real world proving ground for possible future
enhancements to the standard library version.

Development
-----------

contextlib2 has no runtime dependencies, but requires ``unittest2`` for testing
on Python 2.x, as well as ``setuptools`` and ``wheel`` to generate universal
wheel archives.

Local testing is a matter of running::

    python3 -m unittest discover -t . -s test

You can test against multiple versions of Python with
`tox <https://tox.testrun.org/>`_::

    pip install tox
    tox

Versions currently tested in both tox and GitHub Actions are:

* CPython 3.6
* CPython 3.7
* CPython 3.8
* CPython 3.9
* CPython 3.10
* PyPy3

Updating to a new stdlib reference version
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

As of Python 3.10, 3 files needed to be copied from the CPython reference
implementation to contextlib2:

* ``Lib/contextlib.py`` -> ``contextlib2.py``
* ``Lib/test/test_contextlib.py`` -> ``test/test_contextlib.py``
* ``Lib/test/test_contextlib_async.py`` -> ``test/test_contextlib_async.py``

For the 3.10 sync, the only changes needed to the test files were to import from
``contextlib2`` rather than ``contextlib``. The test directory is laid out so
that the test suite's imports from ``test.support`` work the same way they do in
the main CPython test suite.

The changes made to the ``contextlib2.py`` file to get it to run on the older
versions (and to add back in the deprecated APIs that never graduated to the
standard library version) are saved as a patch file in the ``dev`` directory.