123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- .. 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 sometimes serves as a real world proving ground for possible future
- enhancements to the standard library version.
- Licensing
- ---------
- As a backport of Python standard library software, the implementation, test
- suite and other supporting files for this project are distributed under the
- Python Software License used for the CPython reference implementation.
- The one exception is the included type hints file, which comes from the
- ``typeshed`` project, and is hence distributed under the Apache License 2.0.
- Development
- -----------
- contextlib2 has no runtime dependencies, but requires ``setuptools`` and
- ``wheel`` at build time 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, 4 files needed to be copied from the CPython reference
- implementation to contextlib2:
- * ``Doc/contextlib.rst`` -> ``docs/contextlib2.rst``
- * ``Lib/contextlib.py`` -> ``contextlib2/__init__.py``
- * ``Lib/test/test_contextlib.py`` -> ``test/test_contextlib.py``
- * ``Lib/test/test_contextlib_async.py`` -> ``test/test_contextlib_async.py``
- The corresponding version of ``contextlib2/__init__.pyi`` also needs to be
- retrieved from the ``typeshed`` project::
- wget https://raw.githubusercontent.com/python/typeshed/master/stdlib/contextlib.pyi
- 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 following patch files are saved in the ``dev`` directory:
- * changes made to ``contextlib2/__init__.py`` 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)
- * changes made to ``contextlib2/__init__.pyi`` to make the Python version
- guards unconditional (since the ``contextlib2`` API is the same on all
- supported versions)
- * changes made to ``docs/contextlib2.rst`` to use ``contextlib2`` version
- numbers in the version added/changed notes and to integrate the module
- documentation with the rest of the project documentation
|