diff --git a/.gitignore b/.gitignore index 057e28568e..64e7b3feb4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ +trio/_version.py + # Project-specific generated files docs/build/ diff --git a/ci.sh b/ci.sh index d4f9df3a94..7ea015d77c 100755 --- a/ci.sh +++ b/ci.sh @@ -66,11 +66,11 @@ fi python -c "import sys, struct, ssl; print('#' * 70); print('python:', sys.version); print('version_info:', sys.version_info); print('bits:', struct.calcsize('P') * 8); print('openssl:', ssl.OPENSSL_VERSION, ssl.OPENSSL_VERSION_INFO); print('#' * 70)" -python -m pip install -U pip setuptools wheel +python -m pip install -U pip setuptools setuptools_scm wheel build python -m pip --version -python setup.py sdist --formats=zip -python -m pip install dist/*.zip +python -m build -nsx . +python -m pip install dist/*.tar.gz if [ "$CHECK_FORMATTING" = "1" ]; then python -m pip install -r test-requirements.txt diff --git a/docs-requirements.in b/docs-requirements.in index 7d6abc0033..8b1f1181d9 100644 --- a/docs-requirements.in +++ b/docs-requirements.in @@ -6,6 +6,7 @@ jinja2 < 3.1 sphinx_rtd_theme sphinxcontrib-trio towncrier +setuptools-scm # Trio's own dependencies cffi; os_name == "nt" diff --git a/docs-requirements.txt b/docs-requirements.txt index 6bdd2c3051..5d92b8c835 100644 --- a/docs-requirements.txt +++ b/docs-requirements.txt @@ -59,6 +59,8 @@ pytz==2022.4 # via babel requests==2.28.1 # via sphinx +setuptools-scm==7.0.5 + # via setuptools-scm sniffio==1.3.0 # via -r docs-requirements.in snowballstemmer==2.2.0 diff --git a/newsfragments/2448.feature.rst b/newsfragments/2448.feature.rst new file mode 100644 index 0000000000..0b92cf441e --- /dev/null +++ b/newsfragments/2448.feature.rst @@ -0,0 +1 @@ +Moved the metadata into ``setup.cfg``, that allows automatic parsing of it. diff --git a/pyproject.toml b/pyproject.toml index 944440661f..88d21d74f6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,3 +1,11 @@ +[build-system] +requires = ["setuptools>=42.2", "setuptools_scm[toml]>=3.4.3"] +build-backend = "setuptools.build_meta" + +[tool.setuptools_scm] +write_to = "trio/_version.py" +write_to_template = "__version__ = \"{version}\"\n" + [tool.black] target-version = ['py37'] diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 0000000000..78b0e0af4d --- /dev/null +++ b/setup.cfg @@ -0,0 +1,111 @@ +[metadata] +name = trio +author = Nathaniel J. Smith +author_email = njs@pobox.com +license = MIT OR Apache-2.0 +description = A friendly Python library for async concurrency and I/O +keywords = async, io, networking, trio +url = https://github.com/python-trio/trio +long_description = .. image:: https://raw.githubusercontent.com/python-trio/trio/9b0bec646a31e0d0f67b8b6ecc6939726faf3e17/logo/logo-with-background.svg + :width: 200px + :align: right + + The Trio project's goal is to produce a production-quality, `permissively + licensed `__, + async/await-native I/O library for Python. Like all async libraries, + its main purpose is to help you write programs that do **multiple + things at the same time** with **parallelized I/O**. A web spider that + wants to fetch lots of pages in parallel, a web server that needs to + juggle lots of downloads and websocket connections at the same time, a + process supervisor monitoring multiple subprocesses... that sort of + thing. Compared to other libraries, Trio attempts to distinguish + itself with an obsessive focus on **usability** and + **correctness**. Concurrency is complicated; we try to make it *easy* + to get things *right*. + + Trio was built from the ground up to take advantage of the `latest + Python features `__, and + draws inspiration from `many sources + `__, in + particular Dave Beazley's `Curio `__. + The resulting design is radically simpler than older competitors like + `asyncio `__ and + `Twisted `__, yet just as capable. Trio is + the Python I/O library I always wanted; I find it makes building + I/O-oriented programs easier, less error-prone, and just plain more + fun. `Perhaps you'll find the same + `__. + + This project is young and still somewhat experimental: the overall + design is solid and the existing features are fully tested and + documented, but you may encounter missing functionality or rough + edges. We *do* encourage you do use it, but you should `read and + subscribe to issue #1 + `__ to get warning and a + chance to give feedback about any compatibility-breaking changes. + + Vital statistics: + + * Supported environments: Linux, macOS, or Windows running some kind of Python + 3.7-or-better (either CPython or PyPy3 is fine). \*BSD and illumos likely + work too, but are not tested. + + * Install: ``python3 -m pip install -U trio`` (or on Windows, maybe + ``py -3 -m pip install -U trio``). No compiler needed. + + * Tutorial and reference manual: https://trio.readthedocs.io + + * Bug tracker and source code: https://github.com/python-trio/trio + + * Real-time chat: https://gitter.im/python-trio/general + + * Discussion forum: https://trio.discourse.group + + * License: MIT or Apache 2, your choice + + * Contributor guide: https://trio.readthedocs.io/en/latest/contributing.html + + * Code of conduct: Contributors are requested to follow our `code of + conduct + `_ + in all project spaces. + +classifiers = + Development Status :: 3 - Alpha + Intended Audience :: Developers + License :: OSI Approved :: MIT License + License :: OSI Approved :: Apache Software License + Operating System :: POSIX :: Linux + Operating System :: MacOS :: MacOS X + Operating System :: POSIX :: BSD + Operating System :: Microsoft :: Windows + Programming Language :: Python :: Implementation :: CPython + Programming Language :: Python :: Implementation :: PyPy + Programming Language :: Python :: 3 :: Only + Programming Language :: Python :: 3.7 + Programming Language :: Python :: 3.8 + Programming Language :: Python :: 3.9 + Programming Language :: Python :: 3.10 + Programming Language :: Python :: 3.11 + Topic :: System :: Networking + Framework :: Trio + +[options] +packages = find: +install_requires = + attrs >= 19.2.0 + sortedcontainers + async_generator >= 1.9 + idna + outcome + sniffio + # cffi 1.12 adds from_buffer(require_writable=True) and ffi.release() + # cffi 1.14 fixes memory leak inside ffi.getwinerror() + # cffi is required on Windows, except on PyPy where it is built-in + cffi>=1.14; os_name == 'nt' and implementation_name != 'pypy' + exceptiongroup >= 1.0.0rc9; python_version < '3.11' +setup_requires = + setuptools>=42.2 + setuptools_scm[toml]>=3.4.3 +include_package_data = True +python_requires = >=3.7 diff --git a/setup.py b/setup.py deleted file mode 100644 index 00ba270764..0000000000 --- a/setup.py +++ /dev/null @@ -1,119 +0,0 @@ -from setuptools import setup, find_packages - -exec(open("trio/_version.py", encoding="utf-8").read()) - -LONG_DESC = """\ -.. image:: https://raw.githubusercontent.com/python-trio/trio/9b0bec646a31e0d0f67b8b6ecc6939726faf3e17/logo/logo-with-background.svg - :width: 200px - :align: right - -The Trio project's goal is to produce a production-quality, `permissively -licensed `__, -async/await-native I/O library for Python. Like all async libraries, -its main purpose is to help you write programs that do **multiple -things at the same time** with **parallelized I/O**. A web spider that -wants to fetch lots of pages in parallel, a web server that needs to -juggle lots of downloads and websocket connections at the same time, a -process supervisor monitoring multiple subprocesses... that sort of -thing. Compared to other libraries, Trio attempts to distinguish -itself with an obsessive focus on **usability** and -**correctness**. Concurrency is complicated; we try to make it *easy* -to get things *right*. - -Trio was built from the ground up to take advantage of the `latest -Python features `__, and -draws inspiration from `many sources -`__, in -particular Dave Beazley's `Curio `__. -The resulting design is radically simpler than older competitors like -`asyncio `__ and -`Twisted `__, yet just as capable. Trio is -the Python I/O library I always wanted; I find it makes building -I/O-oriented programs easier, less error-prone, and just plain more -fun. `Perhaps you'll find the same -`__. - -This project is young and still somewhat experimental: the overall -design is solid and the existing features are fully tested and -documented, but you may encounter missing functionality or rough -edges. We *do* encourage you do use it, but you should `read and -subscribe to issue #1 -`__ to get warning and a -chance to give feedback about any compatibility-breaking changes. - -Vital statistics: - -* Supported environments: Linux, macOS, or Windows running some kind of Python - 3.7-or-better (either CPython or PyPy3 is fine). \\*BSD and illumos likely - work too, but are not tested. - -* Install: ``python3 -m pip install -U trio`` (or on Windows, maybe - ``py -3 -m pip install -U trio``). No compiler needed. - -* Tutorial and reference manual: https://trio.readthedocs.io - -* Bug tracker and source code: https://github.com/python-trio/trio - -* Real-time chat: https://gitter.im/python-trio/general - -* Discussion forum: https://trio.discourse.group - -* License: MIT or Apache 2, your choice - -* Contributor guide: https://trio.readthedocs.io/en/latest/contributing.html - -* Code of conduct: Contributors are requested to follow our `code of - conduct - `_ - in all project spaces. -""" - -setup( - name="trio", - version=__version__, - description="A friendly Python library for async concurrency and I/O", - long_description=LONG_DESC, - author="Nathaniel J. Smith", - author_email="njs@pobox.com", - url="https://github.com/python-trio/trio", - license="MIT OR Apache-2.0", - packages=find_packages(), - install_requires=[ - "attrs >= 19.2.0", # for eq - "sortedcontainers", - "async_generator >= 1.9", - "idna", - "outcome", - "sniffio", - # cffi 1.12 adds from_buffer(require_writable=True) and ffi.release() - # cffi 1.14 fixes memory leak inside ffi.getwinerror() - # cffi is required on Windows, except on PyPy where it is built-in - "cffi>=1.14; os_name == 'nt' and implementation_name != 'pypy'", - "exceptiongroup >= 1.0.0rc9; python_version < '3.11'", - ], - # This means, just install *everything* you see under trio/, even if it - # doesn't look like a source file, so long as it appears in MANIFEST.in: - include_package_data=True, - python_requires=">=3.7", - keywords=["async", "io", "networking", "trio"], - classifiers=[ - "Development Status :: 3 - Alpha", - "Intended Audience :: Developers", - "License :: OSI Approved :: MIT License", - "License :: OSI Approved :: Apache Software License", - "Operating System :: POSIX :: Linux", - "Operating System :: MacOS :: MacOS X", - "Operating System :: POSIX :: BSD", - "Operating System :: Microsoft :: Windows", - "Programming Language :: Python :: Implementation :: CPython", - "Programming Language :: Python :: Implementation :: PyPy", - "Programming Language :: Python :: 3 :: Only", - "Programming Language :: Python :: 3.7", - "Programming Language :: Python :: 3.8", - "Programming Language :: Python :: 3.9", - "Programming Language :: Python :: 3.10", - "Programming Language :: Python :: 3.11", - "Topic :: System :: Networking", - "Framework :: Trio", - ], -) diff --git a/trio/_version.py b/trio/_version.py deleted file mode 100644 index 7111a4849d..0000000000 --- a/trio/_version.py +++ /dev/null @@ -1,3 +0,0 @@ -# This file is imported from __init__.py and exec'd from setup.py - -__version__ = "0.22.0+dev"